]> git.lizzy.rs Git - rust.git/blob - tests/ui/crashes/auxiliary/proc_macro_crash.rs
Remove force-host and explain no-prefer-dynamic
[rust.git] / tests / ui / crashes / auxiliary / proc_macro_crash.rs
1 // no-prefer-dynamic
2 // ^ compiletest by default builds all aux files as dylibs, but we don't want that for proc-macro
3 // crates. If we don't set this, compiletest will override the `crate_type` attribute below and
4 // compile this as dylib. Removing this then causes the test to fail because a `dylib` crate can't
5 // contain a proc-macro.
6
7 #![feature(repr128)]
8 #![crate_type = "proc-macro"]
9
10 extern crate proc_macro;
11
12 use proc_macro::{Delimiter, Group, Ident, Span, TokenStream, TokenTree};
13 use std::iter::FromIterator;
14
15 #[proc_macro]
16 pub fn macro_test(input_stream: TokenStream) -> TokenStream {
17     let first_token = input_stream.into_iter().next().unwrap();
18     let span = first_token.span();
19
20     TokenStream::from_iter(vec![
21         TokenTree::Ident(Ident::new("fn", Span::call_site())),
22         TokenTree::Ident(Ident::new("code", Span::call_site())),
23         TokenTree::Group(Group::new(Delimiter::Parenthesis, TokenStream::new())),
24         TokenTree::Group(Group::new(Delimiter::Brace, {
25             let mut clause = Group::new(Delimiter::Brace, TokenStream::new());
26             clause.set_span(span);
27
28             TokenStream::from_iter(vec![
29                 TokenTree::Ident(Ident::new("if", Span::call_site())),
30                 TokenTree::Ident(Ident::new("true", Span::call_site())),
31                 TokenTree::Group(clause.clone()),
32                 TokenTree::Ident(Ident::new("else", Span::call_site())),
33                 TokenTree::Group(clause.clone()),
34             ])
35         })),
36     ])
37 }