From 310a09e0beec2acab91dae58c91254e2928032a5 Mon Sep 17 00:00:00 2001 From: Richard Trieu Date: Fri, 12 Sep 2014 22:47:58 +0000 Subject: [PATCH] Check delegating constructors for using uninitialized fields. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@217716 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclCXX.cpp | 2 ++ test/SemaCXX/uninitialized.cpp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 858f2c70b0..006a3c49d7 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -3623,6 +3623,8 @@ Sema::SetDelegatingInitializer(CXXConstructorDecl *Constructor, DelegatingCtorDecls.push_back(Constructor); + DiagnoseUninitializedFields(*this, Constructor); + return false; } diff --git a/test/SemaCXX/uninitialized.cpp b/test/SemaCXX/uninitialized.cpp index 8d0338c3d8..bb2ecabfc8 100644 --- a/test/SemaCXX/uninitialized.cpp +++ b/test/SemaCXX/uninitialized.cpp @@ -861,3 +861,19 @@ namespace base_class { C() : A(y = 4), x(y) {} }; } + +namespace delegating_constructor { + struct A { + A(int); + A(int&, int); + + A(char (*)[1]) : A(x) {} + // expected-warning@-1 {{field 'x' is uninitialized when used here}} + A(char (*)[2]) : A(x, x) {} + // expected-warning@-1 {{field 'x' is uninitialized when used here}} + + A(char (*)[3]) : A(x, 0) {} + + int x; + }; +} -- 2.40.0