Author: george.karpenkov Date: Tue Jan 23 11:28:52 2018 New Revision: 323245
URL: http://llvm.org/viewvc/llvm-project?rev=323245&view=rev Log: [analyzer] Show full analyzer invocation for reproducibility in HTML reports Analyzing problems which appear in scan-build results can be very difficult, as after the launch no exact invocation is stored, and it's super-hard to launch the debugger. With this patch, the exact analyzer invocation appears in the footer, and can be copied to debug/check reproducibility/etc. rdar://35980230 Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/lib/Rewrite/HTMLRewrite.cpp cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h?rev=323245&r1=323244&r2=323245&view=diff ============================================================================== --- cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h (original) +++ cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h Tue Jan 23 11:28:52 2018 @@ -139,6 +139,10 @@ public: AnalysisPurgeMode AnalysisPurgeOpt; std::string AnalyzeSpecificFunction; + + /// Store full compiler invocation for reproducible instructions in the + /// generated report. + std::string FullCompilerInvocation; /// \brief The maximum number of times the analyzer visits a block. unsigned maxBlockVisitOnPath; Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=323245&r1=323244&r2=323245&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Jan 23 11:28:52 2018 @@ -305,6 +305,14 @@ static bool ParseAnalyzerArgs(AnalyzerOp } } + llvm::raw_string_ostream os(Opts.FullCompilerInvocation); + for (unsigned i=0; i<Args.getNumInputArgStrings(); i++) { + if (i != 0) + os << " "; + os << Args.getArgString(i); + } + os.flush(); + return Success; } Modified: cfe/trunk/lib/Rewrite/HTMLRewrite.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Rewrite/HTMLRewrite.cpp?rev=323245&r1=323244&r2=323245&view=diff ============================================================================== --- cfe/trunk/lib/Rewrite/HTMLRewrite.cpp (original) +++ cfe/trunk/lib/Rewrite/HTMLRewrite.cpp Tue Jan 23 11:28:52 2018 @@ -387,6 +387,26 @@ td.rowname { color:#444444; padding-right:2ex; } + +/* Hidden text. */ +input.spoilerhider + label { + cursor: pointer; + text-decoration: underline; + display: block; +} +input.spoilerhider { + display: none; +} +input.spoilerhider ~ .spoiler { + overflow: hidden; + margin: 10px auto 0; + height: 0; + opacity: 0; +} +input.spoilerhider:checked + label + .spoiler{ + height: auto; + opacity: 1; +} </style> </head> <body>)<<<"; Modified: cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp?rev=323245&r1=323244&r2=323245&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp Tue Jan 23 11:28:52 2018 @@ -406,6 +406,12 @@ void HTMLDiagnostics::FinalizeHTML(const <h3>Annotated Source Code</h3> <p>Press <a href="#" onclick="toggleHelp(); return false;">'?'</a> to see keyboard shortcuts</p> +<input type="checkbox" class="spoilerhider" id="showinvocation" /> +<label for="showinvocation" >Show analyzer invocation</label> +<div class="spoiler">clang -cc1 )<<<"; + os << html::EscapeText(AnalyzerOpts.FullCompilerInvocation); + os << R"<<<( +</div> <div id='tooltiphint' hidden="true"> <p>Keyboard shortcuts: </p> <ul> @@ -416,7 +422,6 @@ void HTMLDiagnostics::FinalizeHTML(const <a href="#" onclick="toggleHelp(); return false;">Close</a> </div> )<<<"; - R.InsertTextBefore(SMgr.getLocForStartOfFile(FID), os.str()); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits