summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-10-01 05:49:51 +0000
committerDouglas Gregor <dgregor@apple.com>2009-10-01 05:49:51 +0000
commite364e7bc2b6ff3323cb8e4bf4e3a44a71eb04944 (patch)
tree2d60954d403340d8736436b2597b84c3f346d444
parentd846fbf20da2efb5ba861a27ca4672bcea564b82 (diff)
downloadbcm5719-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.cpp2
-rw-r--r--clang/test/CodeGenCXX/delete.cpp12
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;
+}
OpenPOWER on IntegriCloud