From: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

Add a test for the feature gate, as well as some test to ensure the raw
keyword stays weak. Also add some tests to check whether the raw_ref_op
syntax is parsed correctly.

gcc/testsuite/ChangeLog:

        * rust/compile/not_raw_ref_op.rs: New test.
        * rust/compile/raw_ref_op.rs: New test.
        * rust/compile/raw_ref_op_feature_gate.rs: New test.
        * rust/compile/raw_ref_op_invalid.rs: New test.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
---
 gcc/testsuite/rust/compile/not_raw_ref_op.rs         |  9 +++++++++
 gcc/testsuite/rust/compile/raw_ref_op.rs             | 11 +++++++++++
 .../rust/compile/raw_ref_op_feature_gate.rs          |  8 ++++++++
 gcc/testsuite/rust/compile/raw_ref_op_invalid.rs     | 12 ++++++++++++
 4 files changed, 40 insertions(+)
 create mode 100644 gcc/testsuite/rust/compile/not_raw_ref_op.rs
 create mode 100644 gcc/testsuite/rust/compile/raw_ref_op.rs
 create mode 100644 gcc/testsuite/rust/compile/raw_ref_op_feature_gate.rs
 create mode 100644 gcc/testsuite/rust/compile/raw_ref_op_invalid.rs

diff --git a/gcc/testsuite/rust/compile/not_raw_ref_op.rs 
b/gcc/testsuite/rust/compile/not_raw_ref_op.rs
new file mode 100644
index 00000000000..f55f1846fab
--- /dev/null
+++ b/gcc/testsuite/rust/compile/not_raw_ref_op.rs
@@ -0,0 +1,9 @@
+// { dg-options "-frust-compile-until=lowering" }
+pub struct Toto {
+    u: usize,
+}
+
+pub fn test(raw: Toto) {
+    // Not raw ref op syntax, raw keyword is weak.
+    let _c = &raw;
+}
diff --git a/gcc/testsuite/rust/compile/raw_ref_op.rs 
b/gcc/testsuite/rust/compile/raw_ref_op.rs
new file mode 100644
index 00000000000..a97e58c62b0
--- /dev/null
+++ b/gcc/testsuite/rust/compile/raw_ref_op.rs
@@ -0,0 +1,11 @@
+// { dg-options "-fsyntax-only" }
+#![feature(raw_ref_op)]
+
+pub struct Toto {
+    u: usize,
+}
+
+pub fn test(mut toto: Toto) {
+    let _a = &raw mut toto.u;
+    let _b = &raw const toto.u;
+}
diff --git a/gcc/testsuite/rust/compile/raw_ref_op_feature_gate.rs 
b/gcc/testsuite/rust/compile/raw_ref_op_feature_gate.rs
new file mode 100644
index 00000000000..256202b2da6
--- /dev/null
+++ b/gcc/testsuite/rust/compile/raw_ref_op_feature_gate.rs
@@ -0,0 +1,8 @@
+// { dg-options "-frust-compile-until=lowering" }
+pub struct Toto {
+    u: usize,
+}
+
+pub fn test(mut toto: Toto) {
+    let _a = &raw mut toto.u; //{ dg-error "raw address of syntax is 
experimental." "" { target *-*-* }  }
+}
diff --git a/gcc/testsuite/rust/compile/raw_ref_op_invalid.rs 
b/gcc/testsuite/rust/compile/raw_ref_op_invalid.rs
new file mode 100644
index 00000000000..90e169f30f6
--- /dev/null
+++ b/gcc/testsuite/rust/compile/raw_ref_op_invalid.rs
@@ -0,0 +1,12 @@
+// { dg-options "-fsyntax-only" }
+#![feature(raw_ref_op)]
+
+pub struct Toto {
+    u: usize,
+}
+
+pub fn test(mut toto: Toto) {
+    let _c = &raw toto.u; //{ dg-error "expecting .;. but .identifier. found" 
"" { target *-*-* }  }
+    //{ dg-excess-errors "Additional errors for parent items" { target *-*-* } 
}
+
+}
-- 
2.45.2

Reply via email to