aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2008-02-08 00:23:11 +0000
committerAnders Carlsson <andersca@mac.com>2008-02-08 00:23:11 +0000
commit3f9424f3206b834b5dd0e7c403348651ab6fafbb (patch)
treebb742a883bdbdf0bd84d8c073b62db3bfa5f93f3
parentb746ce84fb5c3fd2c5659f84dc6f2a883b499dc2 (diff)
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
-rw-r--r--AST/Decl.cpp7
-rw-r--r--AST/DeclSerialization.cpp23
-rw-r--r--CodeGen/ModuleBuilder.cpp9
-rw-r--r--Driver/ASTConsumers.cpp6
-rw-r--r--Parse/Parser.cpp22
-rw-r--r--Sema/Sema.h3
-rw-r--r--Sema/SemaDecl.cpp7
-rw-r--r--include/clang/AST/Decl.h23
-rw-r--r--include/clang/Parse/Action.h4
-rw-r--r--include/clang/Parse/Parser.h2
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<LanguageIDs>(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<StringLiteral>(D.ReadOwnedPtr<Expr>());
-// D.ReadOwnedPtr(D.ReadOwnedPtr<StringLiteral>())<#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<FileScopeAsmDecl>(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<TypeDecl>(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<LinkageSpecDecl>(D)) {
PrintLinkageSpec(LSD);
- } else if (FileScopeAsmDecl *AD = dyn_cast<FileScopeAsmDecl>(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<ObjCClassDecl>(D)) {
Out << "Read objc fwd class decl\n";
- } else if (isa<FileScopeAsmDecl>(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<StringLiteral>((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