]> granicus.if.org Git - clang/commitdiff
Add a new placeholder type to represent "unbridged"
authorJohn McCall <rjmccall@apple.com>
Mon, 17 Oct 2011 18:09:15 +0000 (18:09 +0000)
committerJohn McCall <rjmccall@apple.com>
Mon, 17 Oct 2011 18:09:15 +0000 (18:09 +0000)
casts in ARC.

No semantic analysis yet.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142208 91177308-0d34-0410-b5e6-96231b3b80d8

17 files changed:
include/clang/AST/ASTContext.h
include/clang/AST/Type.h
include/clang/Serialization/ASTBitCodes.h
lib/AST/ASTContext.cpp
lib/AST/ASTImporter.cpp
lib/AST/ItaniumMangle.cpp
lib/AST/MicrosoftMangle.cpp
lib/AST/Type.cpp
lib/AST/TypeLoc.cpp
lib/Analysis/PrintfFormatString.cpp
lib/CodeGen/CGDebugInfo.cpp
lib/CodeGen/CGRTTI.cpp
lib/CodeGen/CodeGenTypes.cpp
lib/Serialization/ASTCommon.cpp
lib/Serialization/ASTReader.cpp
tools/libclang/CIndex.cpp
tools/libclang/CIndexUSRs.cpp

index c4ffac5341e7b297d5d9ecdde2ad8d22268e4229..fff1ddc96d30ac35434acb2c76397870bc75323c 100644 (file)
@@ -497,6 +497,7 @@ public:
   CanQualType FloatComplexTy, DoubleComplexTy, LongDoubleComplexTy;
   CanQualType VoidPtrTy, NullPtrTy;
   CanQualType DependentTy, OverloadTy, BoundMemberTy, UnknownAnyTy;
+  CanQualType ARCUnbridgedCastTy;
   CanQualType ObjCBuiltinIdTy, ObjCBuiltinClassTy, ObjCBuiltinSelTy;
 
   // Types for deductions in C++0x [stmt.ranged]'s desugaring. Built on demand.
index 5a1200c477714f727afc52bf9fe7f2dcacfeb4d6..80686a5785562b08f39b0071d027d68c74d40851 100644 (file)
@@ -1751,7 +1751,12 @@ public:
     /// like debuggers that don't know what type to give something.
     /// Only a small number of operations are valid on expressions of
     /// unknown type, most notably explicit casts.
-    UnknownAny
+    UnknownAny,
+
+    /// The type of a cast which, in ARC, would normally require a
+    /// __bridge, but which might be okay depending on the immediate
+    /// context.
+    ARCUnbridgedCast
   };
 
 public:
index dc4d05c6f346fe8f01bfc5691ba637a7a4df4036..e7f126514b8a1fdbd2a87a491a6208d844f26046 100644 (file)
@@ -554,7 +554,9 @@ namespace clang {
       /// \brief The "auto &&" deduction type.
       PREDEF_TYPE_AUTO_RREF_DEDUCT = 32,
       /// \brief The OpenCL 'half' / ARM NEON __fp16 type.
-      PREDEF_TYPE_HALF_ID       = 33
+      PREDEF_TYPE_HALF_ID       = 33,
+      /// \brief ARC's unbridged-cast placeholder type.
+      PREDEF_TYPE_ARC_UNBRIDGED_CAST = 34
     };
 
     /// \brief The number of predefined type IDs that are reserved for
