diff --git a/Driver/DiagChecker.cpp b/Driver/DiagChecker.cpp
index c474951..d6321d6 100644
--- a/Driver/DiagChecker.cpp
+++ b/Driver/DiagChecker.cpp
@@ -93,28 +93,29 @@
                               DiagList &ExpectedErrors,
                               DiagList &ExpectedWarnings,
                               DiagList &ExpectedNotes) {
-  // Return comments as tokens, this is how we find expected diagnostics.
-  PP.SetCommentRetentionState(true, 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);
+  // 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.
+  RawLex.SetCommentRetentionState(true);
+
   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 @@
                       Tok.getLocation(), ExpectedNoteStr);
     }
   } while (Tok.isNot(tok::eof));
-
-  PP.SetCommentRetentionState(false, false);
 }
 
 /// PrintProblem - This takes a diagnostic map of the delta between expected and
diff --git a/test/Driver/env-include-paths.c b/test/Driver/env-include-paths.c
index ced2431..11876c3 100644
--- a/test/Driver/env-include-paths.c
+++ b/test/Driver/env-include-paths.c
@@ -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
@@ -12,16 +11,11 @@
 
 #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
