1f4a2713aSLionel Sambuc // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 -triple=i686-pc-linux-gnu 2f4a2713aSLionel Sambuc ugly_news(int * ip)3f4a2713aSLionel Sambucvoid 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 Sambucvoid 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