diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-12-02 00:35:46 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-12-02 00:35:46 +0000 |
commit | 65cdbf58a7dc562b184fd70b3126717662bab607 (patch) | |
tree | 05532a6ace619c7f9e02f11285715317e8b2f625 /clang/lib/Parse/Parser.cpp | |
parent | 04945c42c6407802ff446310342d6add749658c3 (diff) | |
download | bcm5719-llvm-65cdbf58a7dc562b184fd70b3126717662bab607.tar.gz bcm5719-llvm-65cdbf58a7dc562b184fd70b3126717662bab607.zip |
Diagnose use of wide string literal in 'asm' instead of crashing. Fixes <rdar://problem/10465079>.
llvm-svn: 145656
Diffstat (limited to 'clang/lib/Parse/Parser.cpp')
-rw-r--r-- | clang/lib/Parse/Parser.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index eb6dc443c9d..e74c46e2fda 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -1104,16 +1104,23 @@ void Parser::ParseKNRParamDeclarations(Declarator &D) { /// string-literal /// Parser::ExprResult Parser::ParseAsmStringLiteral() { - if (!isTokenStringLiteral()) { - Diag(Tok, diag::err_expected_string_literal); - return ExprError(); + switch (Tok.getKind()) { + case tok::string_literal: + break; + case tok::wide_string_literal: { + SourceLocation L = Tok.getLocation(); + Diag(Tok, diag::err_asm_operand_wide_string_literal) + << SourceRange(L, L); + return ExprError(); + } + default: + Diag(Tok, diag::err_expected_string_literal); + return ExprError(); } ExprResult Res(ParseStringLiteralExpression()); if (Res.isInvalid()) return move(Res); - // TODO: Diagnose: wide string literal in 'asm' - return move(Res); } |