From 3f9424f3206b834b5dd0e7c403348651ab6fafbb Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Fri, 8 Feb 2008 00:23:11 +0000 Subject: [PATCH] Back out 46855 for now, it causes test failures on Darwin. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46867 91177308-0d34-0410-b5e6-96231b3b80d8 --- AST/Decl.cpp | 7 +------ AST/DeclSerialization.cpp | 23 ----------------------- CodeGen/ModuleBuilder.cpp | 9 --------- Driver/ASTConsumers.cpp | 6 ------ Parse/Parser.cpp | 22 ++++++++++------------ Sema/Sema.h | 3 +-- Sema/SemaDecl.cpp | 7 ------- include/clang/AST/Decl.h | 23 ----------------------- include/clang/Parse/Action.h | 4 ---- include/clang/Parse/Parser.h | 2 +- 10 files changed, 13 insertions(+), 93 deletions(-) diff --git a/AST/Decl.cpp b/AST/Decl.cpp index 55abe6f34d..78916c53b7 100644 --- a/AST/Decl.cpp +++ b/AST/Decl.cpp @@ -38,7 +38,6 @@ static unsigned nObjCCategoryImpl = 0; static unsigned nObjCCompatibleAlias = 0; static unsigned nObjCPropertyDecl = 0; static unsigned nLinkageSpecDecl = 0; -static unsigned nFileScopeAsmDecl = 0; static bool StatSwitch = false; @@ -170,8 +169,7 @@ void Decl::PrintStats() { nObjCCategoryImpl*sizeof(ObjCCategoryImplDecl)+ nObjCCompatibleAlias*sizeof(ObjCCompatibleAliasDecl)+ nObjCPropertyDecl*sizeof(ObjCPropertyDecl)+ - nLinkageSpecDecl*sizeof(LinkageSpecDecl)+ - nFileScopeAsmDecl*sizeof(FileScopeAsmDecl))); + nLinkageSpecDecl*sizeof(LinkageSpecDecl))); } @@ -242,9 +240,6 @@ void Decl::addDeclKind(const Kind k) { case LinkageSpec: nLinkageSpecDecl++; break; - case FileScopeAsm: - nFileScopeAsmDecl++; - break; } } diff --git a/AST/DeclSerialization.cpp b/AST/DeclSerialization.cpp index cb91846a02..146ebbacbe 100644 --- a/AST/DeclSerialization.cpp +++ b/AST/DeclSerialization.cpp @@ -67,9 +67,6 @@ Decl* Decl::Create(Deserializer& D) { case Typedef: return TypedefDecl::CreateImpl(D); - - case FileScopeAsm: - return FileScopeAsmDecl::CreateImpl(D); } } @@ -441,23 +438,3 @@ void LinkageSpecDecl::ReadInRec(Deserializer& D) { Language = static_cast(D.ReadInt()); D.ReadPtr(this->D); } - -//===----------------------------------------------------------------------===// -// FileScopeAsm Serialization. -//===----------------------------------------------------------------------===// - -void FileScopeAsmDecl::EmitImpl(llvm::Serializer& S) const -{ - Decl::EmitInRec(S); - S.EmitOwnedPtr(AsmString); -} - -FileScopeAsmDecl* FileScopeAsmDecl::CreateImpl(Deserializer& D) { - FileScopeAsmDecl* decl = new FileScopeAsmDecl(SourceLocation(), 0); - - decl->Decl::ReadInRec(D); - decl->AsmString = cast(D.ReadOwnedPtr()); -// D.ReadOwnedPtr(D.ReadOwnedPtr())<#T * * Ptr#>, <#bool AutoRegister#>)(decl->AsmString); - - return decl; -} diff --git a/CodeGen/ModuleBuilder.cpp b/CodeGen/ModuleBuilder.cpp index 06467488a5..50d6fedadd 100644 --- a/CodeGen/ModuleBuilder.cpp +++ b/CodeGen/ModuleBuilder.cpp @@ -70,15 +70,6 @@ namespace { Builder->WarnUnsupported(LSD, "linkage spec"); // FIXME: implement C++ linkage, C linkage works mostly by C // language reuse already. - } else if (FileScopeAsmDecl *AD = dyn_cast(D)) { - std::string AsmString(AD->getAsmString()->getStrData(), - AD->getAsmString()->getByteLength()); - - const std::string &S = Builder->getModule().getModuleInlineAsm(); - if (S.empty()) - Builder->getModule().setModuleInlineAsm(AsmString); - else - Builder->getModule().setModuleInlineAsm(S + '\n' + AsmString); } else { assert(isa(D) && "Unknown top level decl"); // TODO: handle debug info? diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp index 688619438b..3868e7d75c 100644 --- a/Driver/ASTConsumers.cpp +++ b/Driver/ASTConsumers.cpp @@ -97,10 +97,6 @@ void DeclPrinter:: PrintDecl(Decl *D) { Out << "Read top-level variable decl: '" << SD->getName() << "'\n"; } else if (LinkageSpecDecl *LSD = dyn_cast(D)) { PrintLinkageSpec(LSD); - } else if (FileScopeAsmDecl *AD = dyn_cast(D)) { - Out << "asm("; - AD->getAsmString()->printPretty(Out); - Out << ")\n"; } else { assert(0 && "Unknown decl type!"); } @@ -406,8 +402,6 @@ namespace { Out << "Read objc fwd protocol decl\n"; } else if (isa(D)) { Out << "Read objc fwd class decl\n"; - } else if (isa(D)) { - Out << "Read file scope asm decl\n"; } else { assert(0 && "Unknown decl type!"); } diff --git a/Parse/Parser.cpp b/Parse/Parser.cpp index 32856fe82b..6f2a71257a 100644 --- a/Parse/Parser.cpp +++ b/Parse/Parser.cpp @@ -321,7 +321,11 @@ Parser::DeclTy *Parser::ParseExternalDeclaration() { return RV; } case tok::kw_asm: - return ParseSimpleAsm(); + ParseSimpleAsm(); + ExpectAndConsume(tok::semi, diag::err_expected_semi_after, + "top-level asm block"); + // TODO: Invoke action for top-level asm. + return 0; case tok::at: // @ is not a legal token unless objc is enabled, no need to check. return ParseObjCAtDirectives(); @@ -606,25 +610,19 @@ Parser::ExprResult Parser::ParseAsmStringLiteral() { /// [GNU] simple-asm-expr: /// 'asm' '(' asm-string-literal ')' /// -Parser::DeclTy *Parser::ParseSimpleAsm() { +void Parser::ParseSimpleAsm() { assert(Tok.is(tok::kw_asm) && "Not an asm!"); - SourceLocation Loc = ConsumeToken(); + ConsumeToken(); if (Tok.isNot(tok::l_paren)) { Diag(Tok, diag::err_expected_lparen_after, "asm"); - return 0; + return; } - ConsumeParen(); + SourceLocation Loc = ConsumeParen(); - ExprResult Result = ParseAsmStringLiteral(); + ParseAsmStringLiteral(); MatchRHSPunctuation(tok::r_paren, Loc); - - if (ExpectAndConsume(tok::semi, diag::err_expected_semi_after, - "top-level asm block")) - return 0; - - return Actions.ActOnFileScopeAsmDecl(Loc, Result.Val); } diff --git a/Sema/Sema.h b/Sema/Sema.h index f3595e1076..06a12e4f7f 100644 --- a/Sema/Sema.h +++ b/Sema/Sema.h @@ -197,8 +197,7 @@ private: virtual DeclTy *ActOnLinkageSpec(SourceLocation Loc, SourceLocation LBrace, SourceLocation RBrace, const char *Lang, unsigned StrSize, DeclTy *D); - virtual DeclTy *ActOnFileScopeAsmDecl(SourceLocation Loc, ExprTy *expr); - + /// Scope actions. virtual void ActOnPopScope(SourceLocation Loc, Scope *S); virtual void ActOnTranslationUnitScope(SourceLocation Loc, Scope *S); diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index 00776912b0..cd546f3efc 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -1711,13 +1711,6 @@ void Sema::ActOnEnumBody(SourceLocation EnumLoc, DeclTy *EnumDeclX, Consumer.HandleTagDeclDefinition(Enum); } -Sema::DeclTy *Sema::ActOnFileScopeAsmDecl(SourceLocation Loc, - ExprTy *expr) { - StringLiteral *AsmString = cast((Expr*)expr); - - return new FileScopeAsmDecl(Loc, AsmString); -} - Sema::DeclTy* Sema::ActOnLinkageSpec(SourceLocation Loc, SourceLocation LBrace, SourceLocation RBrace, diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index 07588e4c06..cc96b0732d 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -27,7 +27,6 @@ class Decl; namespace clang { class Expr; class Stmt; -class StringLiteral; class FunctionDecl; class IdentifierInfo; @@ -72,7 +71,6 @@ public: ObjCClass, ObjCForwardProtocol, LinkageSpec, - FileScopeAsm, // For each non-leaf class, we now define a mapping to the first/last member // of the class, to allow efficient classof. @@ -757,27 +755,6 @@ protected: friend Decl* Decl::Create(llvm::Deserializer& D); }; -class FileScopeAsmDecl : public Decl { - StringLiteral *AsmString; -public: - FileScopeAsmDecl(SourceLocation L, StringLiteral *asmstring) - : Decl(FileScopeAsm, L), AsmString(asmstring) {} - - const StringLiteral *getAsmString() const { return AsmString; } - StringLiteral *getAsmString() { return AsmString; } - static bool classof(const Decl *D) { - return D->getKind() == FileScopeAsm; - } - static bool classof(const FileScopeAsmDecl *D) { return true; } -protected: - /// EmitImpl - Serialize this FileScopeAsmDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a FileScopeAsmDecl. Called by Decl::Create. - static FileScopeAsmDecl* CreateImpl(llvm::Deserializer& D); - - friend Decl* Decl::Create(llvm::Deserializer& D); -}; /// LinkageSpecDecl - This represents a linkage specification. For example: /// extern "C" void foo(); diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h index 003dd9e01b..7a2081978d 100644 --- a/include/clang/Parse/Action.h +++ b/include/clang/Parse/Action.h @@ -141,10 +141,6 @@ public: return Decl; } - virtual DeclTy *ActOnFileScopeAsmDecl(SourceLocation Loc, ExprTy *AsmString) { - return 0; - } - /// ActOnPopScope - This callback is called immediately before the specified /// scope is popped and deleted. virtual void ActOnPopScope(SourceLocation Loc, Scope *S) {} diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index aae86549f0..2712daa245 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -256,7 +256,7 @@ private: DeclTy *ParseDeclarationOrFunctionDefinition(); DeclTy *ParseFunctionDefinition(Declarator &D); void ParseKNRParamDeclarations(Declarator &D); - DeclTy *ParseSimpleAsm(); + void ParseSimpleAsm(); ExprResult ParseAsmStringLiteral(); // Objective-C External Declarations -- 2.40.0