]> granicus.if.org Git - clang/commitdiff
"One" line fix for -parse-noop failure, "id" and several other things
authorDaniel Dunbar <daniel@zuster.org>
Fri, 31 Oct 2008 08:56:51 +0000 (08:56 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Fri, 31 Oct 2008 08:56:51 +0000 (08:56 +0000)
were being treated as type names for non-Objective-C files.
 - Other lines are just because MinimalAction didn't have access to
   the LangOptions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58498 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/PrintParserCallbacks.cpp
Driver/clang.cpp
Driver/clang.h
include/clang/Parse/Action.h
lib/Parse/MinimalAction.cpp
test/Parser/2008-10-31-parse-noop-failure.c [new file with mode: 0755]

index 94cc0e2237434e2c06422d6f77839b5a64d8e1f6..43dbf341e96994e6a367a3900674a7e5c481e1cc 100644 (file)
@@ -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);
 }
index 84eb341b61e0537830acf976de34f7c369bfbe34..cf19c66d77534a7ee02609b16d1f16502477a67f 100644 (file)
@@ -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;
       
index 46c0085f1fe1daacb3ef7e73680ec3ee846b0eff..e0ddd08b2d39992bebba04880e0659cda36206cf 100644 (file)
@@ -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);
index 7564aefdc87cfcbab63cd7bb2a60f224f47c5012..8972328b936bbff7b6378edfd17be3cef3b3341e 100644 (file)
@@ -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.
index cb130c3d268aa77334ba5a17b98d6e5f47d4049c..c98830ca79c74891cad337c66ccab887bd42982a 100644 (file)
@@ -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 (executable)
index 0000000..c939475
--- /dev/null
@@ -0,0 +1,4 @@
+// RUN: clang -verify -parse-noop %t
+
+void add_attribute(id) int id; {}
+