diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-06-11 00:31:00 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-06-11 00:31:00 +0000 |
commit | d88b44d4447946a149b7d6b22fc7a1f7962640bd (patch) | |
tree | 602a6c86a9231f395031a4b1dae30af77a5843e5 | |
parent | 1a2120312bbfb938a9bf58581b56dddfba7e764b (diff) | |
download | bcm5719-llvm-d88b44d4447946a149b7d6b22fc7a1f7962640bd.tar.gz bcm5719-llvm-d88b44d4447946a149b7d6b22fc7a1f7962640bd.zip |
PR19996: don't crash if -Wuninitialized sees a c++1y lambda init-capture.
llvm-svn: 210615
-rw-r--r-- | clang/lib/Analysis/UninitializedValues.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/uninit-variables.cpp | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/Analysis/UninitializedValues.cpp b/clang/lib/Analysis/UninitializedValues.cpp index 4b8a59c398c..f5c786ac345 100644 --- a/clang/lib/Analysis/UninitializedValues.cpp +++ b/clang/lib/Analysis/UninitializedValues.cpp @@ -34,7 +34,7 @@ using namespace clang; static bool isTrackedVar(const VarDecl *vd, const DeclContext *dc) { if (vd->isLocalVarDecl() && !vd->hasGlobalStorage() && - !vd->isExceptionVariable() && + !vd->isExceptionVariable() && !vd->isInitCapture() && vd->getDeclContext() == dc) { QualType ty = vd->getType(); return ty->isScalarType() || ty->isVectorType(); diff --git a/clang/test/SemaCXX/uninit-variables.cpp b/clang/test/SemaCXX/uninit-variables.cpp index 687bfd2638d..4dcd34858ab 100644 --- a/clang/test/SemaCXX/uninit-variables.cpp +++ b/clang/test/SemaCXX/uninit-variables.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -Wuninitialized -fsyntax-only -fcxx-exceptions %s -verify +// RUN: %clang_cc1 -fsyntax-only -Wuninitialized -fsyntax-only -fcxx-exceptions %s -verify -std=c++1y // Stub out types for 'typeid' to work. namespace std { class type_info {}; } @@ -147,3 +147,6 @@ int test_const_ref() { consume_const_ref(n); return n; // expected-warning {{uninitialized when used here}} } + +// Don't crash here. +auto PR19996 = [a=0]{int t; return a;}; |