forked from OSchip/llvm-project
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
This commit is contained in:
parent
e23388b25c
commit
3de6b70730
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: clang-cc -triple=i686-apple-darwin9 -fnext-runtime -emit-llvm -o %t %s &&
|
||||
// RUN: grep -e "\^{Innermost=CC}" %t | count 1 &&
|
||||
// RUN: grep -e "{Derived=^{objc_class}ib32b8b3b8sb16b8b8b2b8ccb6}" %t | count 1 &&
|
||||
// RUN: grep -e "{B1=^{objc_class}@c}" %t | count 1 &&
|
||||
// RUN: grep -e "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}" %t | count 1 &&
|
||||
// RUN: grep -e "{B1=#@c}" %t | count 1 &&
|
||||
// RUN: grep -e "v12@0:4\[3\[4@]]8" %t | count 1 &&
|
||||
// RUN: grep -e "r\^{S=i}" %t | count 1 &&
|
||||
// RUN: grep -e "\^{Object=#}" %t | count 1
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
@class C;
|
||||
|
||||
// RUN: grep _Z1fP2id %t | count 1 &&
|
||||
// RUN: grep _Z1fP11objc_object %t | count 1 &&
|
||||
void __attribute__((overloadable)) f(id c) { }
|
||||
|
||||
// RUN: grep _Z1fP1C %t | count 1
|
||||
|
|
Loading…
Reference in New Issue