aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/lex/rust-lex.cc7
-rw-r--r--gcc/testsuite/rust.test/compile/raw_identifiers.rs3
-rw-r--r--gcc/testsuite/rust.test/compile/raw_identifiers_keywords.rs3
-rw-r--r--gcc/testsuite/rust.test/xfail_compile/raw_identifiers_bad_keywords.rs3
-rw-r--r--gcc/testsuite/rust.test/xfail_compile/raw_identifiers_underscore.rs3
5 files changed, 16 insertions, 3 deletions
diff --git a/gcc/rust/lex/rust-lex.cc b/gcc/rust/lex/rust-lex.cc
index f95a47d..16fb1ad 100644
--- a/gcc/rust/lex/rust-lex.cc
+++ b/gcc/rust/lex/rust-lex.cc
@@ -743,6 +743,9 @@ Lexer::build_token ()
TokenPtr raw_ident_ptr = parse_raw_identifier (loc);
if (raw_ident_ptr != nullptr)
return raw_ident_ptr;
+ else
+ continue; /* input got parsed, it just wasn't valid. An error
+ was produced. */
}
else
{
@@ -1523,11 +1526,9 @@ Lexer::parse_raw_identifier (Location loc)
current_column += 2;
- str += current_char;
-
bool first_is_underscore = current_char == '_';
- int length = 1;
+ int length = 0;
current_char = peek_input ();
// loop through entire name
while (ISALPHA (current_char) || ISDIGIT (current_char)
diff --git a/gcc/testsuite/rust.test/compile/raw_identifiers.rs b/gcc/testsuite/rust.test/compile/raw_identifiers.rs
new file mode 100644
index 0000000..8746f33
--- /dev/null
+++ b/gcc/testsuite/rust.test/compile/raw_identifiers.rs
@@ -0,0 +1,3 @@
+pub fn square(num: i32) -> i32 { /* { dg-warning "used" } */
+ r#num * num
+} \ No newline at end of file
diff --git a/gcc/testsuite/rust.test/compile/raw_identifiers_keywords.rs b/gcc/testsuite/rust.test/compile/raw_identifiers_keywords.rs
new file mode 100644
index 0000000..c9aa3cf
--- /dev/null
+++ b/gcc/testsuite/rust.test/compile/raw_identifiers_keywords.rs
@@ -0,0 +1,3 @@
+pub fn plus(r#break: i32, r#unsafe: i32) -> i32 { /* { dg-warning "used" } */
+ r#break + r#unsafe
+} \ No newline at end of file
diff --git a/gcc/testsuite/rust.test/xfail_compile/raw_identifiers_bad_keywords.rs b/gcc/testsuite/rust.test/xfail_compile/raw_identifiers_bad_keywords.rs
new file mode 100644
index 0000000..854d7e6
--- /dev/null
+++ b/gcc/testsuite/rust.test/xfail_compile/raw_identifiers_bad_keywords.rs
@@ -0,0 +1,3 @@
+pub fn plus(n: i32, m: i32) -> i32 {
+ r#crate /* { dg-error "forbidden raw identifier" } */
+}
diff --git a/gcc/testsuite/rust.test/xfail_compile/raw_identifiers_underscore.rs b/gcc/testsuite/rust.test/xfail_compile/raw_identifiers_underscore.rs
new file mode 100644
index 0000000..86e9013
--- /dev/null
+++ b/gcc/testsuite/rust.test/xfail_compile/raw_identifiers_underscore.rs
@@ -0,0 +1,3 @@
+pub fn s(num: i32) -> i32 {
+ r#_ * num /* { dg-error "not a valid raw identifier" } */
+}