diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-10-01 05:49:51 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-10-01 05:49:51 +0000 |
| commit | e364e7bc2b6ff3323cb8e4bf4e3a44a71eb04944 (patch) | |
| tree | 2d60954d403340d8736436b2597b84c3f346d444 | |
| parent | d846fbf20da2efb5ba861a27ca4672bcea564b82 (diff) | |
| download | bcm5719-llvm-e364e7bc2b6ff3323cb8e4bf4e3a44a71eb04944.tar.gz bcm5719-llvm-e364e7bc2b6ff3323cb8e4bf4e3a44a71eb04944.zip | |
Fix a lame regression in IR gen for C++ delete expressions. PR5102
llvm-svn: 83195
| -rw-r--r-- | clang/lib/CodeGen/CGCXXExpr.cpp | 2 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/delete.cpp | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGCXXExpr.cpp b/clang/lib/CodeGen/CGCXXExpr.cpp index 7dd6427752a..2d62df6c58a 100644 --- a/clang/lib/CodeGen/CGCXXExpr.cpp +++ b/clang/lib/CodeGen/CGCXXExpr.cpp @@ -246,6 +246,8 @@ void CodeGenFunction::EmitCXXDeleteExpr(const CXXDeleteExpr *E) { if (ICE->getCastKind() != CastExpr::CK_UserDefinedConversion && ICE->getType()->isVoidPointerType()) Arg = ICE->getSubExpr(); + else + break; } QualType DeleteTy = Arg->getType()->getAs<PointerType>()->getPointeeType(); diff --git a/clang/test/CodeGenCXX/delete.cpp b/clang/test/CodeGenCXX/delete.cpp index 8367dd8945a..9e3feefefed 100644 --- a/clang/test/CodeGenCXX/delete.cpp +++ b/clang/test/CodeGenCXX/delete.cpp @@ -23,3 +23,15 @@ void t4(T *t) { // RUN: grep "call void @_ZN1TD1Ev" %t | count 1 delete t; } + +// PR5102 +template <typename T> +class A { + operator T *() const; +}; + +void f() { + A<char*> a; + + delete a; +} |

