Skip to content
Snippets Groups Projects
Commit 5b428844 authored by Ted Kremenek's avatar Ted Kremenek
Browse files

Add temporary hack to -Wuninitialize to create a separate CFG (for C++ code)...

Add temporary hack to -Wuninitialize to create a separate CFG (for C++ code) that doesn't include implicit dtors.

Implicit dtors confuse the ad hoc path-sensitivity of UninitializedValuesV2.cpp.  This isn't
the ideal solution, as it will directly impact compile time, but should significantly reduce
the noise of -Wuninitialized on some code bases.

This immediately "fixes" the false positive reported in PR 9063, although this
isn't the right fix in the long run.

llvm-svn: 124667
parent ba357296
No related branches found
No related tags found
No related merge requests found
......@@ -519,7 +519,24 @@ AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P,
if (Diags.getDiagnosticLevel(diag::warn_uninit_var, D->getLocStart())
!= Diagnostic::Ignored) {
if (CFG *cfg = AC.getCFG()) {
ASTContext &ctx = D->getASTContext();
llvm::OwningPtr<CFG> tmpCFG;
bool useAlternateCFG = false;
if (ctx.getLangOptions().CPlusPlus) {
// Temporary workaround: implicit dtors in the CFG can confuse
// the path-sensitivity in the uninitialized values analysis.
// For now create (if necessary) a separate CFG without implicit dtors.
// FIXME: We should not need to do this, as it results in multiple
// CFGs getting constructed.
CFG::BuildOptions B;
B.AddEHEdges = false;
B.AddImplicitDtors = false;
B.AddInitializers = true;
tmpCFG.reset(CFG::buildCFG(D, AC.getBody(), &ctx, B));
useAlternateCFG = true;
}
CFG *cfg = useAlternateCFG ? tmpCFG.get() : AC.getCFG();
if (cfg) {
UninitValsDiagReporter reporter(S);
runUninitializedVariablesAnalysis(*cast<DeclContext>(D), *cfg, AC,
reporter);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment