diff options
| author | Steve Naroff <snaroff@apple.com> | 2009-07-22 17:14:51 +0000 |
|---|---|---|
| committer | Steve Naroff <snaroff@apple.com> | 2009-07-22 17:14:51 +0000 |
| commit | 3de6b707302be0a4e55a4503d7b1d71b0cc3f837 (patch) | |
| tree | c5a600b54f4cb0bb8e9725e9d2fe747948abbaf5 /clang/lib | |
| parent | e23388b25c40012dc5df73c1cda223afa95fa9db (diff) | |
| download | bcm5719-llvm-3de6b707302be0a4e55a4503d7b1d71b0cc3f837.tar.gz bcm5719-llvm-3de6b707302be0a4e55a4503d7b1d71b0cc3f837.zip | |
Fix a couple recent ABI regressions noticed during code review (fallout from the ObjC type system rewrite).
It's unfortunate that the mangling includes the low-level structs. Nevertheless, we need this for binary compatibility with GCC.
llvm-svn: 76755
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/ASTContext.cpp | 13 | ||||
| -rw-r--r-- | clang/lib/CodeGen/Mangle.cpp | 4 |
2 files changed, 14 insertions, 3 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 174e183d530..705939be728 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -2655,8 +2655,19 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S, S += '*'; return; } + } else if (const RecordType *RTy = PointeeTy->getAsRecordType()) { + // GCC binary compat: Need to convert "struct objc_class *" to "#". + if (RTy->getDecl()->getIdentifier() == &Idents.get("objc_class")) { + S += '#'; + return; + } + // GCC binary compat: Need to convert "struct objc_object *" to "@". + if (RTy->getDecl()->getIdentifier() == &Idents.get("objc_object")) { + S += '@'; + return; + } + // fall through... } - S += '^'; getLegacyIntegralTypeEncoding(PointeeTy); diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index 5340cd72628..9e389040b81 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/lib/CodeGen/Mangle.cpp @@ -577,8 +577,8 @@ void CXXNameMangler::mangleType(const BuiltinType *T) { case BuiltinType::UndeducedAuto: assert(0 && "Should not see undeduced auto here"); break; - case BuiltinType::ObjCId: Out << "2id"; break; - case BuiltinType::ObjCClass: Out << "5Class"; break; + case BuiltinType::ObjCId: Out << "11objc_object"; break; + case BuiltinType::ObjCClass: Out << "10objc_class"; break; } } |

