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