diff options
| author | Chandler Carruth <chandlerc@gmail.com> | 2010-05-17 23:51:52 +0000 |
|---|---|---|
| committer | Chandler Carruth <chandlerc@gmail.com> | 2010-05-17 23:51:52 +0000 |
| commit | 3b43338870aa4bef182afd4ce971eff48580a193 (patch) | |
| tree | 091938cc220e3af859749953be688711adf519e4 /clang/lib/Sema/AnalysisBasedWarnings.cpp | |
| parent | 96cdb1590e4df03700d7b10a78cb53ee6ae7dc8f (diff) | |
| download | bcm5719-llvm-3b43338870aa4bef182afd4ce971eff48580a193.tar.gz bcm5719-llvm-3b43338870aa4bef182afd4ce971eff48580a193.zip | |
Add a hack to silence warnings about failing to return from functions after
a temporary with a noreturn destructor has been created. Fixes PR6884 for now.
llvm-svn: 104000
Diffstat (limited to 'clang/lib/Sema/AnalysisBasedWarnings.cpp')
| -rw-r--r-- | clang/lib/Sema/AnalysisBasedWarnings.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp index 21dd40b32ee..448d16116a3 100644 --- a/clang/lib/Sema/AnalysisBasedWarnings.cpp +++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp @@ -167,6 +167,19 @@ static ControlFlowKind CheckFallThrough(AnalysisContext &AC) { } } } + // FIXME: Remove this hack once temporaries and their destructors are + // modeled correctly by the CFG. + if (CXXExprWithTemporaries *E = dyn_cast<CXXExprWithTemporaries>(S)) { + for (unsigned I = 0, N = E->getNumTemporaries(); I != N; ++I) { + const FunctionDecl *FD = E->getTemporary(I)->getDestructor(); + if (FD->hasAttr<NoReturnAttr>() || + FD->getType()->getAs<FunctionType>()->getNoReturnAttr()) { + NoReturnEdge = true; + HasFakeEdge = true; + break; + } + } + } // FIXME: Add noreturn message sends. if (NoReturnEdge == false) HasPlainEdge = true; |

