Fix bug in shebang handling
Shebang handling was too agressive in stripping out the first line in cases where it is actually _not_ a shebang, but instead, valid rust (#70528). This is a second attempt at resolving this issue (the first attempt was flawed, for, among other reasons, causing an ICE in certain cases (#71372, #71471).
The behavior is now codified by a number of UI tests, but simply:
For the first line to be a shebang, the following must all be true:
1. The line must start with `#!`
2. The line must contain a non whitespace character after `#!`
3. The next character in the file, ignoring comments & whitespace must not be `[`
I believe this is a strict superset of what we used to allow, so perhaps a crater run is unnecessary, but probably not a terrible idea.
2020-04-23 19:51:12 +00:00
|
|
|
#!//bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
// This could not possibly be a shebang & also a valid rust file, since a Rust file
|
|
|
|
// can't start with `[`
|
|
|
|
/*
|
|
|
|
[ (mixing comments to also test that we ignore both types of comments)
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
[allow(unused_variables)]
|
|
|
|
|
2024-02-16 20:02:50 +00:00
|
|
|
//@ check-pass
|
2024-10-30 23:47:47 +00:00
|
|
|
//@ reference: input.shebang.inner-attribute
|
Fix bug in shebang handling
Shebang handling was too agressive in stripping out the first line in cases where it is actually _not_ a shebang, but instead, valid rust (#70528). This is a second attempt at resolving this issue (the first attempt was flawed, for, among other reasons, causing an ICE in certain cases (#71372, #71471).
The behavior is now codified by a number of UI tests, but simply:
For the first line to be a shebang, the following must all be true:
1. The line must start with `#!`
2. The line must contain a non whitespace character after `#!`
3. The next character in the file, ignoring comments & whitespace must not be `[`
I believe this is a strict superset of what we used to allow, so perhaps a crater run is unnecessary, but probably not a terrible idea.
2020-04-23 19:51:12 +00:00
|
|
|
fn main() {
|
|
|
|
let x = 5;
|
|
|
|
}
|