diff options
Diffstat (limited to 'gcc')
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" } */ +} |