forked from OSchip/llvm-project
[Attr] Fix `-ast-print` for `asm` attribute
Without this fix, the tests introduced here produce the following assert fail: ``` clang: /home/jdenny/llvm/clang/include/clang/Basic/AttributeCommonInfo.h:163: unsigned int clang::AttributeCommonInfo::getAttributeSpellingListIndex() const: Assertion `(isAttributeSpellingListCalculated() || AttrName) && "Spelling cannot be found"' failed. ``` The bug was introduced by D67368, which caused `AsmLabelAttr`'s spelling index to be set to `SpellingNotCalculated`. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D70349
This commit is contained in:
parent
015b2e699f
commit
c85fa79d36
|
@ -7019,8 +7019,9 @@ NamedDecl *Sema::ActOnVariableDeclarator(
|
|||
}
|
||||
}
|
||||
|
||||
NewVD->addAttr(::new (Context) AsmLabelAttr(
|
||||
Context, SE->getStrTokenLoc(0), Label, /*IsLiteralLabel=*/true));
|
||||
NewVD->addAttr(AsmLabelAttr::Create(Context, Label,
|
||||
/*IsLiteralLabel=*/true,
|
||||
SE->getStrTokenLoc(0)));
|
||||
} else if (!ExtnameUndeclaredIdentifiers.empty()) {
|
||||
llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I =
|
||||
ExtnameUndeclaredIdentifiers.find(NewVD->getIdentifier());
|
||||
|
@ -8923,9 +8924,9 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
|
|||
if (Expr *E = (Expr*) D.getAsmLabel()) {
|
||||
// The parser guarantees this is a string.
|
||||
StringLiteral *SE = cast<StringLiteral>(E);
|
||||
NewFD->addAttr(::new (Context)
|
||||
AsmLabelAttr(Context, SE->getStrTokenLoc(0),
|
||||
SE->getString(), /*IsLiteralLabel=*/true));
|
||||
NewFD->addAttr(AsmLabelAttr::Create(Context, SE->getString(),
|
||||
/*IsLiteralLabel=*/true,
|
||||
SE->getStrTokenLoc(0)));
|
||||
} else if (!ExtnameUndeclaredIdentifiers.empty()) {
|
||||
llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*>::iterator I =
|
||||
ExtnameUndeclaredIdentifiers.find(NewFD->getIdentifier());
|
||||
|
|
|
@ -10,3 +10,8 @@ using B = int ** __ptr32 *[3];
|
|||
// FIXME: Too many parens here!
|
||||
// CHECK: using C = int ((*))() __attribute__((cdecl));
|
||||
using C = int (*)() [[gnu::cdecl]];
|
||||
|
||||
// CHECK: int fun_asm() asm("");
|
||||
int fun_asm() asm("");
|
||||
// CHECK: int var_asm asm("");
|
||||
int var_asm asm("");
|
||||
|
|
Loading…
Reference in New Issue