зеркало из https://github.com/microsoft/clang.git
Fixed source range for FileScopeAsmDecl. Others source range fixes will follow.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126939 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
67714230a1
Коммит
21e006e51a
|
@ -2519,11 +2519,21 @@ private:
|
|||
|
||||
class FileScopeAsmDecl : public Decl {
|
||||
StringLiteral *AsmString;
|
||||
FileScopeAsmDecl(DeclContext *DC, SourceLocation L, StringLiteral *asmstring)
|
||||
: Decl(FileScopeAsm, DC, L), AsmString(asmstring) {}
|
||||
SourceLocation RParenLoc;
|
||||
FileScopeAsmDecl(DeclContext *DC, StringLiteral *asmstring,
|
||||
SourceLocation StartL, SourceLocation EndL)
|
||||
: Decl(FileScopeAsm, DC, StartL), AsmString(asmstring), RParenLoc(EndL) {}
|
||||
public:
|
||||
static FileScopeAsmDecl *Create(ASTContext &C, DeclContext *DC,
|
||||
SourceLocation L, StringLiteral *Str);
|
||||
StringLiteral *Str, SourceLocation AsmLoc,
|
||||
SourceLocation RParenLoc);
|
||||
|
||||
SourceLocation getAsmLoc() const { return getLocation(); }
|
||||
SourceLocation getRParenLoc() const { return RParenLoc; }
|
||||
void setRParenLoc(SourceLocation L) { RParenLoc = L; }
|
||||
SourceRange getSourceRange() const {
|
||||
return SourceRange(getAsmLoc(), getRParenLoc());
|
||||
}
|
||||
|
||||
const StringLiteral *getAsmString() const { return AsmString; }
|
||||
StringLiteral *getAsmString() { return AsmString; }
|
||||
|
|
|
@ -891,7 +891,9 @@ public:
|
|||
NamedDecl *D);
|
||||
|
||||
void DiagnoseInvalidJumps(Stmt *Body);
|
||||
Decl *ActOnFileScopeAsmDecl(SourceLocation Loc, Expr *expr);
|
||||
Decl *ActOnFileScopeAsmDecl(Expr *expr,
|
||||
SourceLocation AsmLoc,
|
||||
SourceLocation RParenLoc);
|
||||
|
||||
/// Scope actions.
|
||||
void ActOnPopScope(SourceLocation Loc, Scope *S);
|
||||
|
|
|
@ -2266,7 +2266,8 @@ TypedefDecl *TypedefDecl::Create(ASTContext &C, DeclContext *DC,
|
|||
}
|
||||
|
||||
FileScopeAsmDecl *FileScopeAsmDecl::Create(ASTContext &C, DeclContext *DC,
|
||||
SourceLocation L,
|
||||
StringLiteral *Str) {
|
||||
return new (C) FileScopeAsmDecl(DC, L, Str);
|
||||
StringLiteral *Str,
|
||||
SourceLocation AsmLoc,
|
||||
SourceLocation RParenLoc) {
|
||||
return new (C) FileScopeAsmDecl(DC, Str, AsmLoc, RParenLoc);
|
||||
}
|
||||
|
|
|
@ -513,14 +513,16 @@ Parser::ParseExternalDeclaration(ParsedAttributesWithRange &attrs,
|
|||
case tok::kw_asm: {
|
||||
ProhibitAttributes(attrs);
|
||||
|
||||
ExprResult Result(ParseSimpleAsm());
|
||||
SourceLocation StartLoc = Tok.getLocation();
|
||||
SourceLocation EndLoc;
|
||||
ExprResult Result(ParseSimpleAsm(&EndLoc));
|
||||
|
||||
ExpectAndConsume(tok::semi, diag::err_expected_semi_after,
|
||||
"top-level asm block");
|
||||
|
||||
if (Result.isInvalid())
|
||||
return DeclGroupPtrTy();
|
||||
SingleDecl = Actions.ActOnFileScopeAsmDecl(Tok.getLocation(), Result.get());
|
||||
SingleDecl = Actions.ActOnFileScopeAsmDecl(Result.get(), StartLoc, EndLoc);
|
||||
break;
|
||||
}
|
||||
case tok::at:
|
||||
|
|
|
@ -8024,11 +8024,14 @@ void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceLocation LBraceLoc,
|
|||
NumPositiveBits, NumNegativeBits);
|
||||
}
|
||||
|
||||
Decl *Sema::ActOnFileScopeAsmDecl(SourceLocation Loc, Expr *expr) {
|
||||
Decl *Sema::ActOnFileScopeAsmDecl(Expr *expr,
|
||||
SourceLocation StartLoc,
|
||||
SourceLocation EndLoc) {
|
||||
StringLiteral *AsmString = cast<StringLiteral>(expr);
|
||||
|
||||
FileScopeAsmDecl *New = FileScopeAsmDecl::Create(Context, CurContext,
|
||||
Loc, AsmString);
|
||||
AsmString, StartLoc,
|
||||
EndLoc);
|
||||
CurContext->addDecl(New);
|
||||
return New;
|
||||
}
|
||||
|
|
|
@ -687,6 +687,7 @@ void ASTDeclReader::VisitParmVarDecl(ParmVarDecl *PD) {
|
|||
void ASTDeclReader::VisitFileScopeAsmDecl(FileScopeAsmDecl *AD) {
|
||||
VisitDecl(AD);
|
||||
AD->setAsmString(cast<StringLiteral>(Reader.ReadExpr(F)));
|
||||
AD->setRParenLoc(ReadSourceLocation(Record, Idx));
|
||||
}
|
||||
|
||||
void ASTDeclReader::VisitBlockDecl(BlockDecl *BD) {
|
||||
|
@ -1585,7 +1586,8 @@ Decl *ASTReader::ReadDeclRecord(unsigned Index, DeclID ID) {
|
|||
SC_None, SC_None, 0);
|
||||
break;
|
||||
case DECL_FILE_SCOPE_ASM:
|
||||
D = FileScopeAsmDecl::Create(*Context, 0, SourceLocation(), 0);
|
||||
D = FileScopeAsmDecl::Create(*Context, 0, 0, SourceLocation(),
|
||||
SourceLocation());
|
||||
break;
|
||||
case DECL_BLOCK:
|
||||
D = BlockDecl::Create(*Context, 0, SourceLocation());
|
||||
|
|
|
@ -613,6 +613,7 @@ void ASTDeclWriter::VisitParmVarDecl(ParmVarDecl *D) {
|
|||
void ASTDeclWriter::VisitFileScopeAsmDecl(FileScopeAsmDecl *D) {
|
||||
VisitDecl(D);
|
||||
Writer.AddStmt(D->getAsmString());
|
||||
Writer.AddSourceLocation(D->getRParenLoc(), Record);
|
||||
Code = serialization::DECL_FILE_SCOPE_ASM;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче