Files
swift-mirror/test/StringProcessing/Parse/forward-slash-regex-skipping-invalid.swift
Rintaro Ishizaki 47f18d492e [ASTGen] Move regex literal parsing from SwiftCompilerSources to ASTGen
ASTGen always builds with the host Swift compiler, without requiring
bootstrapping, and is enabled in more places. Move the regex literal
parsing logic there so it is enabled in more host environments, and
makes use of CMake's Swift support. Enable all of the regex literal
tests when ASTGen is built, to ensure everything is working.

Remove the "AST" and "Parse" Swift modules from SwiftCompilerSources,
because they are no longer needed.
2023-11-16 10:59:23 -08:00

93 lines
3.6 KiB
Swift

// RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -experimental-skip-all-function-bodies
// RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -experimental-skip-non-inlinable-function-bodies-without-types
// RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -experimental-skip-non-inlinable-function-bodies
// REQUIRES: swift_swift_parser
// We don't consider this a regex literal when skipping as it has an initial
// space.
func a() { _ = / x*/ } // expected-error {{unexpected end of block comment}}
// Same because of unbalanced ')'
func b() { _ = /x)*/ } // expected-error {{unexpected end of block comment}}
// These also fail the heuristic, but have unbalanced `{` `}`, so we don't skip.
func c() { _ = / x}*/ } // expected-error {{regex literal may not start with space; add backslash to escape}}
func d() { _ = / x{*/ } // expected-error {{regex literal may not start with space; add backslash to escape}}
// Unterminated, and unbalanced `{}`.
func e() {
_ = / }
// expected-error@-1 {{unterminated regex literal}}
// expected-error@-2 {{regex literal may not start with space; add backslash to escape}}
}
func f() {
_ = / {
// expected-error@-1 {{unterminated regex literal}}
// expected-error@-2 {{regex literal may not start with space; add backslash to escape}}
}
func g() {
_ = /x }
} // expected-error {{extraneous '}' at top level}}
func h() {
_ = /x {
} // The above cannot a regex literal so we skip; this `}` is to balance things out.
}
func i() {
_ = /x "[abc] {
// expected-error@-1 {{unterminated string literal}}
}
func j() {
_ = /^ [abc] {
// expected-error@-1 {{unterminated regex literal}}
}
func k() {
_ = /^ "[abc] {
// expected-error@-1 {{unterminated string literal}}
}
func l() {
_ = /^ } abc {
// expected-error@-1 {{unterminated regex literal}}
}
func m() {
_ = / "
// expected-error@-1 {{unterminated string literal}}
}
} // expected-error {{extraneous '}' at top level}}
// Unbalanced `}`, make sure we don't consider the string literal `{`.
func n() { / "{"}/ } // expected-error {{regex literal may not start with space; add backslash to escape}}
func o() {
_ = {
0
/x}}} /
2
} // expected-error {{extraneous '}' at top level}}
// expected-error@-3 {{extraneous '}' at top level}}
// expected-error@-4 {{consecutive statements on a line must be separated by ';'}}
// expected-error@-5 {{unterminated regex literal}}
// expected-warning@-6 {{regular expression literal is unused}}
// expected-warning@-6 {{integer literal is unused}}
} // expected-error {{extraneous '}' at top level}}
func p() {
_ = 2
/x} /
.bitWidth
// expected-error@-2 {{consecutive statements on a line must be separated by ';'}}
// expected-error@-3 {{unterminated regex literal}}
// expected-error@-3 {{value of type 'Regex<Substring>' has no member 'bitWidth'}}
} // expected-error {{extraneous '}' at top level}}
func err1() { _ = / 0xG}/ }
// expected-error@-1 {{regex literal may not start with space; add backslash to escape}}
func err2() { _ = / 0oG}/ }
// expected-error@-1 {{regex literal may not start with space; add backslash to escape}}
func err3() { _ = / {"/ }
// expected-error@-1 {{regex literal may not start with space; add backslash to escape}}
func err4() { _ = / {'/ }
// expected-error@-1 {{regex literal may not start with space; add backslash to escape}}
func err5() { _ = / {<#placeholder#>/ }
// expected-error@-1 {{regex literal may not start with space; add backslash to escape}}