diff options
-rw-r--r-- | Driver/PrintParserCallbacks.cpp | 6 | ||||
-rw-r--r-- | Driver/clang.cpp | 4 | ||||
-rw-r--r-- | Driver/clang.h | 2 | ||||
-rw-r--r-- | include/clang/Parse/Action.h | 4 | ||||
-rw-r--r-- | lib/Parse/MinimalAction.cpp | 10 | ||||
-rwxr-xr-x | test/Parser/2008-10-31-parse-noop-failure.c | 4 |
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; {} + |