mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Instead, check them and their error handling right away. In addition to fixing the crash in the radar, this also causes us to emit unused variable warnings in functions containing local functions. Eventually, TC.definedFunctions should go away altogether. Fixes <rdar://problem/53956342>.
73 lines
2.6 KiB
Swift
73 lines
2.6 KiB
Swift
// RUN: %target-typecheck-verify-swift -swift-version 4
|
|
|
|
// SR-1661: Dollar was accidentally allowed as an identifier in Swift 3.
|
|
// SE-0144: Reject this behavior in the future.
|
|
|
|
func dollarVar() {
|
|
var $ : Int = 42 // expected-error {{'$' is not an identifier; use backticks to escape it}} {{7-8=`$`}}
|
|
$ += 1 // expected-error {{'$' is not an identifier; use backticks to escape it}} {{3-4=`$`}}
|
|
print($) // expected-error {{'$' is not an identifier; use backticks to escape it}} {{9-10=`$`}}
|
|
}
|
|
func dollarLet() {
|
|
let $ = 42 // expected-error {{'$' is not an identifier; use backticks to escape it}} {{7-8=`$`}}
|
|
print($) // expected-error {{'$' is not an identifier; use backticks to escape it}} {{9-10=`$`}}
|
|
}
|
|
func dollarClass() {
|
|
class $ {} // expected-error {{'$' is not an identifier; use backticks to escape it}} {{9-10=`$`}}
|
|
}
|
|
func dollarEnum() {
|
|
enum $ {} // expected-error {{'$' is not an identifier; use backticks to escape it}} {{8-9=`$`}}
|
|
}
|
|
func dollarStruct() {
|
|
struct $ {} // expected-error {{'$' is not an identifier; use backticks to escape it}} {{10-11=`$`}}
|
|
}
|
|
|
|
func dollarFunc() {
|
|
func $($ dollarParam: Int) {}
|
|
// expected-error@-1 {{'$' is not an identifier; use backticks to escape it}} {{8-9=`$`}}
|
|
// expected-error@-2 {{'$' is not an identifier; use backticks to escape it}} {{10-11=`$`}}
|
|
$($: 24)
|
|
// expected-error@-1 {{'$' is not an identifier; use backticks to escape it}} {{3-4=`$`}}
|
|
// expected-error@-2 {{'$' is not an identifier; use backticks to escape it}} {{5-6=`$`}}
|
|
}
|
|
|
|
func escapedDollarVar() {
|
|
var `$` : Int = 42 // no error
|
|
`$` += 1
|
|
print(`$`)
|
|
}
|
|
func escapedDollarLet() {
|
|
let `$` = 42 // no error
|
|
print(`$`)
|
|
}
|
|
func escapedDollarClass() {
|
|
class `$` {} // no error
|
|
}
|
|
func escapedDollarEnum() {
|
|
enum `$` {} // no error
|
|
}
|
|
func escapedDollarStruct() {
|
|
struct `$` {} // no error
|
|
}
|
|
|
|
func escapedDollarFunc() {
|
|
func `$`(`$`: Int) {} // no error
|
|
`$`(`$`: 25) // no error
|
|
}
|
|
|
|
func escapedDollarAnd() {
|
|
// FIXME: Bad diagnostics.
|
|
`$0` = 1 // expected-error {{expected expression}}
|
|
`$$` = 2
|
|
`$abc` = 3
|
|
}
|
|
|
|
func $declareWithDollar() { // expected-error{{cannot declare entity named '$declareWithDollar'}}
|
|
var $foo = 17 // expected-error{{cannot declare entity named '$foo'}}
|
|
// expected-warning@-1 {{initialization of variable '$foo' was never used; consider replacing with assignment to '_' or removing it}}
|
|
func $bar() { } // expected-error{{cannot declare entity named '$bar'}}
|
|
func wibble(
|
|
$a: Int, // expected-error{{cannot declare entity named '$a'}}
|
|
$b c: Int) { } // expected-error{{cannot declare entity named '$b'}}
|
|
}
|