about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume.gomez@huawei.com>2022-09-13 15:30:16 +0200
committerRémy Rakic <remy.rakic+github@gmail.com>2022-10-20 22:44:10 +0000
commit7f0224e8688126a536ba94c2bb8a17df565da2da (patch)
treeac43a0f6ad1b01bf42142d3ee8593f6dc79d1966
parentae5108a1ed6a302ce08e39020b29933ac1520655 (diff)
downloadrust-7f0224e8688126a536ba94c2bb8a17df565da2da.tar.gz
rust-7f0224e8688126a536ba94c2bb8a17df565da2da.zip
Add ui test to ensure attributes generated from macros are kept as expected
-rw-r--r--src/test/ui/attr-from-macro.rs20
-rw-r--r--src/test/ui/auxiliary/attr-from-macro.rs15
2 files changed, 35 insertions, 0 deletions
diff --git a/src/test/ui/attr-from-macro.rs b/src/test/ui/attr-from-macro.rs
new file mode 100644
index 00000000000..bb3a5c94d41
--- /dev/null
+++ b/src/test/ui/attr-from-macro.rs
@@ -0,0 +1,20 @@
+// aux-build:attr-from-macro.rs
+// run-pass
+
+extern crate attr_from_macro;
+
+attr_from_macro::creator! {
+    struct Foo;
+    enum Bar;
+    enum FooBar;
+}
+
+fn main() {
+    // Checking the `repr(u32)` on the enum.
+    assert_eq!(4, std::mem::size_of::<Bar>());
+    // Checking the `repr(u16)` on the enum.
+    assert_eq!(2, std::mem::size_of::<FooBar>());
+
+    // Checking the Debug impl on the types.
+    eprintln!("{:?} {:?} {:?}", Foo, Bar::A, FooBar::A);
+}
diff --git a/src/test/ui/auxiliary/attr-from-macro.rs b/src/test/ui/auxiliary/attr-from-macro.rs
new file mode 100644
index 00000000000..9b388675c80
--- /dev/null
+++ b/src/test/ui/auxiliary/attr-from-macro.rs
@@ -0,0 +1,15 @@
+#[macro_export]
+macro_rules! creator {
+    (struct $name1:ident; enum $name2:ident; enum $name3:ident;) => {
+        #[derive(Debug)]
+        pub struct $name1;
+
+        #[derive(Debug)]
+        #[repr(u32)]
+        pub enum $name2 { A }
+
+        #[derive(Debug)]
+        #[repr(u16)]
+        pub enum $name3 { A }
+    }
+}