diff options
author | David Blaikie <dblaikie@gmail.com> | 2012-03-10 23:40:02 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2012-03-10 23:40:02 +0000 |
commit | 426d6ca163e20187761aa55a67797dac51508d0d (patch) | |
tree | 19b73509b32d245ee47456428a3bcce668900051 /test/CXX | |
parent | dc72dc806cfa48ae7dbe32eb811a8151feec982d (diff) |
Fix crash & accepts-invalid for array of arrays of user defined type.
Test case/other help by Richard Smith.
Code review by John McCall.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152519 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CXX')
-rw-r--r-- | test/CXX/expr/expr.unary/expr.new/p17-crash.cpp | 14 | ||||
-rw-r--r-- | test/CXX/expr/expr.unary/expr.new/p17.cpp | 16 |
2 files changed, 30 insertions, 0 deletions
diff --git a/test/CXX/expr/expr.unary/expr.new/p17-crash.cpp b/test/CXX/expr/expr.unary/expr.new/p17-crash.cpp new file mode 100644 index 0000000000..27b915e959 --- /dev/null +++ b/test/CXX/expr/expr.unary/expr.new/p17-crash.cpp @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -emit-llvm-only %s + +// this used to crash due to templ<int>'s dtor not being marked as used by the +// new expression in func() +struct non_trivial { + non_trivial() {} + ~non_trivial() {} +}; +template < typename T > class templ { + non_trivial n; +}; +void func() { + new templ<int>[1][1]; +} diff --git a/test/CXX/expr/expr.unary/expr.new/p17.cpp b/test/CXX/expr/expr.unary/expr.new/p17.cpp new file mode 100644 index 0000000000..0d108eb6a8 --- /dev/null +++ b/test/CXX/expr/expr.unary/expr.new/p17.cpp @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +class ctor { + ctor(); // expected-note{{implicitly declared private here}} +}; + +class dtor { + ~dtor(); // expected-note 3 {{implicitly declared private here}} +}; + +void test() { + new ctor[0]; // expected-error{{calling a private constructor of class 'ctor'}} + new dtor[0]; // expected-error{{calling a private destructor of class 'dtor'}} + new dtor[3]; // expected-error{{calling a private destructor of class 'dtor'}} + new dtor[3][3]; // expected-error{{calling a private destructor of class 'dtor'}} +} |