forked from OSchip/llvm-project
Diagnose use of wide string literal in 'asm' instead of crashing. Fixes <rdar://problem/10465079>.
llvm-svn: 145656
This commit is contained in:
parent
04945c42c6
commit
65cdbf58a7
|
@ -191,6 +191,8 @@ def err_label_end_of_compound_statement : Error<
|
|||
def err_address_of_label_outside_fn : Error<
|
||||
"use of address-of-label extension outside of a function body">;
|
||||
def err_expected_string_literal : Error<"expected string literal">;
|
||||
def err_asm_operand_wide_string_literal : Error<
|
||||
"cannot use wide string literal in 'asm'">;
|
||||
def err_expected_asm_operand : Error<
|
||||
"expected string literal or '[' for asm operand">, CatInlineAsm;
|
||||
def err_expected_selector_for_method : Error<
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,3 +14,6 @@ void f2() {
|
|||
// rdar://5952468
|
||||
__asm ; // expected-error {{expected '(' after 'asm'}}
|
||||
|
||||
// <rdar://problem/10465079> - Don't crash on wide string literals in 'asm'.
|
||||
int foo asm (L"bar"); // expected-error {{cannot use wide string literal in 'asm'}}
|
||||
|
||||
|
|
Loading…
Reference in New Issue