index 462428086dddc4f7af71a1f2b96a599492db97a4..4fbb5408dc0d2dca2b90c2e932744e314a273bcb 100644 (file)
@@ -464,6 +464,9 @@ void ASTContext::InitBuiltinTypes(const TargetInfo &Target) {
   // "any" type; useful for debugger-like clients.
   InitBuiltinType(UnknownAnyTy,        BuiltinType::UnknownAny);
 
+  // Placeholder type for unbridged ARC casts.
+  InitBuiltinType(ARCUnbridgedCastTy,  BuiltinType::ARCUnbridgedCast);
+
   // C99 6.2.5p11.
   FloatComplexTy      = getComplexType(FloatTy);
   DoubleComplexTy     = getComplexType(DoubleTy);
index af66b04c3ad714a64ef03fb48fdca56f4819c49b..ae2b8903f24e00437d87d759830c6149d9b1e2bd 100644 (file)
@@ -1387,6 +1387,8 @@ QualType ASTNodeImporter::VisitBuiltinType(const BuiltinType *T) {
   case BuiltinType::Dependent: return Importer.getToContext().DependentTy;
   case BuiltinType::UnknownAny: return Importer.getToContext().UnknownAnyTy;
   case BuiltinType::BoundMember: return Importer.getToContext().BoundMemberTy;
+  case BuiltinType::ARCUnbridgedCast:
+    return Importer.getToContext().ARCUnbridgedCastTy;
 
   case BuiltinType::ObjCId:
     // FIXME: Make sure that the "to" context supports Objective-C!
index acedf70f29c5236c6e7361363cc69aef07812f4b..f7af57ef661df601bbe6840ba75c730f1a896f07 100644 (file)
@@ -1739,6 +1739,7 @@ void CXXNameMangler::mangleType(const BuiltinType *T) {
   case BuiltinType::Dependent:
   case BuiltinType::BoundMember:
   case BuiltinType::UnknownAny:
+  case BuiltinType::ARCUnbridgedCast:
     llvm_unreachable("mangling a placeholder type");
     break;
   case BuiltinType::ObjCId: Out << "11objc_object"; break;
index 1515db49fe3c8c077bb58f4aed151c9c670dc473..98fc2d52cb583737faec9e5021f7b4f7a0ffb99d 100644 (file)
@@ -705,6 +705,7 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T) {
   case BuiltinType::Dependent:
   case BuiltinType::UnknownAny:
   case BuiltinType::BoundMember:
+  case BuiltinType::ARCUnbridgedCast:
     llvm_unreachable(
            "Overloaded and dependent types shouldn't get to name mangling");
   case BuiltinType::ObjCId: Out << "PAUobjc_object@@"; break;
index 44eeec004f5744a476f449407c78d328f648c6ac..5b7daadd986b4030c5b59aa41e957ae9d18d836a 100644 (file)
@@ -1495,6 +1495,7 @@ const char *BuiltinType::getName(const PrintingPolicy &Policy) const {
   case BoundMember:       return "<bound member function type>";
   case Dependent:         return "<dependent type>";
   case UnknownAny:        return "<unknown type>";
+  case ARCUnbridgedCast:  return "<ARC unbridged cast type>";
   case ObjCId:            return "id";
   case ObjCClass:         return "Class";
   case ObjCSel:           return "SEL";
index 8e8b227e1f0987d1a7046f9fca78bc41ccd794cc..2724e8c46adaca08217f49d6690131df4bb6a432 100644 (file)
@@ -237,6 +237,7 @@ TypeSpecifierType BuiltinTypeLoc::getWrittenTypeSpec() const {
     case BuiltinType::Dependent:
     case BuiltinType::BoundMember:
     case BuiltinType::UnknownAny:
+    case BuiltinType::ARCUnbridgedCast:
     case BuiltinType::ObjCId:
     case BuiltinType::ObjCClass:
     case BuiltinType::ObjCSel:
index 46ece65a42e715cb686f0c309084362ac7fdcc3c..0c0e343331474b1af7fba1cfcb8465f581a61f8b 100644 (file)
@@ -400,6 +400,7 @@ bool PrintfSpecifier::fixType(QualType QT) {
   case BuiltinType::Overload:
   case BuiltinType::BoundMember:
   case BuiltinType::UnknownAny:
+  case BuiltinType::ARCUnbridgedCast:
     // Misc other stuff which doesn't make sense here.
     return false;
 
index c7a9b407d264477973391c9e7abd4017efee36b0..b894326bd8832f1d6f63871a7d5da4c30a9d7368 100644 (file)
@@ -329,6 +329,8 @@ llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT) {
     llvm_unreachable("Unexpected builtin type BoundMember");
   case BuiltinType::UnknownAny:
     llvm_unreachable("Unexpected builtin type UnknownAny");
+  case BuiltinType::ARCUnbridgedCast:
+    llvm_unreachable("Unexpected builtin type ARCUnbridgedCast");
   case BuiltinType::NullPtr:
     return DBuilder.
       createNullPtrType(BT->getName(CGM.getContext().getLangOptions()));
index fbdb2984830b24bd96e3fb48703b7ac4e7fbdda2..c4526fc4cf7131c1c45865fcbdb2cdcb1cc5b952 100644 (file)
@@ -199,6 +199,7 @@ static bool TypeInfoIsInStandardLibrary(const BuiltinType *Ty) {
     case BuiltinType::Dependent:
     case BuiltinType::BoundMember:
     case BuiltinType::UnknownAny:
+    case BuiltinType::ARCUnbridgedCast:
       llvm_unreachable("asking for RRTI for a placeholder type!");
       
     case BuiltinType::ObjCId:
index e0d9218965809d4bd531999a546b8c5ae32bc4ca..3bb5d8a90fda13f47a543c2db18d4a2946f80a63 100644 (file)
@@ -372,6 +372,7 @@ llvm::Type *CodeGenTypes::ConvertType(QualType T) {
     case BuiltinType::Dependent:
     case BuiltinType::BoundMember:
     case BuiltinType::UnknownAny:
+    case BuiltinType::ARCUnbridgedCast:
       llvm_unreachable("Unexpected placeholder builtin type!");
       break;
     }
index 445e750834ebb8f4aeb4e53a2b05aef8cca884ba..1103dc0aff2743444b49b9db1ba1a8e90fb8049b 100644 (file)
@@ -54,6 +54,8 @@ serialization::TypeIdxFromBuiltin(const BuiltinType *BT) {
   case BuiltinType::BoundMember:ID = PREDEF_TYPE_BOUND_MEMBER;  break;
   case BuiltinType::Dependent:  ID = PREDEF_TYPE_DEPENDENT_ID;  break;
   case BuiltinType::UnknownAny: ID = PREDEF_TYPE_UNKNOWN_ANY;   break;
+  case BuiltinType::ARCUnbridgedCast:
+                                ID = PREDEF_TYPE_ARC_UNBRIDGED_CAST; break;
   case BuiltinType::ObjCId:     ID = PREDEF_TYPE_OBJC_ID;       break;
   case BuiltinType::ObjCClass:  ID = PREDEF_TYPE_OBJC_CLASS;    break;
   case BuiltinType::ObjCSel:    ID = PREDEF_TYPE_OBJC_SEL;      break;
index dc7829f3e94c6094dd41aa18aefe6c8d25045b9d..3a8e5036a8dfee3a7742ea2c1fc9405998ab9db3 100644 (file)
@@ -3839,6 +3839,11 @@ QualType ASTReader::GetType(TypeID ID) {
     case PREDEF_TYPE_AUTO_RREF_DEDUCT: 
       T = Context.getAutoRRefDeductType(); 
       break;
+
+    case PREDEF_TYPE_ARC_UNBRIDGED_CAST:
+      T = Context.ARCUnbridgedCastTy;
+      break;
+
     }
 
     assert(!T.isNull() && "Unknown predefined type");
index 46ba3d55340d38f80b7e67a5ca248ad4d0a59216..bb232eb567919138d11bb5bb5d86c769fe17125c 100644 (file)
@@ -1368,6 +1368,7 @@ bool CursorVisitor::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
   case BuiltinType::BoundMember:
   case BuiltinType::Dependent:
   case BuiltinType::UnknownAny:
+  case BuiltinType::ARCUnbridgedCast:
     break;
 
   case BuiltinType::ObjCId:
index 121d67d1d2e7d8fd1850baa20b2bbe4acdedd94e..91ceb7c78b0d1fa2bb7bb34de68f0a2fde5f0a2b 100644 (file)
@@ -584,6 +584,7 @@ void USRGenerator::VisitType(QualType T) {
         case BuiltinType::BoundMember:
         case BuiltinType::Dependent:
         case BuiltinType::UnknownAny:
+        case BuiltinType::ARCUnbridgedCast:
           IgnoreResults = true;
           return;
         case BuiltinType::ObjCId: