Generate constructor for value-initialization cases, even if the 
implementation technique doesn't call the constructor at that point.
DR302. Fixes pr5296.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@85249 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/SemaCXX/value-initialization.cpp b/test/SemaCXX/value-initialization.cpp
new file mode 100644
index 0000000..6b99297
--- /dev/null
+++ b/test/SemaCXX/value-initialization.cpp
@@ -0,0 +1,23 @@
+// RUN: clang-cc -fsyntax-only -verify %s -std=c++0x
+
+struct A {
+      ~A();
+      const int i;	// expected-note {{declared at}}
+};
+
+struct B {
+      // B is a non-POD with no user-written constructor.
+      // It has a nontrivial generated constructor.
+      const int i[12];	// expected-note {{declared at}}
+      A a;
+};
+
+int main () {
+      // Value-initializing a "B" doesn't call the default constructor for
+      // "B"; it value-initializes the members of B.  Therefore it shouldn't
+      // cause an error on generation of the default constructor for the
+      // following:
+      new B();	// expected-error {{cannot define the implicit default constructor for 'struct B', because const member 'i'}}
+      (void)B();
+      (void)A(); // expected-error {{cannot define the implicit default constructor for 'struct A', because const member 'i'}}
+}