]> granicus.if.org Git - clang/commitdiff
Change -verify mode to find the "expected-error" and "expected-warning" strings
authorChris Lattner <sabre@nondot.org>
Fri, 21 Nov 2008 01:18:36 +0000 (01:18 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 21 Nov 2008 01:18:36 +0000 (01:18 +0000)
with a raw lexer instead of a PP lexer.  This means that -verify doesn't scan
#include'd headers for expected-error/warning strings, and it also means that it
doesn't ignore them in #if 0.

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

Driver/DiagChecker.cpp
test/Driver/env-include-paths.c

index c4749512442d9bebd81f918714c69d1ba86c206f..d6321d60ade744ab28c4529dcd83079661a47e0e 100644 (file)
@@ -93,28 +93,29 @@ static void FindExpectedDiags(Preprocessor &PP,
                               DiagList &ExpectedErrors,
                               DiagList &ExpectedWarnings,
                               DiagList &ExpectedNotes) {
+  // Create a raw lexer to pull all the comments out of the main file.  We don't
+  // want to look in #include'd headers for expected-error strings.
+  
+  unsigned FileID = PP.getSourceManager().getMainFileID();
+  std::pair<const char*,const char*> File =
+    PP.getSourceManager().getBufferData(FileID);
+  
+  // Create a lexer to lex all the tokens of the main file in raw mode.
+  Lexer RawLex(SourceLocation::getFileLoc(FileID, 0),
+               PP.getLangOptions(), File.first, File.second);
+  
   // Return comments as tokens, this is how we find expected diagnostics.
-  PP.SetCommentRetentionState(true, true);
+  RawLex.SetCommentRetentionState(true);
 
-  // Enter the cave.
-  PP.EnterMainSourceFile();
-
-  // Turn off all warnings from relexing or preprocessing.
-  PP.getDiagnostics().setWarnOnExtensions(false);
-  PP.getDiagnostics().setErrorOnExtensions(false);
-  for (unsigned i = 0; i != diag::NUM_BUILTIN_DIAGNOSTICS; ++i)
-    if (PP.getDiagnostics().isBuiltinNoteWarningOrExtension((diag::kind)i))
-      PP.getDiagnostics().setDiagnosticMapping((diag::kind)i, diag::MAP_IGNORE);
-  
   Token Tok;
   do {
-    PP.Lex(Tok);
+    RawLex.Lex(Tok);
 
     if (Tok.is(tok::comment)) {
       std::string Comment = PP.getSpelling(Tok);
 
       // Find all expected errors
-      FindDiagnostics(Comment, ExpectedErrors,PP.getSourceManager(),
+      FindDiagnostics(Comment, ExpectedErrors, PP.getSourceManager(),
                       Tok.getLocation(), ExpectedErrStr);
 
       // Find all expected warnings
@@ -126,8 +127,6 @@ static void FindExpectedDiags(Preprocessor &PP,
                       Tok.getLocation(), ExpectedNoteStr);
     }
   } while (Tok.isNot(tok::eof));
-
-  PP.SetCommentRetentionState(false, false);
 }
 
 /// PrintProblem - This takes a diagnostic map of the delta between expected and
index ced24311c0099d370d3ff85fd2a8356dea5c1d77..11876c315b016e5dd4778c3a09e2d6980fc754ee 100644 (file)
@@ -2,8 +2,7 @@
 // RUN: env CPATH="" clang -fsyntax-only -verify -DAS_SOURCE %s &&
 // RUN: env CPATH="xyz:xyz" clang -fsyntax-only -verify -DAS_SOURCE %s &&
 // RUN: cd $(dirname %s) &&
-// RUN: env CPATH="xyz::xyz" clang -fsyntax-only -verify -DSHOULD_FIND -DAS_SOURCE %s &&
-// RUN: env CPATH="../Driver" clang -fsyntax-only -verify -DSHOULD_FIND -DAS_SOURCE %s
+// RUN: env CPATH="xyz::xyz" clang -fsyntax-only -verify -DSHOULD_FIND -DAS_SOURCE %s
 
 #ifdef AS_SOURCE
 #undef AS_SOURCE
 
 #ifdef SHOULD_FIND
 #include <env-include-paths.c>
-#else
-/* expected-error {{file not found}} */ #include <env-include-paths.c> 
 #endif
 
 #undef AS_INCLUDE
 
 #endif
 
-#ifdef AS_INCLUDE
 
 /* expected-warning {{Hello}} */ #warning "Hello"
-
-#endif