diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-06-03 07:28:54 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-06-03 07:28:54 +0000 |
| commit | 6c3bbf42712e4b10d6f43edaee685a6abd45ed68 (patch) | |
| tree | f748aef5f60071b2e9a46cda20171097b2bb0e22 /clang/test/SemaCXX/new-delete-cxx0x.cpp | |
| parent | 076caf789760adb5a2d1028ad8357ce0e899ee87 (diff) | |
| download | bcm5719-llvm-6c3bbf42712e4b10d6f43edaee685a6abd45ed68.tar.gz bcm5719-llvm-6c3bbf42712e4b10d6f43edaee685a6abd45ed68.zip | |
PR11410: Extend diagnostic to cover all cases of aggregate initialization, not
just the extremely specific case of a trailing array element that couldn't be
initialized because the default constructor for the element type is deleted.
Also reword the diagnostic to better match our other context diagnostics and to
prepare for the implementation of core issue 1070.
llvm-svn: 210083
Diffstat (limited to 'clang/test/SemaCXX/new-delete-cxx0x.cpp')
| -rw-r--r-- | clang/test/SemaCXX/new-delete-cxx0x.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/clang/test/SemaCXX/new-delete-cxx0x.cpp b/clang/test/SemaCXX/new-delete-cxx0x.cpp index c404faba2a2..899cb4cda87 100644 --- a/clang/test/SemaCXX/new-delete-cxx0x.cpp +++ b/clang/test/SemaCXX/new-delete-cxx0x.cpp @@ -2,8 +2,8 @@ void ugly_news(int *ip) { // These are ill-formed according to one reading of C++98, and at the least - // have undefined behavior. But they're well-formed, and defined to throw - // std::bad_array_new_length, in C++11. + // have undefined behavior. + // FIXME: They're ill-formed in C++11. (void)new int[-1]; // expected-warning {{array size is negative}} (void)new int[2000000000]; // expected-warning {{array is too large}} } @@ -22,5 +22,12 @@ struct T { // expected-note 2 {{not viable}} void fn() { (void) new int[2] {1, 2}; (void) new S[2] {1, 2}; - (void) new T[2] {1, 2}; // expected-error {{no matching constructor}} + // C++11 [expr.new]p19: + // If the new-expression creates an object or an array of objects of class + // type, access and ambiguity control are done for the allocation function, + // the deallocation function (12.5), and the constructor (12.1). + // + // Note that this happens even if the array bound is constant and the + // initializer initializes every array element. + (void) new T[2] {1, 2}; // expected-error {{no matching constructor}} expected-note {{in implicit initialization of array element 2}} } |

