Files
swift-mirror/test/Parse/line-directive.swift
John Holdsworth eb450ee494 Fix minor bug in #sourceLocation on lex error (#19344)
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.
2018-09-19 11:03:08 +09:00

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