]> granicus.if.org Git - clang/commitdiff
Fix a lame regression in IR gen for C++ delete expressions. PR5102
authorDouglas Gregor <dgregor@apple.com>
Thu, 1 Oct 2009 05:49:51 +0000 (05:49 +0000)
committerDouglas Gregor <dgregor@apple.com>
Thu, 1 Oct 2009 05:49:51 +0000 (05:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83195 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGCXXExpr.cpp
test/CodeGenCXX/delete.cpp

index 7dd6427752aeafc3693197cd859d37a9fbf0e820..2d62df6c58a44f1b618374e79fb4127a88eb1433 100644 (file)
@@ -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();
index 8367dd8945ae14d1f5731965e3593319720ccf41..9e3feefefeda7491573ddebffc21fe6126986f20 100644 (file)
@@ -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;
+}