From 724aad6009fbb850d18e2f99484b10a2fbfe75ed Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Mon, 29 Jul 2024 14:27:32 +0200 Subject: gccrs: Move mbe macro tests to their own directory gcc/testsuite/ChangeLog: * rust/compile/macro-delim.rs: Move to... * rust/compile/macros/mbe/macro-delim.rs: ...here. * rust/compile/macro-issue1053-2.rs: Move to... * rust/compile/macros/mbe/macro-issue1053-2.rs: ...here. * rust/compile/macro-issue1053.rs: Move to... * rust/compile/macros/mbe/macro-issue1053.rs: ...here. * rust/compile/macro-issue1224.rs: Move to... * rust/compile/macros/mbe/macro-issue1224.rs: ...here. * rust/compile/macro-issue1233.rs: Move to... * rust/compile/macros/mbe/macro-issue1233.rs: ...here. * rust/compile/macro-issue1395-2.rs: Move to... * rust/compile/macros/mbe/macro-issue1395-2.rs: ...here. * rust/compile/macro-issue1395.rs: Move to... * rust/compile/macros/mbe/macro-issue1395.rs: ...here. * rust/compile/macro-issue1400-2.rs: Move to... * rust/compile/macros/mbe/macro-issue1400-2.rs: ...here. * rust/compile/macro-issue1400.rs: Move to... * rust/compile/macros/mbe/macro-issue1400.rs: ...here. * rust/compile/macro-issue2092.rs: Move to... * rust/compile/macros/mbe/macro-issue2092.rs: ...here. * rust/compile/macro-issue2192.rs: Move to... * rust/compile/macros/mbe/macro-issue2192.rs: ...here. * rust/compile/macro-issue2194.rs: Move to... * rust/compile/macros/mbe/macro-issue2194.rs: ...here. * rust/compile/macro-issue2229.rs: Move to... * rust/compile/macros/mbe/macro-issue2229.rs: ...here. * rust/compile/macro-issue2264.rs: Move to... * rust/compile/macros/mbe/macro-issue2264.rs: ...here. * rust/compile/macro-issue2268.rs: Move to... * rust/compile/macros/mbe/macro-issue2268.rs: ...here. * rust/compile/macro-issue2273.rs: Move to... * rust/compile/macros/mbe/macro-issue2273.rs: ...here. * rust/compile/macro-issue2653.rs: Move to... * rust/compile/macros/mbe/macro-issue2653.rs: ...here. * rust/compile/macro-issue2983_2984.rs: Move to... * rust/compile/macros/mbe/macro-issue2983_2984.rs: ...here. * rust/compile/macro1.rs: Move to... * rust/compile/macros/mbe/macro1.rs: ...here. * rust/compile/macro10.rs: Move to... * rust/compile/macros/mbe/macro10.rs: ...here. * rust/compile/macro11.rs: Move to... * rust/compile/macros/mbe/macro11.rs: ...here. * rust/compile/macro12.rs: Move to... * rust/compile/macros/mbe/macro12.rs: ...here. * rust/compile/macro13.rs: Move to... * rust/compile/macros/mbe/macro13.rs: ...here. * rust/compile/macro14.rs: Move to... * rust/compile/macros/mbe/macro14.rs: ...here. * rust/compile/macro15.rs: Move to... * rust/compile/macros/mbe/macro15.rs: ...here. * rust/compile/macro16.rs: Move to... * rust/compile/macros/mbe/macro16.rs: ...here. * rust/compile/macro17.rs: Move to... * rust/compile/macros/mbe/macro17.rs: ...here. * rust/compile/macro18.rs: Move to... * rust/compile/macros/mbe/macro18.rs: ...here. * rust/compile/macro19.rs: Move to... * rust/compile/macros/mbe/macro19.rs: ...here. * rust/compile/macro2.rs: Move to... * rust/compile/macros/mbe/macro2.rs: ...here. * rust/compile/macro20.rs: Move to... * rust/compile/macros/mbe/macro20.rs: ...here. * rust/compile/macro21.rs: Move to... * rust/compile/macros/mbe/macro21.rs: ...here. * rust/compile/macro22.rs: Move to... * rust/compile/macros/mbe/macro22.rs: ...here. * rust/compile/macro23.rs: Move to... * rust/compile/macros/mbe/macro23.rs: ...here. * rust/compile/macro25.rs: Move to... * rust/compile/macros/mbe/macro25.rs: ...here. * rust/compile/macro26.rs: Move to... * rust/compile/macros/mbe/macro26.rs: ...here. * rust/compile/macro27.rs: Move to... * rust/compile/macros/mbe/macro27.rs: ...here. * rust/compile/macro28.rs: Move to... * rust/compile/macros/mbe/macro28.rs: ...here. * rust/compile/macro29.rs: Move to... * rust/compile/macros/mbe/macro29.rs: ...here. * rust/compile/macro3.rs: Move to... * rust/compile/macros/mbe/macro3.rs: ...here. * rust/compile/macro30.rs: Move to... * rust/compile/macros/mbe/macro30.rs: ...here. * rust/compile/macro31.rs: Move to... * rust/compile/macros/mbe/macro31.rs: ...here. * rust/compile/macro32.rs: Move to... * rust/compile/macros/mbe/macro32.rs: ...here. * rust/compile/macro33.rs: Move to... * rust/compile/macros/mbe/macro33.rs: ...here. * rust/compile/macro34.rs: Move to... * rust/compile/macros/mbe/macro34.rs: ...here. * rust/compile/macro35.rs: Move to... * rust/compile/macros/mbe/macro35.rs: ...here. * rust/compile/macro36.rs: Move to... * rust/compile/macros/mbe/macro36.rs: ...here. * rust/compile/macro37.rs: Move to... * rust/compile/macros/mbe/macro37.rs: ...here. * rust/compile/macro38.rs: Move to... * rust/compile/macros/mbe/macro38.rs: ...here. * rust/compile/macro39.rs: Move to... * rust/compile/macros/mbe/macro39.rs: ...here. * rust/compile/macro4.rs: Move to... * rust/compile/macros/mbe/macro4.rs: ...here. * rust/compile/macro40.rs: Move to... * rust/compile/macros/mbe/macro40.rs: ...here. * rust/compile/macro41.rs: Move to... * rust/compile/macros/mbe/macro41.rs: ...here. * rust/compile/macro42.rs: Move to... * rust/compile/macros/mbe/macro42.rs: ...here. * rust/compile/macro43.rs: Move to... * rust/compile/macros/mbe/macro43.rs: ...here. * rust/compile/macro44.rs: Move to... * rust/compile/macros/mbe/macro44.rs: ...here. * rust/compile/macro45.rs: Move to... * rust/compile/macros/mbe/macro45.rs: ...here. * rust/compile/macro46.rs: Move to... * rust/compile/macros/mbe/macro46.rs: ...here. * rust/compile/macro47.rs: Move to... * rust/compile/macros/mbe/macro47.rs: ...here. * rust/compile/macro48.rs: Move to... * rust/compile/macros/mbe/macro48.rs: ...here. * rust/compile/macro49.rs: Move to... * rust/compile/macros/mbe/macro49.rs: ...here. * rust/compile/macro5.rs: Move to... * rust/compile/macros/mbe/macro5.rs: ...here. * rust/compile/macro50.rs: Move to... * rust/compile/macros/mbe/macro50.rs: ...here. * rust/compile/macro51.rs: Move to... * rust/compile/macros/mbe/macro51.rs: ...here. * rust/compile/macro52.rs: Move to... * rust/compile/macros/mbe/macro52.rs: ...here. * rust/compile/macro53.rs: Move to... * rust/compile/macros/mbe/macro53.rs: ...here. * rust/compile/macro54.rs: Move to... * rust/compile/macros/mbe/macro54.rs: ...here. * rust/compile/macro55.rs: Move to... * rust/compile/macros/mbe/macro55.rs: ...here. * rust/compile/macro56.rs: Move to... * rust/compile/macros/mbe/macro56.rs: ...here. * rust/compile/macro57.rs: Move to... * rust/compile/macros/mbe/macro57.rs: ...here. * rust/compile/macro6.rs: Move to... * rust/compile/macros/mbe/macro6.rs: ...here. * rust/compile/macro7.rs: Move to... * rust/compile/macros/mbe/macro7.rs: ...here. * rust/compile/macro8.rs: Move to... * rust/compile/macros/mbe/macro8.rs: ...here. * rust/compile/macro9.rs: Move to... * rust/compile/macros/mbe/macro9.rs: ...here. * rust/compile/macro_call_statement.rs: Move to... * rust/compile/macros/mbe/macro_call_statement.rs: ...here. * rust/compile/macro_export_1.rs: Move to... * rust/compile/macros/mbe/macro_export_1.rs: ...here. * rust/compile/macro_return.rs: Move to... * rust/compile/macros/mbe/macro_return.rs: ...here. * rust/compile/macro_rules_macro_rules.rs: Move to... * rust/compile/macros/mbe/macro_rules_macro_rules.rs: ...here. * rust/compile/macro_use1.rs: Move to... * rust/compile/macros/mbe/macro_use1.rs: ...here. * rust/compile/macros/mbe/mbe_macro.exp: New test. Signed-off-by: Pierre-Emmanuel Patry --- gcc/testsuite/rust/compile/macro-delim.rs | 8 --- gcc/testsuite/rust/compile/macro-issue1053-2.rs | 5 -- gcc/testsuite/rust/compile/macro-issue1053.rs | 3 - gcc/testsuite/rust/compile/macro-issue1224.rs | 9 --- gcc/testsuite/rust/compile/macro-issue1233.rs | 22 -------- gcc/testsuite/rust/compile/macro-issue1395-2.rs | 7 --- gcc/testsuite/rust/compile/macro-issue1395.rs | 5 -- gcc/testsuite/rust/compile/macro-issue1400-2.rs | 32 ----------- gcc/testsuite/rust/compile/macro-issue1400.rs | 36 ------------ gcc/testsuite/rust/compile/macro-issue2092.rs | 4 -- gcc/testsuite/rust/compile/macro-issue2192.rs | 7 --- gcc/testsuite/rust/compile/macro-issue2194.rs | 7 --- gcc/testsuite/rust/compile/macro-issue2229.rs | 6 -- gcc/testsuite/rust/compile/macro-issue2264.rs | 12 ---- gcc/testsuite/rust/compile/macro-issue2268.rs | 5 -- gcc/testsuite/rust/compile/macro-issue2273.rs | 7 --- gcc/testsuite/rust/compile/macro-issue2653.rs | 5 -- gcc/testsuite/rust/compile/macro-issue2983_2984.rs | 27 --------- gcc/testsuite/rust/compile/macro1.rs | 3 - gcc/testsuite/rust/compile/macro10.rs | 11 ---- gcc/testsuite/rust/compile/macro11.rs | 11 ---- gcc/testsuite/rust/compile/macro12.rs | 8 --- gcc/testsuite/rust/compile/macro13.rs | 12 ---- gcc/testsuite/rust/compile/macro14.rs | 10 ---- gcc/testsuite/rust/compile/macro15.rs | 12 ---- gcc/testsuite/rust/compile/macro16.rs | 11 ---- gcc/testsuite/rust/compile/macro17.rs | 10 ---- gcc/testsuite/rust/compile/macro18.rs | 14 ----- gcc/testsuite/rust/compile/macro19.rs | 19 ------- gcc/testsuite/rust/compile/macro2.rs | 3 - gcc/testsuite/rust/compile/macro20.rs | 19 ------- gcc/testsuite/rust/compile/macro21.rs | 9 --- gcc/testsuite/rust/compile/macro22.rs | 10 ---- gcc/testsuite/rust/compile/macro23.rs | 28 ---------- gcc/testsuite/rust/compile/macro25.rs | 9 --- gcc/testsuite/rust/compile/macro26.rs | 10 ---- gcc/testsuite/rust/compile/macro27.rs | 8 --- gcc/testsuite/rust/compile/macro28.rs | 8 --- gcc/testsuite/rust/compile/macro29.rs | 8 --- gcc/testsuite/rust/compile/macro3.rs | 3 - gcc/testsuite/rust/compile/macro30.rs | 8 --- gcc/testsuite/rust/compile/macro31.rs | 8 --- gcc/testsuite/rust/compile/macro32.rs | 19 ------- gcc/testsuite/rust/compile/macro33.rs | 5 -- gcc/testsuite/rust/compile/macro34.rs | 3 - gcc/testsuite/rust/compile/macro35.rs | 7 --- gcc/testsuite/rust/compile/macro36.rs | 3 - gcc/testsuite/rust/compile/macro37.rs | 5 -- gcc/testsuite/rust/compile/macro38.rs | 5 -- gcc/testsuite/rust/compile/macro39.rs | 5 -- gcc/testsuite/rust/compile/macro4.rs | 3 - gcc/testsuite/rust/compile/macro40.rs | 51 ----------------- gcc/testsuite/rust/compile/macro41.rs | 13 ----- gcc/testsuite/rust/compile/macro42.rs | 34 ----------- gcc/testsuite/rust/compile/macro43.rs | 65 ---------------------- gcc/testsuite/rust/compile/macro44.rs | 34 ----------- gcc/testsuite/rust/compile/macro45.rs | 7 --- gcc/testsuite/rust/compile/macro46.rs | 19 ------- gcc/testsuite/rust/compile/macro47.rs | 10 ---- gcc/testsuite/rust/compile/macro48.rs | 10 ---- gcc/testsuite/rust/compile/macro49.rs | 9 --- gcc/testsuite/rust/compile/macro5.rs | 3 - gcc/testsuite/rust/compile/macro50.rs | 10 ---- gcc/testsuite/rust/compile/macro51.rs | 3 - gcc/testsuite/rust/compile/macro52.rs | 11 ---- gcc/testsuite/rust/compile/macro53.rs | 10 ---- gcc/testsuite/rust/compile/macro54.rs | 41 -------------- gcc/testsuite/rust/compile/macro55.rs | 10 ---- gcc/testsuite/rust/compile/macro56.rs | 9 --- gcc/testsuite/rust/compile/macro57.rs | 13 ----- gcc/testsuite/rust/compile/macro6.rs | 11 ---- gcc/testsuite/rust/compile/macro7.rs | 13 ----- gcc/testsuite/rust/compile/macro8.rs | 12 ---- gcc/testsuite/rust/compile/macro9.rs | 17 ------ gcc/testsuite/rust/compile/macro_call_statement.rs | 11 ---- gcc/testsuite/rust/compile/macro_export_1.rs | 2 - gcc/testsuite/rust/compile/macro_return.rs | 10 ---- .../rust/compile/macro_rules_macro_rules.rs | 10 ---- gcc/testsuite/rust/compile/macro_use1.rs | 15 ----- .../rust/compile/macros/mbe/macro-delim.rs | 8 +++ .../rust/compile/macros/mbe/macro-issue1053-2.rs | 5 ++ .../rust/compile/macros/mbe/macro-issue1053.rs | 3 + .../rust/compile/macros/mbe/macro-issue1224.rs | 9 +++ .../rust/compile/macros/mbe/macro-issue1233.rs | 22 ++++++++ .../rust/compile/macros/mbe/macro-issue1395-2.rs | 7 +++ .../rust/compile/macros/mbe/macro-issue1395.rs | 5 ++ .../rust/compile/macros/mbe/macro-issue1400-2.rs | 32 +++++++++++ .../rust/compile/macros/mbe/macro-issue1400.rs | 36 ++++++++++++ .../rust/compile/macros/mbe/macro-issue2092.rs | 4 ++ .../rust/compile/macros/mbe/macro-issue2192.rs | 7 +++ .../rust/compile/macros/mbe/macro-issue2194.rs | 7 +++ .../rust/compile/macros/mbe/macro-issue2229.rs | 6 ++ .../rust/compile/macros/mbe/macro-issue2264.rs | 12 ++++ .../rust/compile/macros/mbe/macro-issue2268.rs | 5 ++ .../rust/compile/macros/mbe/macro-issue2273.rs | 7 +++ .../rust/compile/macros/mbe/macro-issue2653.rs | 5 ++ .../compile/macros/mbe/macro-issue2983_2984.rs | 27 +++++++++ gcc/testsuite/rust/compile/macros/mbe/macro1.rs | 3 + gcc/testsuite/rust/compile/macros/mbe/macro10.rs | 11 ++++ gcc/testsuite/rust/compile/macros/mbe/macro11.rs | 11 ++++ gcc/testsuite/rust/compile/macros/mbe/macro12.rs | 8 +++ gcc/testsuite/rust/compile/macros/mbe/macro13.rs | 12 ++++ gcc/testsuite/rust/compile/macros/mbe/macro14.rs | 10 ++++ gcc/testsuite/rust/compile/macros/mbe/macro15.rs | 12 ++++ gcc/testsuite/rust/compile/macros/mbe/macro16.rs | 11 ++++ gcc/testsuite/rust/compile/macros/mbe/macro17.rs | 10 ++++ gcc/testsuite/rust/compile/macros/mbe/macro18.rs | 14 +++++ gcc/testsuite/rust/compile/macros/mbe/macro19.rs | 19 +++++++ gcc/testsuite/rust/compile/macros/mbe/macro2.rs | 3 + gcc/testsuite/rust/compile/macros/mbe/macro20.rs | 19 +++++++ gcc/testsuite/rust/compile/macros/mbe/macro21.rs | 9 +++ gcc/testsuite/rust/compile/macros/mbe/macro22.rs | 10 ++++ gcc/testsuite/rust/compile/macros/mbe/macro23.rs | 28 ++++++++++ gcc/testsuite/rust/compile/macros/mbe/macro25.rs | 9 +++ gcc/testsuite/rust/compile/macros/mbe/macro26.rs | 10 ++++ gcc/testsuite/rust/compile/macros/mbe/macro27.rs | 8 +++ gcc/testsuite/rust/compile/macros/mbe/macro28.rs | 8 +++ gcc/testsuite/rust/compile/macros/mbe/macro29.rs | 8 +++ gcc/testsuite/rust/compile/macros/mbe/macro3.rs | 3 + gcc/testsuite/rust/compile/macros/mbe/macro30.rs | 8 +++ gcc/testsuite/rust/compile/macros/mbe/macro31.rs | 8 +++ gcc/testsuite/rust/compile/macros/mbe/macro32.rs | 19 +++++++ gcc/testsuite/rust/compile/macros/mbe/macro33.rs | 5 ++ gcc/testsuite/rust/compile/macros/mbe/macro34.rs | 3 + gcc/testsuite/rust/compile/macros/mbe/macro35.rs | 7 +++ gcc/testsuite/rust/compile/macros/mbe/macro36.rs | 3 + gcc/testsuite/rust/compile/macros/mbe/macro37.rs | 5 ++ gcc/testsuite/rust/compile/macros/mbe/macro38.rs | 5 ++ gcc/testsuite/rust/compile/macros/mbe/macro39.rs | 5 ++ gcc/testsuite/rust/compile/macros/mbe/macro4.rs | 3 + gcc/testsuite/rust/compile/macros/mbe/macro40.rs | 51 +++++++++++++++++ gcc/testsuite/rust/compile/macros/mbe/macro41.rs | 13 +++++ gcc/testsuite/rust/compile/macros/mbe/macro42.rs | 34 +++++++++++ gcc/testsuite/rust/compile/macros/mbe/macro43.rs | 65 ++++++++++++++++++++++ gcc/testsuite/rust/compile/macros/mbe/macro44.rs | 34 +++++++++++ gcc/testsuite/rust/compile/macros/mbe/macro45.rs | 7 +++ gcc/testsuite/rust/compile/macros/mbe/macro46.rs | 19 +++++++ gcc/testsuite/rust/compile/macros/mbe/macro47.rs | 10 ++++ gcc/testsuite/rust/compile/macros/mbe/macro48.rs | 10 ++++ gcc/testsuite/rust/compile/macros/mbe/macro49.rs | 9 +++ gcc/testsuite/rust/compile/macros/mbe/macro5.rs | 3 + gcc/testsuite/rust/compile/macros/mbe/macro50.rs | 10 ++++ gcc/testsuite/rust/compile/macros/mbe/macro51.rs | 3 + gcc/testsuite/rust/compile/macros/mbe/macro52.rs | 11 ++++ gcc/testsuite/rust/compile/macros/mbe/macro53.rs | 10 ++++ gcc/testsuite/rust/compile/macros/mbe/macro54.rs | 41 ++++++++++++++ gcc/testsuite/rust/compile/macros/mbe/macro55.rs | 10 ++++ gcc/testsuite/rust/compile/macros/mbe/macro56.rs | 9 +++ gcc/testsuite/rust/compile/macros/mbe/macro57.rs | 13 +++++ gcc/testsuite/rust/compile/macros/mbe/macro6.rs | 11 ++++ gcc/testsuite/rust/compile/macros/mbe/macro7.rs | 13 +++++ gcc/testsuite/rust/compile/macros/mbe/macro8.rs | 12 ++++ gcc/testsuite/rust/compile/macros/mbe/macro9.rs | 17 ++++++ .../compile/macros/mbe/macro_call_statement.rs | 11 ++++ .../rust/compile/macros/mbe/macro_export_1.rs | 2 + .../rust/compile/macros/mbe/macro_return.rs | 10 ++++ .../compile/macros/mbe/macro_rules_macro_rules.rs | 10 ++++ .../rust/compile/macros/mbe/macro_use1.rs | 15 +++++ .../rust/compile/macros/mbe/mbe_macro.exp | 35 ++++++++++++ 159 files changed, 1012 insertions(+), 977 deletions(-) delete mode 100644 gcc/testsuite/rust/compile/macro-delim.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue1053-2.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue1053.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue1224.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue1233.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue1395-2.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue1395.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue1400-2.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue1400.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue2092.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue2192.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue2194.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue2229.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue2264.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue2268.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue2273.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue2653.rs delete mode 100644 gcc/testsuite/rust/compile/macro-issue2983_2984.rs delete mode 100644 gcc/testsuite/rust/compile/macro1.rs delete mode 100644 gcc/testsuite/rust/compile/macro10.rs delete mode 100644 gcc/testsuite/rust/compile/macro11.rs delete mode 100644 gcc/testsuite/rust/compile/macro12.rs delete mode 100644 gcc/testsuite/rust/compile/macro13.rs delete mode 100644 gcc/testsuite/rust/compile/macro14.rs delete mode 100644 gcc/testsuite/rust/compile/macro15.rs delete mode 100644 gcc/testsuite/rust/compile/macro16.rs delete mode 100644 gcc/testsuite/rust/compile/macro17.rs delete mode 100644 gcc/testsuite/rust/compile/macro18.rs delete mode 100644 gcc/testsuite/rust/compile/macro19.rs delete mode 100644 gcc/testsuite/rust/compile/macro2.rs delete mode 100644 gcc/testsuite/rust/compile/macro20.rs delete mode 100644 gcc/testsuite/rust/compile/macro21.rs delete mode 100644 gcc/testsuite/rust/compile/macro22.rs delete mode 100644 gcc/testsuite/rust/compile/macro23.rs delete mode 100644 gcc/testsuite/rust/compile/macro25.rs delete mode 100644 gcc/testsuite/rust/compile/macro26.rs delete mode 100644 gcc/testsuite/rust/compile/macro27.rs delete mode 100644 gcc/testsuite/rust/compile/macro28.rs delete mode 100644 gcc/testsuite/rust/compile/macro29.rs delete mode 100644 gcc/testsuite/rust/compile/macro3.rs delete mode 100644 gcc/testsuite/rust/compile/macro30.rs delete mode 100644 gcc/testsuite/rust/compile/macro31.rs delete mode 100644 gcc/testsuite/rust/compile/macro32.rs delete mode 100644 gcc/testsuite/rust/compile/macro33.rs delete mode 100644 gcc/testsuite/rust/compile/macro34.rs delete mode 100644 gcc/testsuite/rust/compile/macro35.rs delete mode 100644 gcc/testsuite/rust/compile/macro36.rs delete mode 100644 gcc/testsuite/rust/compile/macro37.rs delete mode 100644 gcc/testsuite/rust/compile/macro38.rs delete mode 100644 gcc/testsuite/rust/compile/macro39.rs delete mode 100644 gcc/testsuite/rust/compile/macro4.rs delete mode 100644 gcc/testsuite/rust/compile/macro40.rs delete mode 100644 gcc/testsuite/rust/compile/macro41.rs delete mode 100644 gcc/testsuite/rust/compile/macro42.rs delete mode 100644 gcc/testsuite/rust/compile/macro43.rs delete mode 100644 gcc/testsuite/rust/compile/macro44.rs delete mode 100644 gcc/testsuite/rust/compile/macro45.rs delete mode 100644 gcc/testsuite/rust/compile/macro46.rs delete mode 100644 gcc/testsuite/rust/compile/macro47.rs delete mode 100644 gcc/testsuite/rust/compile/macro48.rs delete mode 100644 gcc/testsuite/rust/compile/macro49.rs delete mode 100644 gcc/testsuite/rust/compile/macro5.rs delete mode 100644 gcc/testsuite/rust/compile/macro50.rs delete mode 100644 gcc/testsuite/rust/compile/macro51.rs delete mode 100644 gcc/testsuite/rust/compile/macro52.rs delete mode 100644 gcc/testsuite/rust/compile/macro53.rs delete mode 100644 gcc/testsuite/rust/compile/macro54.rs delete mode 100644 gcc/testsuite/rust/compile/macro55.rs delete mode 100644 gcc/testsuite/rust/compile/macro56.rs delete mode 100644 gcc/testsuite/rust/compile/macro57.rs delete mode 100644 gcc/testsuite/rust/compile/macro6.rs delete mode 100644 gcc/testsuite/rust/compile/macro7.rs delete mode 100644 gcc/testsuite/rust/compile/macro8.rs delete mode 100644 gcc/testsuite/rust/compile/macro9.rs delete mode 100644 gcc/testsuite/rust/compile/macro_call_statement.rs delete mode 100644 gcc/testsuite/rust/compile/macro_export_1.rs delete mode 100644 gcc/testsuite/rust/compile/macro_return.rs delete mode 100644 gcc/testsuite/rust/compile/macro_rules_macro_rules.rs delete mode 100644 gcc/testsuite/rust/compile/macro_use1.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-delim.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue1053-2.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue1053.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue1224.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue1233.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue1395-2.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue1395.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue1400-2.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue1400.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue2092.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue2192.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue2194.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue2229.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue2264.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue2268.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue2273.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue2653.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro-issue2983_2984.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro1.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro10.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro11.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro12.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro13.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro14.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro15.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro16.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro17.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro18.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro19.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro2.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro20.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro21.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro22.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro23.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro25.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro26.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro27.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro28.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro29.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro3.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro30.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro31.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro32.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro33.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro34.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro35.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro36.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro37.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro38.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro39.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro4.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro40.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro41.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro42.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro43.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro44.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro45.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro46.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro47.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro48.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro49.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro5.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro50.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro51.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro52.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro53.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro54.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro55.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro56.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro57.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro6.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro7.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro8.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro9.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro_call_statement.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro_export_1.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro_return.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro_rules_macro_rules.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/macro_use1.rs create mode 100644 gcc/testsuite/rust/compile/macros/mbe/mbe_macro.exp (limited to 'gcc') diff --git a/gcc/testsuite/rust/compile/macro-delim.rs b/gcc/testsuite/rust/compile/macro-delim.rs deleted file mode 100644 index de4cd56..0000000 --- a/gcc/testsuite/rust/compile/macro-delim.rs +++ /dev/null @@ -1,8 +0,0 @@ -macro_rules! foo { - ([]) => {struct Foo;}; - (()) => {struct _A;}; - (bool) => {struct _B;}; -} - -foo! (()); -foo! (bool); diff --git a/gcc/testsuite/rust/compile/macro-issue1053-2.rs b/gcc/testsuite/rust/compile/macro-issue1053-2.rs deleted file mode 100644 index 3145990..0000000 --- a/gcc/testsuite/rust/compile/macro-issue1053-2.rs +++ /dev/null @@ -1,5 +0,0 @@ -macro_rules! m { - ($e:expr $(forbidden)*) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" } - // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-1 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } -} diff --git a/gcc/testsuite/rust/compile/macro-issue1053.rs b/gcc/testsuite/rust/compile/macro-issue1053.rs deleted file mode 100644 index 1e96849..0000000 --- a/gcc/testsuite/rust/compile/macro-issue1053.rs +++ /dev/null @@ -1,3 +0,0 @@ -macro_rules! m { - ($e:expr $(,)*) => {{}}; -} diff --git a/gcc/testsuite/rust/compile/macro-issue1224.rs b/gcc/testsuite/rust/compile/macro-issue1224.rs deleted file mode 100644 index 003bbcd..0000000 --- a/gcc/testsuite/rust/compile/macro-issue1224.rs +++ /dev/null @@ -1,9 +0,0 @@ -macro_rules! impl_uint { - ($($ty:ident),*) => { - impl $ty {} // { dg-error "metavariable is still repeating at this depth" } - // { dg-error "unrecognised token" "" { target *-*-* } .-1 } // Spurious - // { dg-error "could not parse type" "" { target *-*-* } .-2 } // Spurious - }; -} - -impl_uint!(u8, u16, u32, u64, u128); diff --git a/gcc/testsuite/rust/compile/macro-issue1233.rs b/gcc/testsuite/rust/compile/macro-issue1233.rs deleted file mode 100644 index 7fab787..0000000 --- a/gcc/testsuite/rust/compile/macro-issue1233.rs +++ /dev/null @@ -1,22 +0,0 @@ -// { dg-additional-options "-frust-cfg=A -w" } - -macro_rules! impl_uint { - ($($ty:ident = $lang:literal),*) => { - $( - impl $ty { - pub fn to_le(self) -> Self { - #[cfg(not(A))] - { - self - } - #[cfg(A)] - { - self - } - } - } - )* - } -} - -impl_uint!(u8 = "u8", u16 = "u16", u32 = "u32"); diff --git a/gcc/testsuite/rust/compile/macro-issue1395-2.rs b/gcc/testsuite/rust/compile/macro-issue1395-2.rs deleted file mode 100644 index 1df6a3a..0000000 --- a/gcc/testsuite/rust/compile/macro-issue1395-2.rs +++ /dev/null @@ -1,7 +0,0 @@ -// { dg-additional-options "-frust-edition=2018" } - -macro_rules! try { - // { dg-error "expecting .identifier. but .try. found" "" { target *-*-* } .-1 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } - () => {}; -} diff --git a/gcc/testsuite/rust/compile/macro-issue1395.rs b/gcc/testsuite/rust/compile/macro-issue1395.rs deleted file mode 100644 index b0368c1..0000000 --- a/gcc/testsuite/rust/compile/macro-issue1395.rs +++ /dev/null @@ -1,5 +0,0 @@ -// Default edition is 2015 - this is valid - -macro_rules! try { - () => {}; -} diff --git a/gcc/testsuite/rust/compile/macro-issue1400-2.rs b/gcc/testsuite/rust/compile/macro-issue1400-2.rs deleted file mode 100644 index ba7b61b..0000000 --- a/gcc/testsuite/rust/compile/macro-issue1400-2.rs +++ /dev/null @@ -1,32 +0,0 @@ -macro_rules! foo { - ( ( $( $Trait: ident ),+ ) for $($Ty: ident)* ) => { - $( - impl $Trait for $Ty { - // { dg-error "different amount of matches used in merged repetitions: expected 4, got 1" "" { target *-*-* } .-1 } - fn bar() -> i32 { - 14 - } - } - )+ - } -} - -trait Foo { - fn bar() -> i32; -} - -trait Bar { - fn bar() -> i32; -} - -trait Baz { - fn bar() -> i32; -} - -trait Qux { - fn bar() -> i32; -} - -struct S; - -foo! {(Foo, Bar, Baz, Qux) for S} diff --git a/gcc/testsuite/rust/compile/macro-issue1400.rs b/gcc/testsuite/rust/compile/macro-issue1400.rs deleted file mode 100644 index 5c51b78..0000000 --- a/gcc/testsuite/rust/compile/macro-issue1400.rs +++ /dev/null @@ -1,36 +0,0 @@ -// { dg-additional-options "-w" } - -#[lang = "sized"] -pub trait Sized {} - -macro_rules! foo { - ( ( $( $Trait: ident ),+ ) for $Ty: ident ) => { - $( - impl $Trait for $Ty { - fn bar() -> i32 { - 14 - } - } - )+ - } -} - -trait Foo { - fn bar() -> i32; -} - -trait Bar { - fn bar() -> i32; -} - -trait Baz { - fn bar() -> i32; -} - -trait Qux { - fn bar() -> i32; -} - -struct S; - -foo! {(Foo, Bar, Baz, Qux) for S} diff --git a/gcc/testsuite/rust/compile/macro-issue2092.rs b/gcc/testsuite/rust/compile/macro-issue2092.rs deleted file mode 100644 index ec20743..0000000 --- a/gcc/testsuite/rust/compile/macro-issue2092.rs +++ /dev/null @@ -1,4 +0,0 @@ -macro_rules! foo { - // { dg-error "does not take a separator" "#2092" { target *-*-*} .+1 } - ($(a),?) => {}; -} diff --git a/gcc/testsuite/rust/compile/macro-issue2192.rs b/gcc/testsuite/rust/compile/macro-issue2192.rs deleted file mode 100644 index deb2dd7..0000000 --- a/gcc/testsuite/rust/compile/macro-issue2192.rs +++ /dev/null @@ -1,7 +0,0 @@ -macro_rules! foo { - ($a:ident) => {} -} - -pub fn bar() { - foo!(self); -} diff --git a/gcc/testsuite/rust/compile/macro-issue2194.rs b/gcc/testsuite/rust/compile/macro-issue2194.rs deleted file mode 100644 index c94b114..0000000 --- a/gcc/testsuite/rust/compile/macro-issue2194.rs +++ /dev/null @@ -1,7 +0,0 @@ -macro_rules! foo {($type:ident) => { - let $type = 12; -}} - -pub fn foo() { - foo!(_a); -} diff --git a/gcc/testsuite/rust/compile/macro-issue2229.rs b/gcc/testsuite/rust/compile/macro-issue2229.rs deleted file mode 100644 index c148ff5..0000000 --- a/gcc/testsuite/rust/compile/macro-issue2229.rs +++ /dev/null @@ -1,6 +0,0 @@ -macro_rules! foo { - ($(+)+) => {e}; - () => {} -} - -foo!(); diff --git a/gcc/testsuite/rust/compile/macro-issue2264.rs b/gcc/testsuite/rust/compile/macro-issue2264.rs deleted file mode 100644 index 497dd3c..0000000 --- a/gcc/testsuite/rust/compile/macro-issue2264.rs +++ /dev/null @@ -1,12 +0,0 @@ -macro_rules! a { - (1) => {x}; - (2) => {}; -} - -macro_rules! b { - (a) => {x}; - (b) => {}; -} - -a!(2); -b!(b); diff --git a/gcc/testsuite/rust/compile/macro-issue2268.rs b/gcc/testsuite/rust/compile/macro-issue2268.rs deleted file mode 100644 index 4bd9c10..0000000 --- a/gcc/testsuite/rust/compile/macro-issue2268.rs +++ /dev/null @@ -1,5 +0,0 @@ -macro_rules! foo { - ($(+ $($a:ident)*)*) => {$($($a)*)*} -} - -foo!(); diff --git a/gcc/testsuite/rust/compile/macro-issue2273.rs b/gcc/testsuite/rust/compile/macro-issue2273.rs deleted file mode 100644 index ee3dd1f..0000000 --- a/gcc/testsuite/rust/compile/macro-issue2273.rs +++ /dev/null @@ -1,7 +0,0 @@ -macro_rules! mac { - () => {();} // { dg-warning "trailing semicolon" } -} - -pub fn foo() { - mac!() -} diff --git a/gcc/testsuite/rust/compile/macro-issue2653.rs b/gcc/testsuite/rust/compile/macro-issue2653.rs deleted file mode 100644 index dc2972f..0000000 --- a/gcc/testsuite/rust/compile/macro-issue2653.rs +++ /dev/null @@ -1,5 +0,0 @@ -macro_rules! foo { - ($p:path $b:block) => {}; -} - -fn main() {} diff --git a/gcc/testsuite/rust/compile/macro-issue2983_2984.rs b/gcc/testsuite/rust/compile/macro-issue2983_2984.rs deleted file mode 100644 index 637d572..0000000 --- a/gcc/testsuite/rust/compile/macro-issue2983_2984.rs +++ /dev/null @@ -1,27 +0,0 @@ -pub struct ReadDir { - pub inner: i32, - #[cfg(not(A))] - pub end_of_stream: bool, - #[cfg(A)] - pub end_of_stream_but_different: bool, -} - -fn main() { - // Success - let _ = ReadDir { - inner: 14, - #[cfg(not(A))] - end_of_stream: false, - #[cfg(A)] - end_of_stream_but_different: false, - }; - - // Error - let _ = ReadDir { - inner: 14, - end_of_stream: false, - end_of_stream_but_different: false, // { dg-error "failed to resolve type for field" } - // { dg-error "unknown field" "" { target *-*-* } .-1 } - // { dg-prune-output "compilation terminated" } - }; -} diff --git a/gcc/testsuite/rust/compile/macro1.rs b/gcc/testsuite/rust/compile/macro1.rs deleted file mode 100644 index 8cd9418..0000000 --- a/gcc/testsuite/rust/compile/macro1.rs +++ /dev/null @@ -1,3 +0,0 @@ -macro_rules! empty_parens { - () => (); -} diff --git a/gcc/testsuite/rust/compile/macro10.rs b/gcc/testsuite/rust/compile/macro10.rs deleted file mode 100644 index 3f1453e..0000000 --- a/gcc/testsuite/rust/compile/macro10.rs +++ /dev/null @@ -1,11 +0,0 @@ -// { dg-additional-options "-w" } -macro_rules! foo { - {} => { - 15 - }; -} - -fn main() { - let a = foo!(); - let b = foo![]; -} diff --git a/gcc/testsuite/rust/compile/macro11.rs b/gcc/testsuite/rust/compile/macro11.rs deleted file mode 100644 index 97b89a1..0000000 --- a/gcc/testsuite/rust/compile/macro11.rs +++ /dev/null @@ -1,11 +0,0 @@ -macro_rules! call_f { - ($($f:ident)*) => { $($f();)* } -} - -fn f() {} - -// This is valid and should parse items -fn main() { - call_f!(f f f f); -} - diff --git a/gcc/testsuite/rust/compile/macro12.rs b/gcc/testsuite/rust/compile/macro12.rs deleted file mode 100644 index b75fbad..0000000 --- a/gcc/testsuite/rust/compile/macro12.rs +++ /dev/null @@ -1,8 +0,0 @@ -// { dg-additional-options "-w" } -macro_rules! define_vars { - ($($v:ident)*) => { $(let $v = 15;)* } -} - -fn main() { - define_vars!(a0 b f __some_identifier); -} diff --git a/gcc/testsuite/rust/compile/macro13.rs b/gcc/testsuite/rust/compile/macro13.rs deleted file mode 100644 index eb8dfbb..0000000 --- a/gcc/testsuite/rust/compile/macro13.rs +++ /dev/null @@ -1,12 +0,0 @@ -// { dg-additional-options "-w" } -macro_rules! create_type { - ($s:ident) => { - struct $s; - }; -} - -fn main() { - create_type!(A); - - let a = A; -} diff --git a/gcc/testsuite/rust/compile/macro14.rs b/gcc/testsuite/rust/compile/macro14.rs deleted file mode 100644 index b18c56e..0000000 --- a/gcc/testsuite/rust/compile/macro14.rs +++ /dev/null @@ -1,10 +0,0 @@ -// { dg-additional-options "-w" } -macro_rules! define_vars { - ($($v:ident)*) => { $(let $v = 15;)* } -} - -fn main() -> i32 { - define_vars!(a0 b f __some_identifier); - - b -} diff --git a/gcc/testsuite/rust/compile/macro15.rs b/gcc/testsuite/rust/compile/macro15.rs deleted file mode 100644 index 02c739e..0000000 --- a/gcc/testsuite/rust/compile/macro15.rs +++ /dev/null @@ -1,12 +0,0 @@ -// { dg-additional-options "-w" } -macro_rules! create_type { - ($s:ident) => { - struct $s; - }; -} - -create_type!(SomeOuterType); - -fn main() { - let a = SomeOuterType; -} diff --git a/gcc/testsuite/rust/compile/macro16.rs b/gcc/testsuite/rust/compile/macro16.rs deleted file mode 100644 index e5e56ed..0000000 --- a/gcc/testsuite/rust/compile/macro16.rs +++ /dev/null @@ -1,11 +0,0 @@ -fn main() { - macro_rules! create_type { - ($s:ident) => { - struct $s(i32); - }; - } - - create_type!(Wrapper); - - let _ = Wrapper(15); -} diff --git a/gcc/testsuite/rust/compile/macro17.rs b/gcc/testsuite/rust/compile/macro17.rs deleted file mode 100644 index b50afbe..0000000 --- a/gcc/testsuite/rust/compile/macro17.rs +++ /dev/null @@ -1,10 +0,0 @@ -macro_rules! rep { - ($a:literal) => { $a }; - ($a:literal $(, $e:literal)*) => { - $a + rep!(0 $(, $e)*) // { dg-error "reached recursion limit" } - } -} - -fn main() -> i32 { - rep!(1, 2) -} diff --git a/gcc/testsuite/rust/compile/macro18.rs b/gcc/testsuite/rust/compile/macro18.rs deleted file mode 100644 index 5418725..0000000 --- a/gcc/testsuite/rust/compile/macro18.rs +++ /dev/null @@ -1,14 +0,0 @@ -// { dg-additional-options "-w" } - -macro_rules! take_stmt { - ($s:stmt) => { - $s; - }; -} - -fn main() -> i32 { - take_stmt!(let complete = 15;); // { dg-error "Failed to match any rule within macro" } - take_stmt!(let lacking = 14); - - 0 -} diff --git a/gcc/testsuite/rust/compile/macro19.rs b/gcc/testsuite/rust/compile/macro19.rs deleted file mode 100644 index 1bf9a2b..0000000 --- a/gcc/testsuite/rust/compile/macro19.rs +++ /dev/null @@ -1,19 +0,0 @@ -// { dg-additional-options "-w" } - -macro_rules! call_without_semi { - () => { - f() - }; - (block) => {{ - f() - }}; -} - -fn f() {} - -fn main() -> i32 { - call_without_semi!(); - call_without_semi!(block); - - 0 -} diff --git a/gcc/testsuite/rust/compile/macro2.rs b/gcc/testsuite/rust/compile/macro2.rs deleted file mode 100644 index a437655..0000000 --- a/gcc/testsuite/rust/compile/macro2.rs +++ /dev/null @@ -1,3 +0,0 @@ -macro_rules! empty_brackets { - [] => []; -} diff --git a/gcc/testsuite/rust/compile/macro20.rs b/gcc/testsuite/rust/compile/macro20.rs deleted file mode 100644 index e03455b..0000000 --- a/gcc/testsuite/rust/compile/macro20.rs +++ /dev/null @@ -1,19 +0,0 @@ -#[lang = "sized"] -pub trait Sized {} - -macro_rules! define_trait { - ($assoc:ident, $i:item) => { - type $assoc; - - $i - }; -} - -trait DefinedThroughMacros { - define_trait!( - Inner, - fn takes_inner(i: Self::Inner) -> Self::Inner { - i - } - ); -} diff --git a/gcc/testsuite/rust/compile/macro21.rs b/gcc/testsuite/rust/compile/macro21.rs deleted file mode 100644 index 9a1d773..0000000 --- a/gcc/testsuite/rust/compile/macro21.rs +++ /dev/null @@ -1,9 +0,0 @@ -macro_rules! c_fn { - {$name:ident ($($arg_name:ident $arg_ty:ty),*) -> $ret_ty:ty} => { - fn $name($($arg_name: $arg_ty)*) -> $ret_ty; - }; -} - -extern "C" { - c_fn! {puts (s *const i8) -> i64} -} diff --git a/gcc/testsuite/rust/compile/macro22.rs b/gcc/testsuite/rust/compile/macro22.rs deleted file mode 100644 index bdc4bad..0000000 --- a/gcc/testsuite/rust/compile/macro22.rs +++ /dev/null @@ -1,10 +0,0 @@ -macro_rules! print { - () => { - fn puts(s: *const i8); - fn printf(fmt: *const i8, ...); - }; -} - -extern "C" { - print! {} -} diff --git a/gcc/testsuite/rust/compile/macro23.rs b/gcc/testsuite/rust/compile/macro23.rs deleted file mode 100644 index a6a2afd..0000000 --- a/gcc/testsuite/rust/compile/macro23.rs +++ /dev/null @@ -1,28 +0,0 @@ -#[lang = "sized"] -pub trait Sized {} - -macro_rules! maybe_impl { - ($left:ident, $right:ident, $l_fn:ident, $r_fn:ident) => { - fn $l_fn(value: T) -> Maybe { - Maybe::$left(value) - } - - fn $r_fn() -> Maybe { - Maybe::$right - } - }; -} - -enum Maybe { - Just(T), - Nothing, -} - -impl Maybe { - maybe_impl!(Just, Nothing, just, nothing); -} - -fn main() { - let _ = Maybe::just(14); - let _: Maybe = Maybe::nothing(); -} diff --git a/gcc/testsuite/rust/compile/macro25.rs b/gcc/testsuite/rust/compile/macro25.rs deleted file mode 100644 index d92534c..0000000 --- a/gcc/testsuite/rust/compile/macro25.rs +++ /dev/null @@ -1,9 +0,0 @@ -macro_rules! valid { - ($($a:literal)* $i:ident) => {{}}; -} - -fn main() { - valid!(1 one_lit); - valid!(identifier_only); - valid!(1 2 two_lits); -} diff --git a/gcc/testsuite/rust/compile/macro26.rs b/gcc/testsuite/rust/compile/macro26.rs deleted file mode 100644 index f6588e7..0000000 --- a/gcc/testsuite/rust/compile/macro26.rs +++ /dev/null @@ -1,10 +0,0 @@ -macro_rules! repeat { - ( $( $i:literal ),* ; $( $j:literal ),* ) => (( $( ($i,$j) ),* )) - // { dg-error "different amount of matches used in merged repetitions" "" { target *-*-* } .-1 } -} - -fn main() -> i32 { - let _ = repeat!(1, 2, 3; 2, 3); - - 0 -} diff --git a/gcc/testsuite/rust/compile/macro27.rs b/gcc/testsuite/rust/compile/macro27.rs deleted file mode 100644 index ee7833b..0000000 --- a/gcc/testsuite/rust/compile/macro27.rs +++ /dev/null @@ -1,8 +0,0 @@ -macro_rules! m { - ($a:expr tok) => { - // { dg-error "token .identifier. is not allowed after .expr. fragment" "" { target *-*-* } .-1 } - // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } - $a - }; -} diff --git a/gcc/testsuite/rust/compile/macro28.rs b/gcc/testsuite/rust/compile/macro28.rs deleted file mode 100644 index 8002f28..0000000 --- a/gcc/testsuite/rust/compile/macro28.rs +++ /dev/null @@ -1,8 +0,0 @@ -macro_rules! m { - ($a:expr $(tok $es:expr)*) => { - // { dg-error "token .identifier. is not allowed after .expr. fragment" "" { target *-*-* } .-1 } - // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } - $a - }; -} diff --git a/gcc/testsuite/rust/compile/macro29.rs b/gcc/testsuite/rust/compile/macro29.rs deleted file mode 100644 index 39f5021..0000000 --- a/gcc/testsuite/rust/compile/macro29.rs +++ /dev/null @@ -1,8 +0,0 @@ -macro_rules! m { - ($($es:expr)* tok) => { - // { dg-error "token .identifier. is not allowed after .expr. fragment" "" { target *-*-* } .-1 } - // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } - $a - }; -} diff --git a/gcc/testsuite/rust/compile/macro3.rs b/gcc/testsuite/rust/compile/macro3.rs deleted file mode 100644 index e5d3e93..0000000 --- a/gcc/testsuite/rust/compile/macro3.rs +++ /dev/null @@ -1,3 +0,0 @@ -macro_rules! empty_curlies { - {} => {}; -} diff --git a/gcc/testsuite/rust/compile/macro30.rs b/gcc/testsuite/rust/compile/macro30.rs deleted file mode 100644 index 35064bc0..0000000 --- a/gcc/testsuite/rust/compile/macro30.rs +++ /dev/null @@ -1,8 +0,0 @@ -macro_rules! m { - ($e:expr $f:expr) => { - // { dg-error "fragment is not allowed after .expr. fragment" "" { target *-*-* } .-1 } - // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } - $e - }; -} diff --git a/gcc/testsuite/rust/compile/macro31.rs b/gcc/testsuite/rust/compile/macro31.rs deleted file mode 100644 index 6674a5f..0000000 --- a/gcc/testsuite/rust/compile/macro31.rs +++ /dev/null @@ -1,8 +0,0 @@ -macro_rules! m { - ($($e:expr)* $($f:expr)*) => { - // { dg-error "fragment is not allowed after .expr. fragment" "" { target *-*-* } .-1 } - // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } - $e - }; -} diff --git a/gcc/testsuite/rust/compile/macro32.rs b/gcc/testsuite/rust/compile/macro32.rs deleted file mode 100644 index d1d6305..0000000 --- a/gcc/testsuite/rust/compile/macro32.rs +++ /dev/null @@ -1,19 +0,0 @@ -macro_rules! s { - ($s:stmt) => {{}}; -} - -macro_rules! multi_s { - ($($s:stmt)+) => {{}}; -} - -fn main() -> i32 { - s!(let a = 15); - s!(;); // Empty statement - s!(let a = 15;); // { dg-error "Failed to match any rule within macro" } - multi_s!(let a = 15;); - // ^ this actually gets parsed as two statements - one LetStmt and one - // empty statement. This is the same behavior as rustc, which you can - // see using a count!() macro - - 32 -} diff --git a/gcc/testsuite/rust/compile/macro33.rs b/gcc/testsuite/rust/compile/macro33.rs deleted file mode 100644 index 2ccd33e..0000000 --- a/gcc/testsuite/rust/compile/macro33.rs +++ /dev/null @@ -1,5 +0,0 @@ -macro_rules! forbidden_frag { - ($t:ty $not_block:ident) => {{}}; // { dg-error "fragment specifier .ident. is not allowed after .ty. fragments" } - // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-1 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } -} diff --git a/gcc/testsuite/rust/compile/macro34.rs b/gcc/testsuite/rust/compile/macro34.rs deleted file mode 100644 index 105d042..0000000 --- a/gcc/testsuite/rust/compile/macro34.rs +++ /dev/null @@ -1,3 +0,0 @@ -macro_rules! allowed_after_expr_matcher { - (($t:expr) bok) => {{}}; // follow-set restrictions do not apply after a matcher, but they do apply inside the matcher -} diff --git a/gcc/testsuite/rust/compile/macro35.rs b/gcc/testsuite/rust/compile/macro35.rs deleted file mode 100644 index 07b157b..0000000 --- a/gcc/testsuite/rust/compile/macro35.rs +++ /dev/null @@ -1,7 +0,0 @@ -macro_rules! inside_matcher { - (($e:expr tok) tok) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" } - // { dg-error "failed to parse macro matcher" "" { target *-*-* } .-1 } - // { dg-error "failed to parse macro match" "" { target *-*-* } .-2 } - // { dg-error "required first macro rule" "" { target *-*-* } .-3 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-4 } -} diff --git a/gcc/testsuite/rust/compile/macro36.rs b/gcc/testsuite/rust/compile/macro36.rs deleted file mode 100644 index e5d66b2..0000000 --- a/gcc/testsuite/rust/compile/macro36.rs +++ /dev/null @@ -1,3 +0,0 @@ -macro_rules! ty_allowed { - ($t:ty $b:block) => {{}}; -} diff --git a/gcc/testsuite/rust/compile/macro37.rs b/gcc/testsuite/rust/compile/macro37.rs deleted file mode 100644 index 5713d90..0000000 --- a/gcc/testsuite/rust/compile/macro37.rs +++ /dev/null @@ -1,5 +0,0 @@ -macro_rules! invalid_after_zeroable { - ($e:expr $(,)* forbidden) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" } - // { dg-error "required first macro rule" "" { target *-*-* } .-1 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } -} diff --git a/gcc/testsuite/rust/compile/macro38.rs b/gcc/testsuite/rust/compile/macro38.rs deleted file mode 100644 index eb294ae..0000000 --- a/gcc/testsuite/rust/compile/macro38.rs +++ /dev/null @@ -1,5 +0,0 @@ -macro_rules! invalid_after_zeroable_multi { - ($e:expr $(,)? $(;)* $(=>)? forbidden) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" } - // { dg-error "required first macro rule" "" { target *-*-* } .-1 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } -} diff --git a/gcc/testsuite/rust/compile/macro39.rs b/gcc/testsuite/rust/compile/macro39.rs deleted file mode 100644 index f5c498c..0000000 --- a/gcc/testsuite/rust/compile/macro39.rs +++ /dev/null @@ -1,5 +0,0 @@ -macro_rules! m { - ($e:expr (, parenthesis_forbidden)) => {{}}; // { dg-error "token .\\(. at start of matcher is not allowed after .expr. fragment" } - // { dg-error "required first macro rule" "" { target *-*-* } .-1 } - // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } -} diff --git a/gcc/testsuite/rust/compile/macro4.rs b/gcc/testsuite/rust/compile/macro4.rs deleted file mode 100644 index 47ff6c9..0000000 --- a/gcc/testsuite/rust/compile/macro4.rs +++ /dev/null @@ -1,3 +0,0 @@ -macro_rules! one_keyword { - (kw) => {}; -} diff --git a/gcc/testsuite/rust/compile/macro40.rs b/gcc/testsuite/rust/compile/macro40.rs deleted file mode 100644 index f9d048e..0000000 --- a/gcc/testsuite/rust/compile/macro40.rs +++ /dev/null @@ -1,51 +0,0 @@ -// { dg-additional-options "-w" } - -#[lang = "sized"] -pub trait Sized {} - -macro_rules! t { - () => { - i32 - }; -} - -macro_rules! s { - () => { - *const i8 - }; -} - -extern "C" { - fn printf(s: s!(), ...); -} - -fn square(arg: t!()) -> t!() { - let input: t!() = arg; - - input * input -} - -trait Trait { - fn f() -> t!(); - fn g(arg: t!()); -} - -struct Wrapper { - inner: t!(), -} - -impl Trait for Wrapper { - fn f() -> t!() { - 1 - } - - fn g(arg: t!()) {} -} - -fn id(arg: T) -> T { - arg -} - -fn main() { - id::(15); -} diff --git a/gcc/testsuite/rust/compile/macro41.rs b/gcc/testsuite/rust/compile/macro41.rs deleted file mode 100644 index 3824422..0000000 --- a/gcc/testsuite/rust/compile/macro41.rs +++ /dev/null @@ -1,13 +0,0 @@ -macro_rules! empty { - ($($t:tt)*) => {}; -} - -empty! {nothing} -empty! {struct OuterItem;} -empty! {} - -fn main() { - empty! {as statement}; - empty! {any child item}; - empty! {}; -} diff --git a/gcc/testsuite/rust/compile/macro42.rs b/gcc/testsuite/rust/compile/macro42.rs deleted file mode 100644 index b3fbf6d..0000000 --- a/gcc/testsuite/rust/compile/macro42.rs +++ /dev/null @@ -1,34 +0,0 @@ -// { dg-additional-options "-w -frust-cfg=A" } -#![feature(rustc_attrs)] - -#[rustc_builtin_macro] -macro_rules! cfg { - () => {{}}; -} - -fn main() -> i32 { - let mut res = 0; - if cfg!(A) { - res = 1; - } - - if cfg!(A) { - res = 2; - } else { - res = 3; - } - - if cfg!(A) { - res = 4; - } else if cfg!(A) { - res = 5; - } - - let res = if cfg!(A) { - 6 - } else { - 7 - }; - - return res; -} diff --git a/gcc/testsuite/rust/compile/macro43.rs b/gcc/testsuite/rust/compile/macro43.rs deleted file mode 100644 index 992bc77..0000000 --- a/gcc/testsuite/rust/compile/macro43.rs +++ /dev/null @@ -1,65 +0,0 @@ -macro_rules! nonzero_integers { - ( $( $Ty: ident($Int: ty); )+ ) => { - $( - /// An integer that is known not to equal zero. - /// - /// This enables some memory layout optimization. - /// For example, `Option` is the same size as `u32`: - /// - /// ```rust - /// use std::mem::size_of; - /// assert_eq!(size_of::>(), size_of::()); - /// ``` - #[stable(feature = "nonzero", since = "1.28.0")] - // not all derive macros are implemented yet, and this test does not test these anyways - // #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] - #[repr(transparent)] - pub struct $Ty(NonZero<$Int>); - - impl $Ty { - /// Create a non-zero without checking the value. - /// - /// # Safety - /// - /// The value must not be zero. - #[stable(feature = "nonzero", since = "1.28.0")] - #[inline] - pub const unsafe fn new_unchecked(n: $Int) -> Self { - $Ty(NonZero(n)) - } - - /// Create a non-zero if the given value is not zero. - #[stable(feature = "nonzero", since = "1.28.0")] - #[inline] - pub fn new(n: $Int) -> Option { - if n != 0 { - Some($Ty(NonZero(n))) - } else { - None - } - } - - /// Returns the value as a primitive type. - #[stable(feature = "nonzero", since = "1.28.0")] - #[inline] - pub fn get(self) -> $Int { - self.0 .0 - } - - } - - impl_nonzero_fmt! { // { dg-error "unknown macro" } - (Debug, Display, Binary, Octal, LowerHex, UpperHex) for $Ty - } - )+ - } -} - -nonzero_integers! { - NonZeroU8(u8); - NonZeroU16(u16); - NonZeroU32(u32); - NonZeroU64(u64); - NonZeroU128(u128); - NonZeroUsize(usize); -} diff --git a/gcc/testsuite/rust/compile/macro44.rs b/gcc/testsuite/rust/compile/macro44.rs deleted file mode 100644 index dabac6f..0000000 --- a/gcc/testsuite/rust/compile/macro44.rs +++ /dev/null @@ -1,34 +0,0 @@ -mod foo { - mod bar { - mod baz { - macro_rules! baz { - () => {{}}; - } - } - } - - macro_rules! foo { - () => {{}}; - } - - fn foo_f() { - foo!(); - } - - fn bar_f() { - baz!(); // { dg-error "unknown macro" } - } -} - -mod foo2 { - #[macro_export] - macro_rules! bar1 { - () => {}; - } - - macro_rules! bar2 { - () => {}; - } -} - -fn main() {} diff --git a/gcc/testsuite/rust/compile/macro45.rs b/gcc/testsuite/rust/compile/macro45.rs deleted file mode 100644 index 52dbcbb..0000000 --- a/gcc/testsuite/rust/compile/macro45.rs +++ /dev/null @@ -1,7 +0,0 @@ -macro_rules! empty { - () => {}; // { dg-error "found unexpected token '\}' in null denotation" } -} - -fn main() { - let a = empty!(); -} diff --git a/gcc/testsuite/rust/compile/macro46.rs b/gcc/testsuite/rust/compile/macro46.rs deleted file mode 100644 index 3ef811a..0000000 --- a/gcc/testsuite/rust/compile/macro46.rs +++ /dev/null @@ -1,19 +0,0 @@ -fn foo() {} - -fn main() { - macro_rules! a { - () => { - foo(); - }; - } - - { - macro_rules! a { - () => { - bar(); - }; - } - } - - a!(); -} diff --git a/gcc/testsuite/rust/compile/macro47.rs b/gcc/testsuite/rust/compile/macro47.rs deleted file mode 100644 index 36545af..0000000 --- a/gcc/testsuite/rust/compile/macro47.rs +++ /dev/null @@ -1,10 +0,0 @@ -// Check the follow-set of :vis in macro rules. - -macro_rules! my_mac { - ($v:vis async) => { - $v struct Foo(i32); - }; - ($v:vis $i:ident) => { - $v struct $i(i32); - } -} diff --git a/gcc/testsuite/rust/compile/macro48.rs b/gcc/testsuite/rust/compile/macro48.rs deleted file mode 100644 index 6b3b369..0000000 --- a/gcc/testsuite/rust/compile/macro48.rs +++ /dev/null @@ -1,10 +0,0 @@ -// Check that "priv" is not in the follow set of :vis. - -// { dg-error "token .priv. is not allowed after .vis. fragment" "#359" { target *-*-* } .+4 } -// { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .+3 } -// { dg-error "failed to parse item in crate" "" { target *-*-* } .+2 } -macro_rules! my_mac { - ($v:vis priv) => { - $v struct Foo(i32); - } -} diff --git a/gcc/testsuite/rust/compile/macro49.rs b/gcc/testsuite/rust/compile/macro49.rs deleted file mode 100644 index 0900f7c..0000000 --- a/gcc/testsuite/rust/compile/macro49.rs +++ /dev/null @@ -1,9 +0,0 @@ -macro_rules! closure { - () => {{ - 14 + 15 - }}; -} - -fn main() { - let _ = || closure!(); -} diff --git a/gcc/testsuite/rust/compile/macro5.rs b/gcc/testsuite/rust/compile/macro5.rs deleted file mode 100644 index a5d8095..0000000 --- a/gcc/testsuite/rust/compile/macro5.rs +++ /dev/null @@ -1,3 +0,0 @@ -macro_rules! rust_keyword { - (fn) => {}; -} diff --git a/gcc/testsuite/rust/compile/macro50.rs b/gcc/testsuite/rust/compile/macro50.rs deleted file mode 100644 index e85afa7..0000000 --- a/gcc/testsuite/rust/compile/macro50.rs +++ /dev/null @@ -1,10 +0,0 @@ -macro_rules! foo { - () => { - u32 - }; -} - -fn main() { - let _a = 15i32; - let _b = _a as foo!(); -} diff --git a/gcc/testsuite/rust/compile/macro51.rs b/gcc/testsuite/rust/compile/macro51.rs deleted file mode 100644 index 6659486..0000000 --- a/gcc/testsuite/rust/compile/macro51.rs +++ /dev/null @@ -1,3 +0,0 @@ -macro_rules! test { - ($_:ident) => {""} -} diff --git a/gcc/testsuite/rust/compile/macro52.rs b/gcc/testsuite/rust/compile/macro52.rs deleted file mode 100644 index 31002eb..0000000 --- a/gcc/testsuite/rust/compile/macro52.rs +++ /dev/null @@ -1,11 +0,0 @@ -macro_rules! multi { - ($( $a:ident )? $( + $b:ident )?) => { - { - $( let $a: u32 )?; - } - } -} - -pub fn foo() { - multi!(_a); -} diff --git a/gcc/testsuite/rust/compile/macro53.rs b/gcc/testsuite/rust/compile/macro53.rs deleted file mode 100644 index efa2d4b..0000000 --- a/gcc/testsuite/rust/compile/macro53.rs +++ /dev/null @@ -1,10 +0,0 @@ -macro_rules! numbers { - {} => { 1 2 } - // { dg-error "expecting .;. but .integer literal. found" "" { target *-*-* } .-1 } -} - -pub fn foo() { - numbers!(); -} - -fn main() -> i32 { 0 } diff --git a/gcc/testsuite/rust/compile/macro54.rs b/gcc/testsuite/rust/compile/macro54.rs deleted file mode 100644 index d3b3f80..0000000 --- a/gcc/testsuite/rust/compile/macro54.rs +++ /dev/null @@ -1,41 +0,0 @@ -#[lang = "sized"] -pub trait Sized {} - -macro_rules! foo { - () => {"foo"}; - (number) => { 12 }; - (false) => { false }; -} - -pub const A: &'static str = foo!(); -pub static B: &'static str = foo!(); - -pub trait Number { - const VALUE: u32; -} - -impl Number for u32 { - const VALUE: u32 = foo!(number); -} - -impl u32 { - pub const TWELVE: u32 = foo!(number); -} - -pub enum E { - Variant = foo!(number), -} - -pub fn f(c: bool) -> &'static str { - match c { - false => foo!(), - true if foo!(false) => "abc", - _ => "xyz" - } -} - - -fn main() { - let _ = A; - let _ = u32::VALUE - u32::TWELVE; -} diff --git a/gcc/testsuite/rust/compile/macro55.rs b/gcc/testsuite/rust/compile/macro55.rs deleted file mode 100644 index 808718c..0000000 --- a/gcc/testsuite/rust/compile/macro55.rs +++ /dev/null @@ -1,10 +0,0 @@ -macro_rules! id { - ($i:ident) => { $i } -} - -pub enum F { - Tuple(id!(u32)), - Struct { field: id!(u64) }, -} - -fn main() {} diff --git a/gcc/testsuite/rust/compile/macro56.rs b/gcc/testsuite/rust/compile/macro56.rs deleted file mode 100644 index bf42a64..0000000 --- a/gcc/testsuite/rust/compile/macro56.rs +++ /dev/null @@ -1,9 +0,0 @@ -macro_rules! check { - (a, b, c ; x, y, z; e, r; a) => {} -} - -macro_rules! foo { - ($($($i:ident),*);*) => {check!($($($i),*);*);} -} - -foo!(a, b, c ; x, y, z; e, r; a); diff --git a/gcc/testsuite/rust/compile/macro57.rs b/gcc/testsuite/rust/compile/macro57.rs deleted file mode 100644 index 0640d2f..0000000 --- a/gcc/testsuite/rust/compile/macro57.rs +++ /dev/null @@ -1,13 +0,0 @@ -macro_rules! macro_rules { - () => {}; -} - -macro_rules! foo { - () => {}; -} - -foo!(); - -fn main() {} - -macro_rules!(); diff --git a/gcc/testsuite/rust/compile/macro6.rs b/gcc/testsuite/rust/compile/macro6.rs deleted file mode 100644 index 9c54a67..0000000 --- a/gcc/testsuite/rust/compile/macro6.rs +++ /dev/null @@ -1,11 +0,0 @@ -macro_rules! zero_or_one { - ($($a:literal)?) => { - f(); - } -} - -fn main() { - zero_or_one!(); - zero_or_one!(14); - zero_or_one!(125 12 "gcc"); // { dg-error "Failed to match any rule within macro" } -} diff --git a/gcc/testsuite/rust/compile/macro7.rs b/gcc/testsuite/rust/compile/macro7.rs deleted file mode 100644 index 563acdd..0000000 --- a/gcc/testsuite/rust/compile/macro7.rs +++ /dev/null @@ -1,13 +0,0 @@ -fn f() {} - -macro_rules! one_or_more { - ($($a:literal)+) => { - f(); - }; -} - -fn main() { - one_or_more!(1 1 1 1 1 1 1 1 1 1 1 "rust" 'c'); - one_or_more!(1); - one_or_more!(); // { dg-error "Failed to match any rule within macro" } -} diff --git a/gcc/testsuite/rust/compile/macro8.rs b/gcc/testsuite/rust/compile/macro8.rs deleted file mode 100644 index d3e8af9..0000000 --- a/gcc/testsuite/rust/compile/macro8.rs +++ /dev/null @@ -1,12 +0,0 @@ -fn f() {} - -macro_rules! expr { - ($($a:expr)?) => { - f(); - }; -} - -fn main() { - expr!(); - expr!(14); -} diff --git a/gcc/testsuite/rust/compile/macro9.rs b/gcc/testsuite/rust/compile/macro9.rs deleted file mode 100644 index 9a59089..0000000 --- a/gcc/testsuite/rust/compile/macro9.rs +++ /dev/null @@ -1,17 +0,0 @@ -macro_rules! add { - ($e:expr, $($es:expr),*) => { - $e + add!($($es),*) - }; - ($e:expr) => { - $e - }; -} - -fn main() -> i32 { - let a = add!(15 2 9); // { dg-error "Failed to match any rule within macro" } - let b = add!(15); - let b = add!(15 14); // { dg-error "Failed to match any rule within macro" } - let b = add!(15, 14,); // { dg-error "Failed to match any rule within macro" } - - 0 -} diff --git a/gcc/testsuite/rust/compile/macro_call_statement.rs b/gcc/testsuite/rust/compile/macro_call_statement.rs deleted file mode 100644 index 3d18cc9..0000000 --- a/gcc/testsuite/rust/compile/macro_call_statement.rs +++ /dev/null @@ -1,11 +0,0 @@ -fn f() {} - -macro_rules! panic { - () => ( - crate::f() - ); -} - -fn main() { - panic!(); -} diff --git a/gcc/testsuite/rust/compile/macro_export_1.rs b/gcc/testsuite/rust/compile/macro_export_1.rs deleted file mode 100644 index f87df08..0000000 --- a/gcc/testsuite/rust/compile/macro_export_1.rs +++ /dev/null @@ -1,2 +0,0 @@ -#[macro_use] -mod foo {} diff --git a/gcc/testsuite/rust/compile/macro_return.rs b/gcc/testsuite/rust/compile/macro_return.rs deleted file mode 100644 index 8b06f87..0000000 --- a/gcc/testsuite/rust/compile/macro_return.rs +++ /dev/null @@ -1,10 +0,0 @@ -// { dg-additional-options "-w" } - -macro_rules! add { - ($a:expr) => { $a }; - ($a:expr, $($b:expr),+) => { $a + add!($($b),*) } -} - -fn main() -> i32 { - add!(add!(1, 2)) -} diff --git a/gcc/testsuite/rust/compile/macro_rules_macro_rules.rs b/gcc/testsuite/rust/compile/macro_rules_macro_rules.rs deleted file mode 100644 index ecd1712..0000000 --- a/gcc/testsuite/rust/compile/macro_rules_macro_rules.rs +++ /dev/null @@ -1,10 +0,0 @@ -macro_rules! macro_rules { - () => { - struct S; - }; -} -macro_rules! {} // calls the macro defined above - -fn main() { - let _s = S; -} diff --git a/gcc/testsuite/rust/compile/macro_use1.rs b/gcc/testsuite/rust/compile/macro_use1.rs deleted file mode 100644 index e98eadf..0000000 --- a/gcc/testsuite/rust/compile/macro_use1.rs +++ /dev/null @@ -1,15 +0,0 @@ -#[macro_use] -mod foo { - macro_rules! a { - () => {}; - } - - macro_rules! b { - () => {}; - } -} - -fn main() { - a!(); - b!(); -} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-delim.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-delim.rs new file mode 100644 index 0000000..de4cd56 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-delim.rs @@ -0,0 +1,8 @@ +macro_rules! foo { + ([]) => {struct Foo;}; + (()) => {struct _A;}; + (bool) => {struct _B;}; +} + +foo! (()); +foo! (bool); diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053-2.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053-2.rs new file mode 100644 index 0000000..3145990 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053-2.rs @@ -0,0 +1,5 @@ +macro_rules! m { + ($e:expr $(forbidden)*) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" } + // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-1 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053.rs new file mode 100644 index 0000000..1e96849 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1053.rs @@ -0,0 +1,3 @@ +macro_rules! m { + ($e:expr $(,)*) => {{}}; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue1224.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1224.rs new file mode 100644 index 0000000..003bbcd --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1224.rs @@ -0,0 +1,9 @@ +macro_rules! impl_uint { + ($($ty:ident),*) => { + impl $ty {} // { dg-error "metavariable is still repeating at this depth" } + // { dg-error "unrecognised token" "" { target *-*-* } .-1 } // Spurious + // { dg-error "could not parse type" "" { target *-*-* } .-2 } // Spurious + }; +} + +impl_uint!(u8, u16, u32, u64, u128); diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue1233.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1233.rs new file mode 100644 index 0000000..7fab787 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1233.rs @@ -0,0 +1,22 @@ +// { dg-additional-options "-frust-cfg=A -w" } + +macro_rules! impl_uint { + ($($ty:ident = $lang:literal),*) => { + $( + impl $ty { + pub fn to_le(self) -> Self { + #[cfg(not(A))] + { + self + } + #[cfg(A)] + { + self + } + } + } + )* + } +} + +impl_uint!(u8 = "u8", u16 = "u16", u32 = "u32"); diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395-2.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395-2.rs new file mode 100644 index 0000000..1df6a3a --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395-2.rs @@ -0,0 +1,7 @@ +// { dg-additional-options "-frust-edition=2018" } + +macro_rules! try { + // { dg-error "expecting .identifier. but .try. found" "" { target *-*-* } .-1 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } + () => {}; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395.rs new file mode 100644 index 0000000..b0368c1 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1395.rs @@ -0,0 +1,5 @@ +// Default edition is 2015 - this is valid + +macro_rules! try { + () => {}; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400-2.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400-2.rs new file mode 100644 index 0000000..ba7b61b --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400-2.rs @@ -0,0 +1,32 @@ +macro_rules! foo { + ( ( $( $Trait: ident ),+ ) for $($Ty: ident)* ) => { + $( + impl $Trait for $Ty { + // { dg-error "different amount of matches used in merged repetitions: expected 4, got 1" "" { target *-*-* } .-1 } + fn bar() -> i32 { + 14 + } + } + )+ + } +} + +trait Foo { + fn bar() -> i32; +} + +trait Bar { + fn bar() -> i32; +} + +trait Baz { + fn bar() -> i32; +} + +trait Qux { + fn bar() -> i32; +} + +struct S; + +foo! {(Foo, Bar, Baz, Qux) for S} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400.rs new file mode 100644 index 0000000..5c51b78 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue1400.rs @@ -0,0 +1,36 @@ +// { dg-additional-options "-w" } + +#[lang = "sized"] +pub trait Sized {} + +macro_rules! foo { + ( ( $( $Trait: ident ),+ ) for $Ty: ident ) => { + $( + impl $Trait for $Ty { + fn bar() -> i32 { + 14 + } + } + )+ + } +} + +trait Foo { + fn bar() -> i32; +} + +trait Bar { + fn bar() -> i32; +} + +trait Baz { + fn bar() -> i32; +} + +trait Qux { + fn bar() -> i32; +} + +struct S; + +foo! {(Foo, Bar, Baz, Qux) for S} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2092.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2092.rs new file mode 100644 index 0000000..ec20743 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2092.rs @@ -0,0 +1,4 @@ +macro_rules! foo { + // { dg-error "does not take a separator" "#2092" { target *-*-*} .+1 } + ($(a),?) => {}; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2192.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2192.rs new file mode 100644 index 0000000..deb2dd7 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2192.rs @@ -0,0 +1,7 @@ +macro_rules! foo { + ($a:ident) => {} +} + +pub fn bar() { + foo!(self); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2194.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2194.rs new file mode 100644 index 0000000..c94b114 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2194.rs @@ -0,0 +1,7 @@ +macro_rules! foo {($type:ident) => { + let $type = 12; +}} + +pub fn foo() { + foo!(_a); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2229.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2229.rs new file mode 100644 index 0000000..c148ff5 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2229.rs @@ -0,0 +1,6 @@ +macro_rules! foo { + ($(+)+) => {e}; + () => {} +} + +foo!(); diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2264.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2264.rs new file mode 100644 index 0000000..497dd3c --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2264.rs @@ -0,0 +1,12 @@ +macro_rules! a { + (1) => {x}; + (2) => {}; +} + +macro_rules! b { + (a) => {x}; + (b) => {}; +} + +a!(2); +b!(b); diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2268.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2268.rs new file mode 100644 index 0000000..4bd9c10 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2268.rs @@ -0,0 +1,5 @@ +macro_rules! foo { + ($(+ $($a:ident)*)*) => {$($($a)*)*} +} + +foo!(); diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2273.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2273.rs new file mode 100644 index 0000000..ee3dd1f --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2273.rs @@ -0,0 +1,7 @@ +macro_rules! mac { + () => {();} // { dg-warning "trailing semicolon" } +} + +pub fn foo() { + mac!() +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2653.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2653.rs new file mode 100644 index 0000000..dc2972f --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2653.rs @@ -0,0 +1,5 @@ +macro_rules! foo { + ($p:path $b:block) => {}; +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro-issue2983_2984.rs b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2983_2984.rs new file mode 100644 index 0000000..637d572 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro-issue2983_2984.rs @@ -0,0 +1,27 @@ +pub struct ReadDir { + pub inner: i32, + #[cfg(not(A))] + pub end_of_stream: bool, + #[cfg(A)] + pub end_of_stream_but_different: bool, +} + +fn main() { + // Success + let _ = ReadDir { + inner: 14, + #[cfg(not(A))] + end_of_stream: false, + #[cfg(A)] + end_of_stream_but_different: false, + }; + + // Error + let _ = ReadDir { + inner: 14, + end_of_stream: false, + end_of_stream_but_different: false, // { dg-error "failed to resolve type for field" } + // { dg-error "unknown field" "" { target *-*-* } .-1 } + // { dg-prune-output "compilation terminated" } + }; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro1.rs b/gcc/testsuite/rust/compile/macros/mbe/macro1.rs new file mode 100644 index 0000000..8cd9418 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro1.rs @@ -0,0 +1,3 @@ +macro_rules! empty_parens { + () => (); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro10.rs b/gcc/testsuite/rust/compile/macros/mbe/macro10.rs new file mode 100644 index 0000000..3f1453e --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro10.rs @@ -0,0 +1,11 @@ +// { dg-additional-options "-w" } +macro_rules! foo { + {} => { + 15 + }; +} + +fn main() { + let a = foo!(); + let b = foo![]; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro11.rs b/gcc/testsuite/rust/compile/macros/mbe/macro11.rs new file mode 100644 index 0000000..97b89a1 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro11.rs @@ -0,0 +1,11 @@ +macro_rules! call_f { + ($($f:ident)*) => { $($f();)* } +} + +fn f() {} + +// This is valid and should parse items +fn main() { + call_f!(f f f f); +} + diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro12.rs b/gcc/testsuite/rust/compile/macros/mbe/macro12.rs new file mode 100644 index 0000000..b75fbad --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro12.rs @@ -0,0 +1,8 @@ +// { dg-additional-options "-w" } +macro_rules! define_vars { + ($($v:ident)*) => { $(let $v = 15;)* } +} + +fn main() { + define_vars!(a0 b f __some_identifier); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro13.rs b/gcc/testsuite/rust/compile/macros/mbe/macro13.rs new file mode 100644 index 0000000..eb8dfbb --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro13.rs @@ -0,0 +1,12 @@ +// { dg-additional-options "-w" } +macro_rules! create_type { + ($s:ident) => { + struct $s; + }; +} + +fn main() { + create_type!(A); + + let a = A; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro14.rs b/gcc/testsuite/rust/compile/macros/mbe/macro14.rs new file mode 100644 index 0000000..b18c56e --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro14.rs @@ -0,0 +1,10 @@ +// { dg-additional-options "-w" } +macro_rules! define_vars { + ($($v:ident)*) => { $(let $v = 15;)* } +} + +fn main() -> i32 { + define_vars!(a0 b f __some_identifier); + + b +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro15.rs b/gcc/testsuite/rust/compile/macros/mbe/macro15.rs new file mode 100644 index 0000000..02c739e --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro15.rs @@ -0,0 +1,12 @@ +// { dg-additional-options "-w" } +macro_rules! create_type { + ($s:ident) => { + struct $s; + }; +} + +create_type!(SomeOuterType); + +fn main() { + let a = SomeOuterType; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro16.rs b/gcc/testsuite/rust/compile/macros/mbe/macro16.rs new file mode 100644 index 0000000..e5e56ed --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro16.rs @@ -0,0 +1,11 @@ +fn main() { + macro_rules! create_type { + ($s:ident) => { + struct $s(i32); + }; + } + + create_type!(Wrapper); + + let _ = Wrapper(15); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro17.rs b/gcc/testsuite/rust/compile/macros/mbe/macro17.rs new file mode 100644 index 0000000..b50afbe --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro17.rs @@ -0,0 +1,10 @@ +macro_rules! rep { + ($a:literal) => { $a }; + ($a:literal $(, $e:literal)*) => { + $a + rep!(0 $(, $e)*) // { dg-error "reached recursion limit" } + } +} + +fn main() -> i32 { + rep!(1, 2) +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro18.rs b/gcc/testsuite/rust/compile/macros/mbe/macro18.rs new file mode 100644 index 0000000..5418725 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro18.rs @@ -0,0 +1,14 @@ +// { dg-additional-options "-w" } + +macro_rules! take_stmt { + ($s:stmt) => { + $s; + }; +} + +fn main() -> i32 { + take_stmt!(let complete = 15;); // { dg-error "Failed to match any rule within macro" } + take_stmt!(let lacking = 14); + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro19.rs b/gcc/testsuite/rust/compile/macros/mbe/macro19.rs new file mode 100644 index 0000000..1bf9a2b --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro19.rs @@ -0,0 +1,19 @@ +// { dg-additional-options "-w" } + +macro_rules! call_without_semi { + () => { + f() + }; + (block) => {{ + f() + }}; +} + +fn f() {} + +fn main() -> i32 { + call_without_semi!(); + call_without_semi!(block); + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro2.rs b/gcc/testsuite/rust/compile/macros/mbe/macro2.rs new file mode 100644 index 0000000..a437655 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro2.rs @@ -0,0 +1,3 @@ +macro_rules! empty_brackets { + [] => []; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro20.rs b/gcc/testsuite/rust/compile/macros/mbe/macro20.rs new file mode 100644 index 0000000..e03455b --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro20.rs @@ -0,0 +1,19 @@ +#[lang = "sized"] +pub trait Sized {} + +macro_rules! define_trait { + ($assoc:ident, $i:item) => { + type $assoc; + + $i + }; +} + +trait DefinedThroughMacros { + define_trait!( + Inner, + fn takes_inner(i: Self::Inner) -> Self::Inner { + i + } + ); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro21.rs b/gcc/testsuite/rust/compile/macros/mbe/macro21.rs new file mode 100644 index 0000000..9a1d773 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro21.rs @@ -0,0 +1,9 @@ +macro_rules! c_fn { + {$name:ident ($($arg_name:ident $arg_ty:ty),*) -> $ret_ty:ty} => { + fn $name($($arg_name: $arg_ty)*) -> $ret_ty; + }; +} + +extern "C" { + c_fn! {puts (s *const i8) -> i64} +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro22.rs b/gcc/testsuite/rust/compile/macros/mbe/macro22.rs new file mode 100644 index 0000000..bdc4bad --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro22.rs @@ -0,0 +1,10 @@ +macro_rules! print { + () => { + fn puts(s: *const i8); + fn printf(fmt: *const i8, ...); + }; +} + +extern "C" { + print! {} +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro23.rs b/gcc/testsuite/rust/compile/macros/mbe/macro23.rs new file mode 100644 index 0000000..a6a2afd --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro23.rs @@ -0,0 +1,28 @@ +#[lang = "sized"] +pub trait Sized {} + +macro_rules! maybe_impl { + ($left:ident, $right:ident, $l_fn:ident, $r_fn:ident) => { + fn $l_fn(value: T) -> Maybe { + Maybe::$left(value) + } + + fn $r_fn() -> Maybe { + Maybe::$right + } + }; +} + +enum Maybe { + Just(T), + Nothing, +} + +impl Maybe { + maybe_impl!(Just, Nothing, just, nothing); +} + +fn main() { + let _ = Maybe::just(14); + let _: Maybe = Maybe::nothing(); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro25.rs b/gcc/testsuite/rust/compile/macros/mbe/macro25.rs new file mode 100644 index 0000000..d92534c --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro25.rs @@ -0,0 +1,9 @@ +macro_rules! valid { + ($($a:literal)* $i:ident) => {{}}; +} + +fn main() { + valid!(1 one_lit); + valid!(identifier_only); + valid!(1 2 two_lits); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro26.rs b/gcc/testsuite/rust/compile/macros/mbe/macro26.rs new file mode 100644 index 0000000..f6588e7 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro26.rs @@ -0,0 +1,10 @@ +macro_rules! repeat { + ( $( $i:literal ),* ; $( $j:literal ),* ) => (( $( ($i,$j) ),* )) + // { dg-error "different amount of matches used in merged repetitions" "" { target *-*-* } .-1 } +} + +fn main() -> i32 { + let _ = repeat!(1, 2, 3; 2, 3); + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro27.rs b/gcc/testsuite/rust/compile/macros/mbe/macro27.rs new file mode 100644 index 0000000..ee7833b --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro27.rs @@ -0,0 +1,8 @@ +macro_rules! m { + ($a:expr tok) => { + // { dg-error "token .identifier. is not allowed after .expr. fragment" "" { target *-*-* } .-1 } + // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } + $a + }; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro28.rs b/gcc/testsuite/rust/compile/macros/mbe/macro28.rs new file mode 100644 index 0000000..8002f28 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro28.rs @@ -0,0 +1,8 @@ +macro_rules! m { + ($a:expr $(tok $es:expr)*) => { + // { dg-error "token .identifier. is not allowed after .expr. fragment" "" { target *-*-* } .-1 } + // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } + $a + }; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro29.rs b/gcc/testsuite/rust/compile/macros/mbe/macro29.rs new file mode 100644 index 0000000..39f5021 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro29.rs @@ -0,0 +1,8 @@ +macro_rules! m { + ($($es:expr)* tok) => { + // { dg-error "token .identifier. is not allowed after .expr. fragment" "" { target *-*-* } .-1 } + // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } + $a + }; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro3.rs b/gcc/testsuite/rust/compile/macros/mbe/macro3.rs new file mode 100644 index 0000000..e5d3e93 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro3.rs @@ -0,0 +1,3 @@ +macro_rules! empty_curlies { + {} => {}; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro30.rs b/gcc/testsuite/rust/compile/macros/mbe/macro30.rs new file mode 100644 index 0000000..35064bc0 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro30.rs @@ -0,0 +1,8 @@ +macro_rules! m { + ($e:expr $f:expr) => { + // { dg-error "fragment is not allowed after .expr. fragment" "" { target *-*-* } .-1 } + // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } + $e + }; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro31.rs b/gcc/testsuite/rust/compile/macros/mbe/macro31.rs new file mode 100644 index 0000000..6674a5f --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro31.rs @@ -0,0 +1,8 @@ +macro_rules! m { + ($($e:expr)* $($f:expr)*) => { + // { dg-error "fragment is not allowed after .expr. fragment" "" { target *-*-* } .-1 } + // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-2 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-3 } + $e + }; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro32.rs b/gcc/testsuite/rust/compile/macros/mbe/macro32.rs new file mode 100644 index 0000000..d1d6305 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro32.rs @@ -0,0 +1,19 @@ +macro_rules! s { + ($s:stmt) => {{}}; +} + +macro_rules! multi_s { + ($($s:stmt)+) => {{}}; +} + +fn main() -> i32 { + s!(let a = 15); + s!(;); // Empty statement + s!(let a = 15;); // { dg-error "Failed to match any rule within macro" } + multi_s!(let a = 15;); + // ^ this actually gets parsed as two statements - one LetStmt and one + // empty statement. This is the same behavior as rustc, which you can + // see using a count!() macro + + 32 +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro33.rs b/gcc/testsuite/rust/compile/macros/mbe/macro33.rs new file mode 100644 index 0000000..2ccd33e --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro33.rs @@ -0,0 +1,5 @@ +macro_rules! forbidden_frag { + ($t:ty $not_block:ident) => {{}}; // { dg-error "fragment specifier .ident. is not allowed after .ty. fragments" } + // { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .-1 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro34.rs b/gcc/testsuite/rust/compile/macros/mbe/macro34.rs new file mode 100644 index 0000000..105d042 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro34.rs @@ -0,0 +1,3 @@ +macro_rules! allowed_after_expr_matcher { + (($t:expr) bok) => {{}}; // follow-set restrictions do not apply after a matcher, but they do apply inside the matcher +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro35.rs b/gcc/testsuite/rust/compile/macros/mbe/macro35.rs new file mode 100644 index 0000000..07b157b --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro35.rs @@ -0,0 +1,7 @@ +macro_rules! inside_matcher { + (($e:expr tok) tok) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" } + // { dg-error "failed to parse macro matcher" "" { target *-*-* } .-1 } + // { dg-error "failed to parse macro match" "" { target *-*-* } .-2 } + // { dg-error "required first macro rule" "" { target *-*-* } .-3 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-4 } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro36.rs b/gcc/testsuite/rust/compile/macros/mbe/macro36.rs new file mode 100644 index 0000000..e5d66b2 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro36.rs @@ -0,0 +1,3 @@ +macro_rules! ty_allowed { + ($t:ty $b:block) => {{}}; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro37.rs b/gcc/testsuite/rust/compile/macros/mbe/macro37.rs new file mode 100644 index 0000000..5713d90 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro37.rs @@ -0,0 +1,5 @@ +macro_rules! invalid_after_zeroable { + ($e:expr $(,)* forbidden) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" } + // { dg-error "required first macro rule" "" { target *-*-* } .-1 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro38.rs b/gcc/testsuite/rust/compile/macros/mbe/macro38.rs new file mode 100644 index 0000000..eb294ae --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro38.rs @@ -0,0 +1,5 @@ +macro_rules! invalid_after_zeroable_multi { + ($e:expr $(,)? $(;)* $(=>)? forbidden) => {{}}; // { dg-error "token .identifier. is not allowed after .expr. fragment" } + // { dg-error "required first macro rule" "" { target *-*-* } .-1 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro39.rs b/gcc/testsuite/rust/compile/macros/mbe/macro39.rs new file mode 100644 index 0000000..f5c498c --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro39.rs @@ -0,0 +1,5 @@ +macro_rules! m { + ($e:expr (, parenthesis_forbidden)) => {{}}; // { dg-error "token .\\(. at start of matcher is not allowed after .expr. fragment" } + // { dg-error "required first macro rule" "" { target *-*-* } .-1 } + // { dg-error "failed to parse item in crate" "" { target *-*-* } .-2 } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro4.rs b/gcc/testsuite/rust/compile/macros/mbe/macro4.rs new file mode 100644 index 0000000..47ff6c9 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro4.rs @@ -0,0 +1,3 @@ +macro_rules! one_keyword { + (kw) => {}; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro40.rs b/gcc/testsuite/rust/compile/macros/mbe/macro40.rs new file mode 100644 index 0000000..f9d048e --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro40.rs @@ -0,0 +1,51 @@ +// { dg-additional-options "-w" } + +#[lang = "sized"] +pub trait Sized {} + +macro_rules! t { + () => { + i32 + }; +} + +macro_rules! s { + () => { + *const i8 + }; +} + +extern "C" { + fn printf(s: s!(), ...); +} + +fn square(arg: t!()) -> t!() { + let input: t!() = arg; + + input * input +} + +trait Trait { + fn f() -> t!(); + fn g(arg: t!()); +} + +struct Wrapper { + inner: t!(), +} + +impl Trait for Wrapper { + fn f() -> t!() { + 1 + } + + fn g(arg: t!()) {} +} + +fn id(arg: T) -> T { + arg +} + +fn main() { + id::(15); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro41.rs b/gcc/testsuite/rust/compile/macros/mbe/macro41.rs new file mode 100644 index 0000000..3824422 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro41.rs @@ -0,0 +1,13 @@ +macro_rules! empty { + ($($t:tt)*) => {}; +} + +empty! {nothing} +empty! {struct OuterItem;} +empty! {} + +fn main() { + empty! {as statement}; + empty! {any child item}; + empty! {}; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro42.rs b/gcc/testsuite/rust/compile/macros/mbe/macro42.rs new file mode 100644 index 0000000..b3fbf6d --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro42.rs @@ -0,0 +1,34 @@ +// { dg-additional-options "-w -frust-cfg=A" } +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! cfg { + () => {{}}; +} + +fn main() -> i32 { + let mut res = 0; + if cfg!(A) { + res = 1; + } + + if cfg!(A) { + res = 2; + } else { + res = 3; + } + + if cfg!(A) { + res = 4; + } else if cfg!(A) { + res = 5; + } + + let res = if cfg!(A) { + 6 + } else { + 7 + }; + + return res; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro43.rs b/gcc/testsuite/rust/compile/macros/mbe/macro43.rs new file mode 100644 index 0000000..992bc77 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro43.rs @@ -0,0 +1,65 @@ +macro_rules! nonzero_integers { + ( $( $Ty: ident($Int: ty); )+ ) => { + $( + /// An integer that is known not to equal zero. + /// + /// This enables some memory layout optimization. + /// For example, `Option` is the same size as `u32`: + /// + /// ```rust + /// use std::mem::size_of; + /// assert_eq!(size_of::>(), size_of::()); + /// ``` + #[stable(feature = "nonzero", since = "1.28.0")] + // not all derive macros are implemented yet, and this test does not test these anyways + // #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] + #[repr(transparent)] + pub struct $Ty(NonZero<$Int>); + + impl $Ty { + /// Create a non-zero without checking the value. + /// + /// # Safety + /// + /// The value must not be zero. + #[stable(feature = "nonzero", since = "1.28.0")] + #[inline] + pub const unsafe fn new_unchecked(n: $Int) -> Self { + $Ty(NonZero(n)) + } + + /// Create a non-zero if the given value is not zero. + #[stable(feature = "nonzero", since = "1.28.0")] + #[inline] + pub fn new(n: $Int) -> Option { + if n != 0 { + Some($Ty(NonZero(n))) + } else { + None + } + } + + /// Returns the value as a primitive type. + #[stable(feature = "nonzero", since = "1.28.0")] + #[inline] + pub fn get(self) -> $Int { + self.0 .0 + } + + } + + impl_nonzero_fmt! { // { dg-error "unknown macro" } + (Debug, Display, Binary, Octal, LowerHex, UpperHex) for $Ty + } + )+ + } +} + +nonzero_integers! { + NonZeroU8(u8); + NonZeroU16(u16); + NonZeroU32(u32); + NonZeroU64(u64); + NonZeroU128(u128); + NonZeroUsize(usize); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro44.rs b/gcc/testsuite/rust/compile/macros/mbe/macro44.rs new file mode 100644 index 0000000..dabac6f --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro44.rs @@ -0,0 +1,34 @@ +mod foo { + mod bar { + mod baz { + macro_rules! baz { + () => {{}}; + } + } + } + + macro_rules! foo { + () => {{}}; + } + + fn foo_f() { + foo!(); + } + + fn bar_f() { + baz!(); // { dg-error "unknown macro" } + } +} + +mod foo2 { + #[macro_export] + macro_rules! bar1 { + () => {}; + } + + macro_rules! bar2 { + () => {}; + } +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro45.rs b/gcc/testsuite/rust/compile/macros/mbe/macro45.rs new file mode 100644 index 0000000..52dbcbb --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro45.rs @@ -0,0 +1,7 @@ +macro_rules! empty { + () => {}; // { dg-error "found unexpected token '\}' in null denotation" } +} + +fn main() { + let a = empty!(); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro46.rs b/gcc/testsuite/rust/compile/macros/mbe/macro46.rs new file mode 100644 index 0000000..3ef811a --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro46.rs @@ -0,0 +1,19 @@ +fn foo() {} + +fn main() { + macro_rules! a { + () => { + foo(); + }; + } + + { + macro_rules! a { + () => { + bar(); + }; + } + } + + a!(); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro47.rs b/gcc/testsuite/rust/compile/macros/mbe/macro47.rs new file mode 100644 index 0000000..36545af --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro47.rs @@ -0,0 +1,10 @@ +// Check the follow-set of :vis in macro rules. + +macro_rules! my_mac { + ($v:vis async) => { + $v struct Foo(i32); + }; + ($v:vis $i:ident) => { + $v struct $i(i32); + } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro48.rs b/gcc/testsuite/rust/compile/macros/mbe/macro48.rs new file mode 100644 index 0000000..6b3b369 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro48.rs @@ -0,0 +1,10 @@ +// Check that "priv" is not in the follow set of :vis. + +// { dg-error "token .priv. is not allowed after .vis. fragment" "#359" { target *-*-* } .+4 } +// { dg-error "required first macro rule in macro rules definition could not be parsed" "" { target *-*-* } .+3 } +// { dg-error "failed to parse item in crate" "" { target *-*-* } .+2 } +macro_rules! my_mac { + ($v:vis priv) => { + $v struct Foo(i32); + } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro49.rs b/gcc/testsuite/rust/compile/macros/mbe/macro49.rs new file mode 100644 index 0000000..0900f7c --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro49.rs @@ -0,0 +1,9 @@ +macro_rules! closure { + () => {{ + 14 + 15 + }}; +} + +fn main() { + let _ = || closure!(); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro5.rs b/gcc/testsuite/rust/compile/macros/mbe/macro5.rs new file mode 100644 index 0000000..a5d8095 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro5.rs @@ -0,0 +1,3 @@ +macro_rules! rust_keyword { + (fn) => {}; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro50.rs b/gcc/testsuite/rust/compile/macros/mbe/macro50.rs new file mode 100644 index 0000000..e85afa7 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro50.rs @@ -0,0 +1,10 @@ +macro_rules! foo { + () => { + u32 + }; +} + +fn main() { + let _a = 15i32; + let _b = _a as foo!(); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro51.rs b/gcc/testsuite/rust/compile/macros/mbe/macro51.rs new file mode 100644 index 0000000..6659486 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro51.rs @@ -0,0 +1,3 @@ +macro_rules! test { + ($_:ident) => {""} +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro52.rs b/gcc/testsuite/rust/compile/macros/mbe/macro52.rs new file mode 100644 index 0000000..31002eb --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro52.rs @@ -0,0 +1,11 @@ +macro_rules! multi { + ($( $a:ident )? $( + $b:ident )?) => { + { + $( let $a: u32 )?; + } + } +} + +pub fn foo() { + multi!(_a); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro53.rs b/gcc/testsuite/rust/compile/macros/mbe/macro53.rs new file mode 100644 index 0000000..efa2d4b --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro53.rs @@ -0,0 +1,10 @@ +macro_rules! numbers { + {} => { 1 2 } + // { dg-error "expecting .;. but .integer literal. found" "" { target *-*-* } .-1 } +} + +pub fn foo() { + numbers!(); +} + +fn main() -> i32 { 0 } diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro54.rs b/gcc/testsuite/rust/compile/macros/mbe/macro54.rs new file mode 100644 index 0000000..d3b3f80 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro54.rs @@ -0,0 +1,41 @@ +#[lang = "sized"] +pub trait Sized {} + +macro_rules! foo { + () => {"foo"}; + (number) => { 12 }; + (false) => { false }; +} + +pub const A: &'static str = foo!(); +pub static B: &'static str = foo!(); + +pub trait Number { + const VALUE: u32; +} + +impl Number for u32 { + const VALUE: u32 = foo!(number); +} + +impl u32 { + pub const TWELVE: u32 = foo!(number); +} + +pub enum E { + Variant = foo!(number), +} + +pub fn f(c: bool) -> &'static str { + match c { + false => foo!(), + true if foo!(false) => "abc", + _ => "xyz" + } +} + + +fn main() { + let _ = A; + let _ = u32::VALUE - u32::TWELVE; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro55.rs b/gcc/testsuite/rust/compile/macros/mbe/macro55.rs new file mode 100644 index 0000000..808718c --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro55.rs @@ -0,0 +1,10 @@ +macro_rules! id { + ($i:ident) => { $i } +} + +pub enum F { + Tuple(id!(u32)), + Struct { field: id!(u64) }, +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro56.rs b/gcc/testsuite/rust/compile/macros/mbe/macro56.rs new file mode 100644 index 0000000..bf42a64 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro56.rs @@ -0,0 +1,9 @@ +macro_rules! check { + (a, b, c ; x, y, z; e, r; a) => {} +} + +macro_rules! foo { + ($($($i:ident),*);*) => {check!($($($i),*);*);} +} + +foo!(a, b, c ; x, y, z; e, r; a); diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro57.rs b/gcc/testsuite/rust/compile/macros/mbe/macro57.rs new file mode 100644 index 0000000..0640d2f --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro57.rs @@ -0,0 +1,13 @@ +macro_rules! macro_rules { + () => {}; +} + +macro_rules! foo { + () => {}; +} + +foo!(); + +fn main() {} + +macro_rules!(); diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro6.rs b/gcc/testsuite/rust/compile/macros/mbe/macro6.rs new file mode 100644 index 0000000..9c54a67 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro6.rs @@ -0,0 +1,11 @@ +macro_rules! zero_or_one { + ($($a:literal)?) => { + f(); + } +} + +fn main() { + zero_or_one!(); + zero_or_one!(14); + zero_or_one!(125 12 "gcc"); // { dg-error "Failed to match any rule within macro" } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro7.rs b/gcc/testsuite/rust/compile/macros/mbe/macro7.rs new file mode 100644 index 0000000..563acdd --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro7.rs @@ -0,0 +1,13 @@ +fn f() {} + +macro_rules! one_or_more { + ($($a:literal)+) => { + f(); + }; +} + +fn main() { + one_or_more!(1 1 1 1 1 1 1 1 1 1 1 "rust" 'c'); + one_or_more!(1); + one_or_more!(); // { dg-error "Failed to match any rule within macro" } +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro8.rs b/gcc/testsuite/rust/compile/macros/mbe/macro8.rs new file mode 100644 index 0000000..d3e8af9 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro8.rs @@ -0,0 +1,12 @@ +fn f() {} + +macro_rules! expr { + ($($a:expr)?) => { + f(); + }; +} + +fn main() { + expr!(); + expr!(14); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro9.rs b/gcc/testsuite/rust/compile/macros/mbe/macro9.rs new file mode 100644 index 0000000..9a59089 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro9.rs @@ -0,0 +1,17 @@ +macro_rules! add { + ($e:expr, $($es:expr),*) => { + $e + add!($($es),*) + }; + ($e:expr) => { + $e + }; +} + +fn main() -> i32 { + let a = add!(15 2 9); // { dg-error "Failed to match any rule within macro" } + let b = add!(15); + let b = add!(15 14); // { dg-error "Failed to match any rule within macro" } + let b = add!(15, 14,); // { dg-error "Failed to match any rule within macro" } + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro_call_statement.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_call_statement.rs new file mode 100644 index 0000000..3d18cc9 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_call_statement.rs @@ -0,0 +1,11 @@ +fn f() {} + +macro_rules! panic { + () => ( + crate::f() + ); +} + +fn main() { + panic!(); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro_export_1.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_export_1.rs new file mode 100644 index 0000000..f87df08 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_export_1.rs @@ -0,0 +1,2 @@ +#[macro_use] +mod foo {} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro_return.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_return.rs new file mode 100644 index 0000000..8b06f87 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_return.rs @@ -0,0 +1,10 @@ +// { dg-additional-options "-w" } + +macro_rules! add { + ($a:expr) => { $a }; + ($a:expr, $($b:expr),+) => { $a + add!($($b),*) } +} + +fn main() -> i32 { + add!(add!(1, 2)) +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro_rules_macro_rules.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_rules_macro_rules.rs new file mode 100644 index 0000000..ecd1712 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_rules_macro_rules.rs @@ -0,0 +1,10 @@ +macro_rules! macro_rules { + () => { + struct S; + }; +} +macro_rules! {} // calls the macro defined above + +fn main() { + let _s = S; +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro_use1.rs b/gcc/testsuite/rust/compile/macros/mbe/macro_use1.rs new file mode 100644 index 0000000..e98eadf --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/macro_use1.rs @@ -0,0 +1,15 @@ +#[macro_use] +mod foo { + macro_rules! a { + () => {}; + } + + macro_rules! b { + () => {}; + } +} + +fn main() { + a!(); + b!(); +} diff --git a/gcc/testsuite/rust/compile/macros/mbe/mbe_macro.exp b/gcc/testsuite/rust/compile/macros/mbe/mbe_macro.exp new file mode 100644 index 0000000..ac891db --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/mbe/mbe_macro.exp @@ -0,0 +1,35 @@ +# Copyright (C) 2021-2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# Compile tests, no torture testing. +# +# These tests raise errors in the front end; torture testing doesn't apply. + +# Load support procs. +load_lib rust-dg.exp + +# Initialize `dg'. +dg-init + +# Main loop. +set saved-dg-do-what-default ${dg-do-what-default} + +set dg-do-what-default "compile" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.rs]] "" "" +set dg-do-what-default ${saved-dg-do-what-default} + +# All done. +dg-finish -- cgit v1.1