[cfe-commits] r131759 - in /cfe/trunk: lib/Sema/SemaDeclCXX.cpp test/SemaCXX/value-initialization.cpp
Sean Hunt
scshunt at csclub.uwaterloo.ca
Fri May 20 14:43:47 PDT 2011
Author: coppro
Date: Fri May 20 16:43:47 2011
New Revision: 131759
URL: http://llvm.org/viewvc/llvm-project?rev=131759&view=rev
Log:
Add a missing case for default constructor deletion.
This case is tested by the fact that the modified test produces
significatly worse diagnostics. That's on the list.
Modified:
cfe/trunk/lib/Sema/SemaDeclCXX.cpp
cfe/trunk/test/SemaCXX/value-initialization.cpp
Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=131759&r1=131758&r2=131759&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Fri May 20 16:43:47 2011
@@ -3433,6 +3433,11 @@
// This is technically non-conformant, but sanity demands it.
continue;
}
+ } else if (!Union && FieldType.isConstQualified()) {
+ // -- any non-variant non-static data member of const-qualified type (or
+ // array thereof) with no brace-or-equal-initializer does not have a
+ // user-provided default constructor
+ return true;
}
InitializedEntity MemberEntity =
Modified: cfe/trunk/test/SemaCXX/value-initialization.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/value-initialization.cpp?rev=131759&r1=131758&r2=131759&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/value-initialization.cpp (original)
+++ cfe/trunk/test/SemaCXX/value-initialization.cpp Fri May 20 16:43:47 2011
@@ -1,12 +1,11 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++0x
-struct A { // expected-error {{implicit default constructor for 'A' must explicitly initialize the const member 'i'}} \
- // expected-warning{{struct 'A' does not declare any constructor to initialize its non-modifiable members}}
- const int i; // expected-note {{declared here}} \
- // expected-note{{const member 'i' will never be initialized}}
+struct A { //expected-note {{marked deleted here}} \
+ // expected-warning {{does not declare any constructor to initialize}}
+ const int i; // expected-note{{const member 'i' will never be initialized}}
virtual void f() { }
};
int main () {
- (void)A(); // expected-note {{first required here}}
+ (void)A(); // expected-error {{call to deleted constructor}}
}
More information about the cfe-commits
mailing list