// Macros in statement vs expression position handle backtraces differently. macro_rules! fake_method_stmt { () => { 1.fake() //~ ERROR no method } } macro_rules! fake_field_stmt { () => { 1.fake //~ ERROR doesn't have fields } } macro_rules! fake_anon_field_stmt { () => { (1).0 //~ ERROR doesn't have fields } } macro_rules! fake_method_expr { () => { 1.fake() //~ ERROR no method } } macro_rules! fake_field_expr { () => { 1.fake //~ ERROR doesn't have fields } } macro_rules! fake_anon_field_expr { () => { (1).0 //~ ERROR doesn't have fields } } macro_rules! real_method_stmt { () => { 2.0.neg() //~ ERROR can't call method `neg` on ambiguous numeric type `{float}` } } macro_rules! real_method_expr { () => { 2.0.neg() //~ ERROR can't call method `neg` on ambiguous numeric type `{float}` } } fn main() { fake_method_stmt!(); fake_field_stmt!(); fake_anon_field_stmt!(); real_method_stmt!(); let _ = fake_method_expr!(); let _ = fake_field_expr!(); let _ = fake_anon_field_expr!(); let _ = real_method_expr!(); }