Index: include/clang/AST/ASTContext.h =================================================================== --- include/clang/AST/ASTContext.h +++ include/clang/AST/ASTContext.h @@ -2897,7 +2897,6 @@ V(IsStructField, 4) \ V(EncodeBlockParameters, 5) \ V(EncodeClassNames, 6) \ - V(EncodePointerToObjCTypedef, 7) #define V(N,I) ObjCEncOptions& set##N() { Bits |= 1 << I; return *this; } OPT_LIST(V) @@ -2916,8 +2915,7 @@ LLVM_NODISCARD ObjCEncOptions forComponentType() const { ObjCEncOptions Mask = ObjCEncOptions() .setIsOutermostType() - .setIsStructField() - .setEncodePointerToObjCTypedef(); + .setIsStructField(); return Bits & ~Mask.Bits; } }; Index: lib/AST/ASTContext.cpp =================================================================== --- lib/AST/ASTContext.cpp +++ lib/AST/ASTContext.cpp @@ -6927,13 +6927,10 @@ getObjCEncodingForTypeImpl(Field->getType(), S, ObjCEncOptions().setExpandStructures(), Field); - else { - ObjCEncOptions NewOptions = ObjCEncOptions().setExpandStructures(); - if (Options.EncodePointerToObjCTypedef()) - NewOptions.setEncodePointerToObjCTypedef(); - getObjCEncodingForTypeImpl(Field->getType(), S, NewOptions, FD, + else + getObjCEncodingForTypeImpl(Field->getType(), S, + ObjCEncOptions().setExpandStructures(), FD, NotEncodedT); - } } } S += '}'; @@ -6976,36 +6973,6 @@ return; } - QualType PointeeTy = OPT->getPointeeType(); - if (!Options.EncodingProperty() && - isa(PointeeTy.getTypePtr()) && - !Options.EncodePointerToObjCTypedef()) { - // Another historical/compatibility reason. - // We encode the underlying type which comes out as - // {...}; - S += '^'; - if (FD && OPT->getInterfaceDecl()) { - // Prevent recursive encoding of fields in some rare cases. - ObjCInterfaceDecl *OI = OPT->getInterfaceDecl(); - SmallVector Ivars; - DeepCollectObjCIvars(OI, true, Ivars); - for (unsigned i = 0, e = Ivars.size(); i != e; ++i) { - if (Ivars[i] == FD) { - S += '{'; - S += OI->getObjCRuntimeNameAsString(); - S += '}'; - return; - } - } - } - ObjCEncOptions NewOptions = - ObjCEncOptions().setEncodePointerToObjCTypedef(); - if (Options.ExpandPointedToStructures()) - NewOptions.setExpandStructures(); - getObjCEncodingForTypeImpl(PointeeTy, S, NewOptions, /*Field=*/nullptr); - return; - } - S += '@'; if (OPT->getInterfaceDecl() && (FD || Options.EncodingProperty() || Options.EncodeClassNames())) { Index: test/CodeGenObjC/encode-test-6.m =================================================================== --- test/CodeGenObjC/encode-test-6.m +++ test/CodeGenObjC/encode-test-6.m @@ -34,7 +34,7 @@ @synthesize property = _property; @end -// CHECK: private unnamed_addr constant [24 x i8] c"^{BABugExample=@}16 +// CHECK: private unnamed_addr constant [8 x i8] c"@16 // rdar://14408244 @class SCNCamera; @@ -52,7 +52,7 @@ C3DCameraStorage _storage; } @end -// CHECK: private unnamed_addr constant [39 x i8] c"{?=\22presentationInstance\22^{SCNCamera}}\00" +// CHECK: private unnamed_addr constant [39 x i8] c"{?=\22presentationInstance\22@\22SCNCamera\22}\00" // rdar://16655340 int i; Index: test/CodeGenObjC/encode-test.m =================================================================== --- test/CodeGenObjC/encode-test.m +++ test/CodeGenObjC/encode-test.m @@ -107,7 +107,7 @@ // CHECK: @g4 = constant [6 x i8] c"{S=i}\00" const char g4[] = @encode(const struct S); -// CHECK: @g5 = constant [12 x i8] c"^{Object=#}\00" +// CHECK: @g5 = constant [2 x i8] c"@\00" const char g5[] = @encode(MyObj * const); //// Index: test/CodeGenObjCXX/encode.mm =================================================================== --- test/CodeGenObjCXX/encode.mm +++ test/CodeGenObjCXX/encode.mm @@ -242,6 +242,6 @@ @end const char *expand_struct() { - // CHECK: @{{.*}} = private unnamed_addr constant [16 x i8] c"{N={S=^{N}}}\00" + // CHECK: @{{.*}} = private unnamed_addr constant [13 x i8] c"{N={S=@}}\00" return @encode(N); }