forked from OSchip/llvm-project
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
This commit is contained in:
parent
ba357296e7
commit
5b4288440d
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue