From ad3fc42abd84b7fc40e78c3a83b883c9b83af22d Mon Sep 17 00:00:00 2001 From: Liam Naddell Date: Sat, 27 Jul 2024 00:28:13 -0400 Subject: gccrs: Eager expansion for include* gccrs#1805 gccrs#1865 gcc/rust/ChangeLog: * expand/rust-expand-visitor.h: remove auto keyword * expand/rust-macro-builtins-helpers.cc: allow for changing macro invoc types on eager expansions to semicoloned macros * expand/rust-macro-builtins-helpers.h: add default semicoloned argument * expand/rust-macro-builtins-include.cc: allow for eager expansion for include and include_bytes allow for parsing include invocations as items instead of expressions, which allows invocations at global scope * expand/rust-macro-expand.cc: push Expr type for eager invocations gcc/testsuite/ChangeLog: * rust/compile/macros/builtin/include1.rs: add basic include test at global scope * rust/compile/macros/builtin/include2.rs: add basic include test at local scope with expression * rust/compile/macros/builtin/include3.rs: add eager expansion test at global scope * rust/compile/macros/builtin/include4.rs: add eager expansion test at local scope with expression * rust/compile/macros/builtin/include_bytes.rs: add eager expansion test at global scope * rust/compile/macros/builtin/include_rs: supporting test file with dummy function * rust/compile/macros/builtin/include_rs2: supporting test file with dummy string * rust/compile/macros/builtin/include_str.rs: add eager expansion test at global scope * rust/execute/torture/builtin_macro_include_bytes.rs: clean up old test logic, add permutations for eager expansion * rust/execute/torture/builtin_macro_include_str.rs: add eager expansion permutations --- gcc/testsuite/rust/compile/macros/builtin/include1.rs | 14 ++++++++++++++ gcc/testsuite/rust/compile/macros/builtin/include2.rs | 11 +++++++++++ gcc/testsuite/rust/compile/macros/builtin/include3.rs | 19 +++++++++++++++++++ gcc/testsuite/rust/compile/macros/builtin/include4.rs | 15 +++++++++++++++ .../rust/compile/macros/builtin/include_bytes.rs | 8 ++++++++ gcc/testsuite/rust/compile/macros/builtin/include_rs | 1 + gcc/testsuite/rust/compile/macros/builtin/include_rs2 | 1 + .../rust/compile/macros/builtin/include_str.rs | 8 ++++++++ 8 files changed, 77 insertions(+) create mode 100644 gcc/testsuite/rust/compile/macros/builtin/include1.rs create mode 100644 gcc/testsuite/rust/compile/macros/builtin/include2.rs create mode 100644 gcc/testsuite/rust/compile/macros/builtin/include3.rs create mode 100644 gcc/testsuite/rust/compile/macros/builtin/include4.rs create mode 100644 gcc/testsuite/rust/compile/macros/builtin/include_rs create mode 100644 gcc/testsuite/rust/compile/macros/builtin/include_rs2 (limited to 'gcc/testsuite/rust/compile') diff --git a/gcc/testsuite/rust/compile/macros/builtin/include1.rs b/gcc/testsuite/rust/compile/macros/builtin/include1.rs new file mode 100644 index 0000000..3ad64b7 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include1.rs @@ -0,0 +1,14 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include { + () => {}; +} + +include!("include_rs"); + +fn main() -> i32 { + b(); + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include2.rs b/gcc/testsuite/rust/compile/macros/builtin/include2.rs new file mode 100644 index 0000000..d2344ac --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include2.rs @@ -0,0 +1,11 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include { + () => {}; +} + +fn main() -> i32 { + let _ = include!("include_rs2"); + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include3.rs b/gcc/testsuite/rust/compile/macros/builtin/include3.rs new file mode 100644 index 0000000..62c0e52 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include3.rs @@ -0,0 +1,19 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include { + () => {}; +} + +macro_rules! my_file { + () => {"include_rs"}; +} + + +include!(my_file!()); + +fn main() -> i32 { + b(); + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include4.rs b/gcc/testsuite/rust/compile/macros/builtin/include4.rs new file mode 100644 index 0000000..c2450fc --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include4.rs @@ -0,0 +1,15 @@ +#![feature(rustc_attrs)] + +#[rustc_builtin_macro] +macro_rules! include { + () => {}; +} + +macro_rules! my_file { + () => {"include_rs2"}; +} +fn main() -> i32 { + let _ = include!(my_file!()); + + 0 +} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include_bytes.rs b/gcc/testsuite/rust/compile/macros/builtin/include_bytes.rs index 88ceaf1..3ea2813 100644 --- a/gcc/testsuite/rust/compile/macros/builtin/include_bytes.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/include_bytes.rs @@ -5,6 +5,12 @@ macro_rules! include_bytes { () => {{}}; } +macro_rules! file1 { + () => {"file"}; +} + +static MY_FILE: &[u32;16] = include_bytes!(file!()); + fn main() { let file = "include.txt"; include_bytes!(file); // { dg-error "argument must be a string literal" "" } @@ -12,4 +18,6 @@ fn main() { include_bytes!("foo.txt", "bar.txt"); // { dg-error "macro takes 1 argument" "" } include_bytes!("include_bytes.rs"); // ok include_bytes!("include_bytes.rs",); // trailing comma ok + include_bytes! (file1!()); + include_bytes! (file1!(),); // trailing comma ok } diff --git a/gcc/testsuite/rust/compile/macros/builtin/include_rs b/gcc/testsuite/rust/compile/macros/builtin/include_rs new file mode 100644 index 0000000..77c3e26 --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include_rs @@ -0,0 +1 @@ +fn b() {} diff --git a/gcc/testsuite/rust/compile/macros/builtin/include_rs2 b/gcc/testsuite/rust/compile/macros/builtin/include_rs2 new file mode 100644 index 0000000..31b272a --- /dev/null +++ b/gcc/testsuite/rust/compile/macros/builtin/include_rs2 @@ -0,0 +1 @@ +"Gccrs is GREAT!" diff --git a/gcc/testsuite/rust/compile/macros/builtin/include_str.rs b/gcc/testsuite/rust/compile/macros/builtin/include_str.rs index 37a7218..eda04ac 100644 --- a/gcc/testsuite/rust/compile/macros/builtin/include_str.rs +++ b/gcc/testsuite/rust/compile/macros/builtin/include_str.rs @@ -5,6 +5,12 @@ macro_rules! include_str { () => {{}}; } +macro_rules! my_file { + () => {"include.txt"} +} + +static G_STR:[u8;16] = include_str!(my_file!()); + fn main() { let file = "include.txt"; include_str!(file); // { dg-error "argument must be a string literal" "" } @@ -13,4 +19,6 @@ fn main() { include_str!("include_str.rs"); // ok include_str!("include_str.rs",); // trailing comma ok include_str!("invalid_utf8"); // { dg-error "invalid_utf8 was not a valid utf-8 file" "" } + include_str!(my_file!()); + include_str!(my_file!(),); } -- cgit v1.1