diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-02-29 00:00:28 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-02-29 00:00:28 +0000 |
commit | 576cbd03b4e1aaddf28caec97fb6146dc070da8c (patch) | |
tree | a30ee09bd78174fdb54050e3c39d9a6c013cb64f /clang/test | |
parent | 617f84ddbd2e5c5b8c0504d923b6c4e539c35b9b (diff) | |
download | bcm5719-llvm-576cbd03b4e1aaddf28caec97fb6146dc070da8c.tar.gz bcm5719-llvm-576cbd03b4e1aaddf28caec97fb6146dc070da8c.zip |
Make sure list-initialization of arrays works correctly in explicit type conversions. PR12121.
llvm-svn: 151674
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/CodeGenCXX/cxx0x-initializer-array.cpp | 10 | ||||
-rw-r--r-- | clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp | 14 |
2 files changed, 24 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp b/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp new file mode 100644 index 00000000000..b773178e6b8 --- /dev/null +++ b/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -std=c++11 -S -emit-llvm -o - %s | FileCheck %s + +struct A { int a[1]; }; +typedef A x[]; +int f() { + x{{{1}}}; + // CHECK: define i32 @_Z1fv + // CHECK: store i32 1 + // (It's okay if the output changes here, as long as we don't crash.) +} diff --git a/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp b/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp index 48888d0eb0b..801a82f5706 100644 --- a/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp +++ b/clang/test/SemaCXX/cxx0x-initializer-aggregates.cpp @@ -73,3 +73,17 @@ namespace aggregate { struct C { int a[2]; C():a({1, 2}) { } }; // expected-error {{parenthesized initialization of a member array is a GNU extension}} } + +namespace array_explicit_conversion { + typedef int test1[2]; + typedef int test2[]; + template<int x> struct A { int a[x]; }; // expected-error {{'a' declared as an array with a negative size}} + typedef A<1> test3[]; + typedef A<-1> test4[]; + void f() { + (void)test1{1}; + (void)test2{1}; + (void)test3{{{1}}}; + (void)test4{{{1}}}; // expected-note {{in instantiation of template class 'array_explicit_conversion::A<-1>' requested here}} + } +} |