diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2020-07-10 23:26:22 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-10 23:26:22 -0700 |
| commit | ec1e7e9dbc83e57da7809cfc32c01e881b42555b (patch) | |
| tree | da8a4d60b718bf7f476ce2cfb875bc7dbaaee4e5 /src/test/ui/parser | |
| parent | daecab3a784f28082df90cebb204998051f3557d (diff) | |
| parent | 52bdaaa0edb2824af1610b67664f06580335fd78 (diff) | |
| download | rust-ec1e7e9dbc83e57da7809cfc32c01e881b42555b.tar.gz rust-ec1e7e9dbc83e57da7809cfc32c01e881b42555b.zip | |
Rollup merge of #71322 - petrochenkov:tuple00, r=nikomatsakis
Accept tuple.0.0 as tuple indexing (take 2) If we expect something identifier-like when parsing a field name after `.`, but encounter a float token, we break that float token into parts, similarly to how we break `&&` into `&` `&`, or `<<` into `<` `<`, etc. An alternative to https://github.com/rust-lang/rust/pull/70420.
Diffstat (limited to 'src/test/ui/parser')
| -rw-r--r-- | src/test/ui/parser/float-field-interpolated.rs | 17 | ||||
| -rw-r--r-- | src/test/ui/parser/float-field-interpolated.stderr | 46 | ||||
| -rw-r--r-- | src/test/ui/parser/float-field.rs | 62 | ||||
| -rw-r--r-- | src/test/ui/parser/float-field.stderr | 349 |
4 files changed, 474 insertions, 0 deletions
diff --git a/src/test/ui/parser/float-field-interpolated.rs b/src/test/ui/parser/float-field-interpolated.rs new file mode 100644 index 00000000000..a3053203536 --- /dev/null +++ b/src/test/ui/parser/float-field-interpolated.rs @@ -0,0 +1,17 @@ +struct S(u8, (u8, u8)); + +macro_rules! generate_field_accesses { + ($a:tt, $b:literal, $c:expr) => { + let s = S(0, (0, 0)); + + s.$a; // OK + { s.$b; } //~ ERROR unexpected token: `1.1` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1` + { s.$c; } //~ ERROR unexpected token: `1.1` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1` + }; +} + +fn main() { + generate_field_accesses!(1.1, 1.1, 1.1); +} diff --git a/src/test/ui/parser/float-field-interpolated.stderr b/src/test/ui/parser/float-field-interpolated.stderr new file mode 100644 index 00000000000..fb974f085cb --- /dev/null +++ b/src/test/ui/parser/float-field-interpolated.stderr @@ -0,0 +1,46 @@ +error: unexpected token: `1.1` + --> $DIR/float-field-interpolated.rs:8:13 + | +LL | { s.$b; } + | ^^ +... +LL | generate_field_accesses!(1.1, 1.1, 1.1); + | ---------------------------------------- in this macro invocation + | + = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1` + --> $DIR/float-field-interpolated.rs:8:13 + | +LL | { s.$b; } + | ^^ expected one of `.`, `;`, `?`, `}`, or an operator +... +LL | generate_field_accesses!(1.1, 1.1, 1.1); + | ---------------------------------------- in this macro invocation + | + = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) + +error: unexpected token: `1.1` + --> $DIR/float-field-interpolated.rs:10:13 + | +LL | { s.$c; } + | ^^ +... +LL | generate_field_accesses!(1.1, 1.1, 1.1); + | ---------------------------------------- in this macro invocation + | + = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1` + --> $DIR/float-field-interpolated.rs:10:13 + | +LL | { s.$c; } + | ^^ expected one of `.`, `;`, `?`, `}`, or an operator +... +LL | generate_field_accesses!(1.1, 1.1, 1.1); + | ---------------------------------------- in this macro invocation + | + = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) + +error: aborting due to 4 previous errors + diff --git a/src/test/ui/parser/float-field.rs b/src/test/ui/parser/float-field.rs new file mode 100644 index 00000000000..eaa7465dc4d --- /dev/null +++ b/src/test/ui/parser/float-field.rs @@ -0,0 +1,62 @@ +struct S(u8, (u8, u8)); + +fn main() { + let s = S(0, (0, 0)); + + s.1e1; //~ ERROR no field `1e1` on type `S` + s.1.; //~ ERROR unexpected token: `;` + s.1.1; + s.1.1e1; //~ ERROR no field `1e1` on type `(u8, u8)` + { s.1e+; } //~ ERROR unexpected token: `1e+` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1e+` + //~| ERROR expected at least one digit in exponent + { s.1e-; } //~ ERROR unexpected token: `1e-` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1e-` + //~| ERROR expected at least one digit in exponent + { s.1e+1; } //~ ERROR unexpected token: `1e+1` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1e+1` + { s.1e-1; } //~ ERROR unexpected token: `1e-1` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1e-1` + { s.1.1e+1; } //~ ERROR unexpected token: `1.1e+1` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1e+1` + { s.1.1e-1; } //~ ERROR unexpected token: `1.1e-1` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1e-1` + s.0x1e1; //~ ERROR no field `0x1e1` on type `S` + s.0x1.; //~ ERROR no field `0x1` on type `S` + //~| ERROR hexadecimal float literal is not supported + //~| ERROR unexpected token: `;` + s.0x1.1; //~ ERROR no field `0x1` on type `S` + //~| ERROR hexadecimal float literal is not supported + s.0x1.1e1; //~ ERROR no field `0x1` on type `S` + //~| ERROR hexadecimal float literal is not supported + { s.0x1e+; } //~ ERROR expected expression, found `;` + { s.0x1e-; } //~ ERROR expected expression, found `;` + s.0x1e+1; //~ ERROR no field `0x1e` on type `S` + s.0x1e-1; //~ ERROR no field `0x1e` on type `S` + { s.0x1.1e+1; } //~ ERROR unexpected token: `0x1.1e+1` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `0x1.1e+1` + //~| ERROR hexadecimal float literal is not supported + { s.0x1.1e-1; } //~ ERROR unexpected token: `0x1.1e-1` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `0x1.1e-1` + //~| ERROR hexadecimal float literal is not supported + s.1e1f32; //~ ERROR no field `1e1` on type `S` + //~| ERROR suffixes on a tuple index are invalid + s.1.f32; //~ ERROR no field `f32` on type `(u8, u8)` + s.1.1f32; //~ ERROR suffixes on a tuple index are invalid + s.1.1e1f32; //~ ERROR no field `1e1` on type `(u8, u8)` + //~| ERROR suffixes on a tuple index are invalid + { s.1e+f32; } //~ ERROR unexpected token: `1e+f32` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1e+f32` + //~| ERROR expected at least one digit in exponent + { s.1e-f32; } //~ ERROR unexpected token: `1e-f32` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1e-f32` + //~| ERROR expected at least one digit in exponent + { s.1e+1f32; } //~ ERROR unexpected token: `1e+1f32` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1e+1f32` + { s.1e-1f32; } //~ ERROR unexpected token: `1e-1f32` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1e-1f32` + { s.1.1e+1f32; } //~ ERROR unexpected token: `1.1e+1f32` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1e+1f32` + { s.1.1e-1f32; } //~ ERROR unexpected token: `1.1e-1f32` + //~| ERROR expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1e-1f32` +} diff --git a/src/test/ui/parser/float-field.stderr b/src/test/ui/parser/float-field.stderr new file mode 100644 index 00000000000..62202b99964 --- /dev/null +++ b/src/test/ui/parser/float-field.stderr @@ -0,0 +1,349 @@ +error: expected at least one digit in exponent + --> $DIR/float-field.rs:10:9 + | +LL | { s.1e+; } + | ^^^ + +error: expected at least one digit in exponent + --> $DIR/float-field.rs:13:9 + | +LL | { s.1e-; } + | ^^^ + +error: hexadecimal float literal is not supported + --> $DIR/float-field.rs:25:7 + | +LL | s.0x1.; + | ^^^^ + +error: hexadecimal float literal is not supported + --> $DIR/float-field.rs:28:7 + | +LL | s.0x1.1; + | ^^^^^ + +error: hexadecimal float literal is not supported + --> $DIR/float-field.rs:30:7 + | +LL | s.0x1.1e1; + | ^^^^^^^ + +error: hexadecimal float literal is not supported + --> $DIR/float-field.rs:36:9 + | +LL | { s.0x1.1e+1; } + | ^^^^^^^^ + +error: hexadecimal float literal is not supported + --> $DIR/float-field.rs:39:9 + | +LL | { s.0x1.1e-1; } + | ^^^^^^^^ + +error: expected at least one digit in exponent + --> $DIR/float-field.rs:48:9 + | +LL | { s.1e+f32; } + | ^^^^^^ + +error: expected at least one digit in exponent + --> $DIR/float-field.rs:51:9 + | +LL | { s.1e-f32; } + | ^^^^^^ + +error: unexpected token: `;` + --> $DIR/float-field.rs:7:9 + | +LL | s.1.; + | ^ + +error: unexpected token: `1e+` + --> $DIR/float-field.rs:10:9 + | +LL | { s.1e+; } + | ^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1e+` + --> $DIR/float-field.rs:10:9 + | +LL | { s.1e+; } + | ^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1e-` + --> $DIR/float-field.rs:13:9 + | +LL | { s.1e-; } + | ^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1e-` + --> $DIR/float-field.rs:13:9 + | +LL | { s.1e-; } + | ^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1e+1` + --> $DIR/float-field.rs:16:9 + | +LL | { s.1e+1; } + | ^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1e+1` + --> $DIR/float-field.rs:16:9 + | +LL | { s.1e+1; } + | ^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1e-1` + --> $DIR/float-field.rs:18:9 + | +LL | { s.1e-1; } + | ^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1e-1` + --> $DIR/float-field.rs:18:9 + | +LL | { s.1e-1; } + | ^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1.1e+1` + --> $DIR/float-field.rs:20:9 + | +LL | { s.1.1e+1; } + | ^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1e+1` + --> $DIR/float-field.rs:20:9 + | +LL | { s.1.1e+1; } + | ^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1.1e-1` + --> $DIR/float-field.rs:22:9 + | +LL | { s.1.1e-1; } + | ^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1e-1` + --> $DIR/float-field.rs:22:9 + | +LL | { s.1.1e-1; } + | ^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `;` + --> $DIR/float-field.rs:25:11 + | +LL | s.0x1.; + | ^ + +error: expected expression, found `;` + --> $DIR/float-field.rs:32:14 + | +LL | { s.0x1e+; } + | ^ expected expression + +error: expected expression, found `;` + --> $DIR/float-field.rs:33:14 + | +LL | { s.0x1e-; } + | ^ expected expression + +error: unexpected token: `0x1.1e+1` + --> $DIR/float-field.rs:36:9 + | +LL | { s.0x1.1e+1; } + | ^^^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `0x1.1e+1` + --> $DIR/float-field.rs:36:9 + | +LL | { s.0x1.1e+1; } + | ^^^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `0x1.1e-1` + --> $DIR/float-field.rs:39:9 + | +LL | { s.0x1.1e-1; } + | ^^^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `0x1.1e-1` + --> $DIR/float-field.rs:39:9 + | +LL | { s.0x1.1e-1; } + | ^^^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: suffixes on a tuple index are invalid + --> $DIR/float-field.rs:42:7 + | +LL | s.1e1f32; + | ^^^^^^ invalid suffix `f32` + +error: suffixes on a tuple index are invalid + --> $DIR/float-field.rs:45:7 + | +LL | s.1.1f32; + | ^^^^^^ invalid suffix `f32` + +error: suffixes on a tuple index are invalid + --> $DIR/float-field.rs:46:7 + | +LL | s.1.1e1f32; + | ^^^^^^^^ invalid suffix `f32` + +error: unexpected token: `1e+f32` + --> $DIR/float-field.rs:48:9 + | +LL | { s.1e+f32; } + | ^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1e+f32` + --> $DIR/float-field.rs:48:9 + | +LL | { s.1e+f32; } + | ^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1e-f32` + --> $DIR/float-field.rs:51:9 + | +LL | { s.1e-f32; } + | ^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1e-f32` + --> $DIR/float-field.rs:51:9 + | +LL | { s.1e-f32; } + | ^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1e+1f32` + --> $DIR/float-field.rs:54:9 + | +LL | { s.1e+1f32; } + | ^^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1e+1f32` + --> $DIR/float-field.rs:54:9 + | +LL | { s.1e+1f32; } + | ^^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1e-1f32` + --> $DIR/float-field.rs:56:9 + | +LL | { s.1e-1f32; } + | ^^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1e-1f32` + --> $DIR/float-field.rs:56:9 + | +LL | { s.1e-1f32; } + | ^^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1.1e+1f32` + --> $DIR/float-field.rs:58:9 + | +LL | { s.1.1e+1f32; } + | ^^^^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1e+1f32` + --> $DIR/float-field.rs:58:9 + | +LL | { s.1.1e+1f32; } + | ^^^^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error: unexpected token: `1.1e-1f32` + --> $DIR/float-field.rs:60:9 + | +LL | { s.1.1e-1f32; } + | ^^^^^^^^^ + +error: expected one of `.`, `;`, `?`, `}`, or an operator, found `1.1e-1f32` + --> $DIR/float-field.rs:60:9 + | +LL | { s.1.1e-1f32; } + | ^^^^^^^^^ expected one of `.`, `;`, `?`, `}`, or an operator + +error[E0609]: no field `1e1` on type `S` + --> $DIR/float-field.rs:6:7 + | +LL | s.1e1; + | ^^^ unknown field + | + = note: available fields are: `0`, `1` + +error[E0609]: no field `1e1` on type `(u8, u8)` + --> $DIR/float-field.rs:9:7 + | +LL | s.1.1e1; + | ^^^^^ + +error[E0609]: no field `0x1e1` on type `S` + --> $DIR/float-field.rs:24:7 + | +LL | s.0x1e1; + | ^^^^^ unknown field + | + = note: available fields are: `0`, `1` + +error[E0609]: no field `0x1` on type `S` + --> $DIR/float-field.rs:25:7 + | +LL | s.0x1.; + | ^^^^ unknown field + | + = note: available fields are: `0`, `1` + +error[E0609]: no field `0x1` on type `S` + --> $DIR/float-field.rs:28:7 + | +LL | s.0x1.1; + | ^^^^^ unknown field + | + = note: available fields are: `0`, `1` + +error[E0609]: no field `0x1` on type `S` + --> $DIR/float-field.rs:30:7 + | +LL | s.0x1.1e1; + | ^^^^^^^ unknown field + | + = note: available fields are: `0`, `1` + +error[E0609]: no field `0x1e` on type `S` + --> $DIR/float-field.rs:34:7 + | +LL | s.0x1e+1; + | ^^^^ unknown field + | + = note: available fields are: `0`, `1` + +error[E0609]: no field `0x1e` on type `S` + --> $DIR/float-field.rs:35:7 + | +LL | s.0x1e-1; + | ^^^^ unknown field + | + = note: available fields are: `0`, `1` + +error[E0609]: no field `1e1` on type `S` + --> $DIR/float-field.rs:42:7 + | +LL | s.1e1f32; + | ^^^^^^ unknown field + | + = note: available fields are: `0`, `1` + +error[E0609]: no field `f32` on type `(u8, u8)` + --> $DIR/float-field.rs:44:9 + | +LL | s.1.f32; + | ^^^ + +error[E0609]: no field `1e1` on type `(u8, u8)` + --> $DIR/float-field.rs:46:7 + | +LL | s.1.1e1f32; + | ^^^^^^^^ + +error: aborting due to 55 previous errors + +For more information about this error, try `rustc --explain E0609`. |
