diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-11-02 23:04:16 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-11-02 23:04:16 +0000 |
commit | 10f939c3db0197962578feb7744ac2fd674c402f (patch) | |
tree | e0df54937260afcd6e987a37d6aa3f4ee5443b62 /clang/test | |
parent | 10317eaa28a2d20a8cc76db9aa80eea7b4345800 (diff) | |
download | bcm5719-llvm-10f939c3db0197962578feb7744ac2fd674c402f.tar.gz bcm5719-llvm-10f939c3db0197962578feb7744ac2fd674c402f.zip |
Don't build member initializers for zero-length or incomplete arrays,
and don't try to destroy them, either. Fixes
<rdar://problem/10228639>.
llvm-svn: 143584
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/CodeGenCXX/constructors.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/zero-length-arrays.cpp | 26 |
2 files changed, 26 insertions, 2 deletions
diff --git a/clang/test/CodeGenCXX/constructors.cpp b/clang/test/CodeGenCXX/constructors.cpp index ec7f06c868a..9e2da31f046 100644 --- a/clang/test/CodeGenCXX/constructors.cpp +++ b/clang/test/CodeGenCXX/constructors.cpp @@ -111,7 +111,5 @@ namespace test1 { B::B() {} // CHECK: define void @_ZN5test11BC2Ev( // CHECK: [[THIS:%.*]] = load [[B:%.*]]** - // CHECK-NEXT: [[A:%.*]] = getelementptr inbounds [[B:%.*]]* [[THIS]], i32 0, i32 1 - // CHECK-NEXT: [[BEGIN:%.*]] = getelementptr inbounds [0 x {{%.*}}]* [[A]], i32 0, i32 0 // CHECK-NEXT: ret void } diff --git a/clang/test/SemaCXX/zero-length-arrays.cpp b/clang/test/SemaCXX/zero-length-arrays.cpp new file mode 100644 index 00000000000..05ded4ad9b3 --- /dev/null +++ b/clang/test/SemaCXX/zero-length-arrays.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +// <rdar://problem/10228639> +class Foo { + ~Foo(); + Foo(const Foo&); +public: + Foo(int); +}; + +class Bar { + int foo_count; + Foo foos[0]; + Foo foos2[0][2]; + Foo foos3[2][0]; + +public: + Bar(): foo_count(0) { } + ~Bar() { } +}; + +void testBar() { + Bar b; + Bar b2(b); + b = b2; +} |