зеркало из https://github.com/microsoft/clang-1.git
Diagnose use of wide string literal in 'asm' instead of crashing. Fixes <rdar://problem/10465079>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145656 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
4bb6686274
Коммит
7f422287a2
|
@ -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'}}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче