mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Fix a minor bug in the implementation of #sourceLocation when the directive is succeeded by token that gives an error during lexing. The error will be reported with the wrong location. This is because lexing of the next token occurs immediately on consuming the last token of the directive which is before the virtual file is set up to have the location take effect. Resolved by moving consumption of directives last token to the end of the function.
63 lines
2.0 KiB
Swift
63 lines
2.0 KiB
Swift
// RUN: %target-typecheck-verify-swift
|
|
// RUN: not %target-swift-frontend -c %s 2>&1 | %FileCheck %s
|
|
|
|
let x = 0 // We need this because of the #sourceLocation-ends-with-a-newline requirement.
|
|
|
|
#sourceLocation()
|
|
x // expected-error {{parameterless closing #sourceLocation() directive without prior opening #sourceLocation(file:,line:) directive}}
|
|
|
|
#sourceLocation(file: "x", line: 0) // expected-error{{the line number needs to be greater}}
|
|
|
|
#sourceLocation(file: "x", line: -1) // expected-error{{expected starting line number}}
|
|
|
|
#sourceLocation(file: "x", line: 1.5) // expected-error{{expected starting line number}}
|
|
|
|
#sourceLocation(file: x.swift, line: 1) // expected-error{{expected filename string literal}}
|
|
|
|
#sourceLocation(file: "x.swift", line: 42)
|
|
x x ; // should be ignored by expected_error because it is in a different file
|
|
x
|
|
#sourceLocation()
|
|
_ = x
|
|
x x // expected-error{{consecutive statements}} {{2-2=;}}
|
|
// expected-warning @-1 2 {{unused}}
|
|
|
|
// rdar://19582475
|
|
public struct S { // expected-note{{in declaration of 'S'}}
|
|
// expected-error@+1{{expected declaration}}
|
|
/ ###line 25 "line-directive.swift"
|
|
}
|
|
// expected-error@+1{{#line directive was renamed to #sourceLocation}}
|
|
#line 32000 "troops_on_the_water"
|
|
|
|
#sourceLocation()
|
|
|
|
// expected-error@+1 {{expected expression}}
|
|
try #sourceLocation(file: "try.swift", line: 100)
|
|
#sourceLocation()
|
|
|
|
// expected-error@+3 {{expected statement}}
|
|
// expected-error@+2 {{#line directive was renamed to #sourceLocation}}
|
|
LABEL:
|
|
#line 200 "labeled.swift"
|
|
#sourceLocation()
|
|
|
|
class C {
|
|
#sourceLocation(file: "sr5242.swift", line: 100)
|
|
func foo() {}
|
|
let bar = 12
|
|
#sourceLocation(file: "sr5242.swift", line: 200)
|
|
}
|
|
enum E {
|
|
#sourceLocation(file: "sr5242.swift", line: 300)
|
|
case A, B
|
|
case C, D
|
|
#sourceLocation()
|
|
}
|
|
|
|
#sourceLocation(file: "sr8772.swift", line: 400)
|
|
2., 3
|
|
// CHECK: sr8772.swift:400:2: error: expected member name following '.'
|
|
// CHECK: sr8772.swift:400:3: error: consecutive statements on a line must be separated by ';'
|
|
// CHECK: sr8772.swift:400:3: error: expected expression
|