[cfe-commits] r139011 - in /cfe/trunk/lib: AST/StmtDumper.cpp Sema/SemaCXXCast.cpp

Eli Friedman eli.friedman at gmail.com
Fri Sep 2 10:38:59 PDT 2011


Author: efriedma
Date: Fri Sep  2 12:38:59 2011
New Revision: 139011

URL: http://llvm.org/viewvc/llvm-project?rev=139011&view=rev
Log:
Make StmtDumper::VisitCXXFunctionalCastExpr dump the attached cast kind.  Fix the cast kind for a cast from floating-point to enum type.  (The difference isn't actually visible, but that's just because IRGen is overly forgiving.)  Per report by Enea Zaffanella on cfe-dev.


Modified:
    cfe/trunk/lib/AST/StmtDumper.cpp
    cfe/trunk/lib/Sema/SemaCXXCast.cpp

Modified: cfe/trunk/lib/AST/StmtDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtDumper.cpp?rev=139011&r1=139010&r2=139011&view=diff
==============================================================================
--- cfe/trunk/lib/AST/StmtDumper.cpp (original)
+++ cfe/trunk/lib/AST/StmtDumper.cpp Fri Sep  2 12:38:59 2011
@@ -557,7 +557,8 @@
 
 void StmtDumper::VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *Node) {
   DumpExpr(Node);
-  OS << " functional cast to " << Node->getTypeAsWritten().getAsString();
+  OS << " functional cast to " << Node->getTypeAsWritten().getAsString()
+     << " <" << Node->getCastKindName() << ">";
 }
 
 void StmtDumper::VisitCXXConstructExpr(CXXConstructExpr *Node) {

Modified: cfe/trunk/lib/Sema/SemaCXXCast.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCXXCast.cpp?rev=139011&r1=139010&r2=139011&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaCXXCast.cpp (original)
+++ cfe/trunk/lib/Sema/SemaCXXCast.cpp Fri Sep  2 12:38:59 2011
@@ -815,11 +815,12 @@
   // The same goes for reverse floating point promotion/conversion and
   // floating-integral conversions. Again, only floating->enum is relevant.
   if (DestType->isEnumeralType()) {
-    if (SrcType->isComplexType() || SrcType->isVectorType()) {
-      // Fall through - these cannot be converted.
-    } else if (SrcType->isArithmeticType() || SrcType->isEnumeralType()) {
+    if (SrcType->isIntegralOrEnumerationType()) {
       Kind = CK_IntegralCast;
       return TC_Success;
+    } else if (SrcType->isRealFloatingType())   {
+      Kind = CK_FloatingToIntegral;
+      return TC_Success;
     }
   }
 





More information about the cfe-commits mailing list