1f4a2713aSLionel Sambuc // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 -triple=i686-pc-linux-gnu
2f4a2713aSLionel Sambuc 
ugly_news(int * ip)3f4a2713aSLionel Sambuc void ugly_news(int *ip) {
4f4a2713aSLionel Sambuc   // These are ill-formed according to one reading of C++98, and at the least
5*0a6a1f1dSLionel Sambuc   // have undefined behavior.
6*0a6a1f1dSLionel Sambuc   // FIXME: They're ill-formed in C++11.
7f4a2713aSLionel Sambuc   (void)new int[-1]; // expected-warning {{array size is negative}}
8f4a2713aSLionel Sambuc   (void)new int[2000000000]; // expected-warning {{array is too large}}
9f4a2713aSLionel Sambuc }
10f4a2713aSLionel Sambuc 
11f4a2713aSLionel Sambuc 
12f4a2713aSLionel Sambuc struct S {
13f4a2713aSLionel Sambuc   S(int);
14f4a2713aSLionel Sambuc   S();
15f4a2713aSLionel Sambuc   ~S();
16f4a2713aSLionel Sambuc };
17f4a2713aSLionel Sambuc 
18f4a2713aSLionel Sambuc struct T { // expected-note 2 {{not viable}}
19f4a2713aSLionel Sambuc   T(int); // expected-note {{not viable}}
20f4a2713aSLionel Sambuc };
21f4a2713aSLionel Sambuc 
fn()22f4a2713aSLionel Sambuc void fn() {
23f4a2713aSLionel Sambuc   (void) new int[2] {1, 2};
24f4a2713aSLionel Sambuc   (void) new S[2] {1, 2};
25*0a6a1f1dSLionel Sambuc   // C++11 [expr.new]p19:
26*0a6a1f1dSLionel Sambuc   //   If the new-expression creates an object or an array of objects of class
27*0a6a1f1dSLionel Sambuc   //   type, access and ambiguity control are done for the allocation function,
28*0a6a1f1dSLionel Sambuc   //   the deallocation function (12.5), and the constructor (12.1).
29*0a6a1f1dSLionel Sambuc   //
30*0a6a1f1dSLionel Sambuc   // Note that this happens even if the array bound is constant and the
31*0a6a1f1dSLionel Sambuc   // initializer initializes every array element.
32*0a6a1f1dSLionel Sambuc   (void) new T[2] {1, 2}; // expected-error {{no matching constructor}} expected-note {{in implicit initialization of array element 2}}
33f4a2713aSLionel Sambuc }
34