[cfe-commits] r91687 - in /cfe/trunk: lib/CodeGen/CGExprCXX.cpp test/CodeGenCXX/dynamic-cast.cpp

Anders Carlsson andersca at mac.com
Fri Dec 18 06:55:05 PST 2009


Author: andersca
Date: Fri Dec 18 08:55:04 2009
New Revision: 91687

URL: http://llvm.org/viewvc/llvm-project?rev=91687&view=rev
Log:
Fix regression I introduced when dynamic_cast-ing to a reference type.

Added:
    cfe/trunk/test/CodeGenCXX/dynamic-cast.cpp
Modified:
    cfe/trunk/lib/CodeGen/CGExprCXX.cpp

Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=91687&r1=91686&r2=91687&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Fri Dec 18 08:55:04 2009
@@ -501,7 +501,7 @@
     SrcTy = SrcTy->getPointeeType();
   SrcTy = SrcTy.getUnqualifiedType();
 
-  if (DestTy->isPointerType())
+  if (DestTy->isPointerType() || DestTy->isReferenceType())
     DestTy = DestTy->getPointeeType();
   DestTy = DestTy.getUnqualifiedType();
 

Added: cfe/trunk/test/CodeGenCXX/dynamic-cast.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/dynamic-cast.cpp?rev=91687&view=auto

==============================================================================
--- cfe/trunk/test/CodeGenCXX/dynamic-cast.cpp (added)
+++ cfe/trunk/test/CodeGenCXX/dynamic-cast.cpp Fri Dec 18 08:55:04 2009
@@ -0,0 +1,8 @@
+// RUN: %clang_cc1 %s -emit-llvm-only
+
+struct A { virtual void f(); };
+struct B : A { };
+
+const B& f(A *a) {
+  return dynamic_cast<const B&>(*a);
+}





More information about the cfe-commits mailing list