aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Driver/PrintParserCallbacks.cpp6
-rw-r--r--Driver/clang.cpp4
-rw-r--r--Driver/clang.h2
-rw-r--r--include/clang/Parse/Action.h4
-rw-r--r--lib/Parse/MinimalAction.cpp10
-rwxr-xr-xtest/Parser/2008-10-31-parse-noop-failure.c4
6 files changed, 20 insertions, 10 deletions
diff --git a/Driver/PrintParserCallbacks.cpp b/Driver/PrintParserCallbacks.cpp
index 94cc0e2237..43dbf341e9 100644
--- a/Driver/PrintParserCallbacks.cpp
+++ b/Driver/PrintParserCallbacks.cpp
@@ -22,7 +22,7 @@ namespace {
class ParserPrintActions : public MinimalAction {
public:
- ParserPrintActions(IdentifierTable &IT) : MinimalAction(IT) {}
+ ParserPrintActions(Preprocessor &PP) : MinimalAction(PP) {}
// Printing Functions which also must call MinimalAction
@@ -568,6 +568,6 @@ namespace {
};
}
-MinimalAction *clang::CreatePrintParserActionsAction(IdentifierTable &IT) {
- return new ParserPrintActions(IT);
+MinimalAction *clang::CreatePrintParserActionsAction(Preprocessor &PP) {
+ return new ParserPrintActions(PP);
}
diff --git a/Driver/clang.cpp b/Driver/clang.cpp
index 84eb341b61..cf19c66d77 100644
--- a/Driver/clang.cpp
+++ b/Driver/clang.cpp
@@ -1304,12 +1304,12 @@ static void ProcessInputFile(Preprocessor &PP, PreprocessorFactory &PPF,
break;
case ParseNoop: // -parse-noop
- ParseFile(PP, new MinimalAction(PP.getIdentifierTable()));
+ ParseFile(PP, new MinimalAction(PP));
ClearSourceMgr = true;
break;
case ParsePrintCallbacks:
- ParseFile(PP, CreatePrintParserActionsAction(PP.getIdentifierTable()));
+ ParseFile(PP, CreatePrintParserActionsAction(PP));
ClearSourceMgr = true;
break;
diff --git a/Driver/clang.h b/Driver/clang.h
index 46c0085f1f..e0ddd08b2d 100644
--- a/Driver/clang.h
+++ b/Driver/clang.h
@@ -39,7 +39,7 @@ void DoRewriteTest(Preprocessor &PP, const std::string &InFileName,
/// CreatePrintParserActionsAction - Return the actions implementation that
/// implements the -parse-print-callbacks option.
-MinimalAction *CreatePrintParserActionsAction(IdentifierTable &);
+MinimalAction *CreatePrintParserActionsAction(Preprocessor &PP);
/// EmitLLVMFromASTs - Implement -emit-llvm, which generates llvm IR from C.
void EmitLLVMFromASTs(Preprocessor &PP, bool PrintStats);
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index 7564aefdc8..8972328b93 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -31,6 +31,7 @@ namespace clang {
class Selector;
class InitListDesignations;
// Lex.
+ class Preprocessor;
class Token;
/// Action - As the parser reads the input file and recognizes the productions
@@ -923,8 +924,9 @@ class MinimalAction : public Action {
/// For example, user-defined classes, built-in "id" type, etc.
Scope *TUScope;
IdentifierTable &Idents;
+ Preprocessor &PP;
public:
- MinimalAction(IdentifierTable &IT) : Idents(IT) {}
+ MinimalAction(Preprocessor &pp);
/// isTypeName - This looks at the IdentifierInfo::FETokenInfo field to
/// determine whether the name is a typedef or not in this scope.
diff --git a/lib/Parse/MinimalAction.cpp b/lib/Parse/MinimalAction.cpp
index cb130c3d26..c98830ca79 100644
--- a/lib/Parse/MinimalAction.cpp
+++ b/lib/Parse/MinimalAction.cpp
@@ -28,12 +28,16 @@ struct TypeNameInfo {
}
};
-void MinimalAction:: ActOnTranslationUnitScope(SourceLocation Loc, Scope *S) {
+MinimalAction::MinimalAction(Preprocessor &pp)
+ : Idents(pp.getIdentifierTable()), PP(pp) {}
+
+void MinimalAction::ActOnTranslationUnitScope(SourceLocation Loc, Scope *S) {
TUScope = S;
+ if (!PP.getLangOptions().ObjC1) return;
+
+ // recognize the ObjC built-in type identifiers.
IdentifierInfo *II;
TypeNameInfo *TI;
-
- // recognize the ObjC built-in type identifiers.
II = &Idents.get("id");
TI = new TypeNameInfo(1, II->getFETokenInfo<TypeNameInfo>());
II->setFETokenInfo(TI);
diff --git a/test/Parser/2008-10-31-parse-noop-failure.c b/test/Parser/2008-10-31-parse-noop-failure.c
new file mode 100755
index 0000000000..c93947591b
--- /dev/null
+++ b/test/Parser/2008-10-31-parse-noop-failure.c
@@ -0,0 +1,4 @@
+// RUN: clang -verify -parse-noop %t
+
+void add_attribute(id) int id; {}
+