Index: clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp =================================================================== --- clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -493,13 +493,11 @@ } } -static bool isBisonFile(ASTContext &C) { +static bool fileContainsString(StringRef Substring, ASTContext &C) { const SourceManager &SM = C.getSourceManager(); FileID FID = SM.getMainFileID(); StringRef Buffer = SM.getBufferOrFake(FID).getBuffer(); - if (Buffer.startswith("/* A Bison parser, made by")) - return true; - return false; + return Buffer.contains(Substring); } void AnalysisConsumer::runAnalysisOnTranslationUnit(ASTContext &C) { @@ -552,8 +550,10 @@ if (Diags.hasErrorOccurred() || Diags.hasFatalErrorOccurred()) return; - if (isBisonFile(C)) { + if (fileContainsString("/* A Bison parser, made by", C)) { reportAnalyzerProgress("Skipping bison-generated file\n"); + } else if (fileContainsString("/* A lexical scanner generated by flex", C)) { + reportAnalyzerProgress("Skipping flex-generated file\n"); } else if (Opts->DisableAllCheckers) { // Don't analyze if the user explicitly asked for no checks to be performed Index: clang/test/Analysis/flexignore.c =================================================================== --- /dev/null +++ clang/test/Analysis/flexignore.c @@ -0,0 +1,10 @@ +// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify %s +// +// expected-no-diagnostics + +/* A lexical scanner generated by flex */ + +void clang_analyzer_warnIfReached(); +void foo() { + clang_analyzer_warnIfReached(); // no-warning +} Index: clang/test/Analysis/yaccignore.c =================================================================== --- clang/test/Analysis/yaccignore.c +++ clang/test/Analysis/yaccignore.c @@ -1,13 +1,10 @@ -/* A Bison parser, made by GNU Bison 1.875. */ +// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -verify %s +// +// expected-no-diagnostics -// RUN: rm -rf %t.plist -// RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-output=plist -o %t.plist -verify %s -// RUN: FileCheck --input-file=%t.plist %s +/* A Bison parser, made by GNU Bison 1.875. */ -// expected-no-diagnostics -int foo() { - int *x = 0; - return *x; // no-warning +void clang_analyzer_warnIfReached(); +void foo() { + clang_analyzer_warnIfReached(); // no-warning } - -// CHECK: diagnostics