Skip to content

Commit b88de9e

Browse files
authored
Merge pull request #19457 from rintaro/lexer-strliteral-interpolation-multiline
[Lexer] Fix assertion failure for unterminated string literal
2 parents 8be6b49 + a0ebdbc commit b88de9e

File tree

6 files changed

+42
-0
lines changed

6 files changed

+42
-0
lines changed

lib/Parse/Lexer.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1817,6 +1817,12 @@ void Lexer::lexStringLiteral(unsigned CustomDelimiterLen) {
18171817
// Successfully scanned the body of the expression literal.
18181818
++CurPtr;
18191819
continue;
1820+
} else if ((*CurPtr == '\r' || *CurPtr == '\n') && IsMultilineString) {
1821+
// The only case we reach here is unterminated single line string in the
1822+
// interpolation. For better recovery, go on after emitting an error.
1823+
diagnose(CurPtr, diag::lex_unterminated_string);
1824+
wasErroneous = true;
1825+
continue;
18201826
}
18211827

18221828
// Being diagnosed below.

test/Parse/multiline_errors.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,3 +184,10 @@ _ = """\
184184
// FIXME: Bad diagnostics
185185
// expected-error@-3 {{multi-line string literal content must begin on a new line}}
186186
// expected-error@-4 {{escaped newline at the last line is not allowed}} {{8-9=}}
187+
188+
let _ = """
189+
foo
190+
\("bar
191+
baz
192+
"""
193+
// expected-error@-3 {{unterminated string literal}}

test/Parse/string_literal_eof4.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// RUN: %target-typecheck-verify-swift
2+
3+
// NOTE: DO NOT add a newline at EOF.
4+
// expected-error@+1 {{unterminated string literal}}
5+
_ = """
6+
foo

test/Parse/string_literal_eof5.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// RUN: %target-typecheck-verify-swift
2+
3+
// NOTE: DO NOT add a newline at EOF.
4+
// expected-error@+1 {{unterminated string literal}}
5+
_ = """
6+
foo
7+
\(

test/Parse/string_literal_eof6.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// RUN: %target-typecheck-verify-swift
2+
3+
// NOTE: DO NOT add a newline at EOF.
4+
// expected-error@+1 {{unterminated string literal}}
5+
_ = """
6+
foo
7+
\("bar

test/Parse/string_literal_eof7.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// RUN: %target-typecheck-verify-swift
2+
3+
// expected-error@+4 {{unterminated string literal}}
4+
// expected-error@+1 {{unterminated string literal}}
5+
_ = """
6+
foo
7+
\("bar
8+
baz
9+

0 commit comments

Comments
 (0)