forked from OSchip/llvm-project
Last patch, for now, to privde ObjC's encoding of types.
We now pass all gcc's encoding compatibility tests. llvm-svn: 61387
This commit is contained in:
parent
8b9ccca5e5
commit
4ecf1e94db
|
@ -1859,6 +1859,16 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S,
|
|||
return;
|
||||
}
|
||||
else if (PointeeTy->isObjCInterfaceType()) {
|
||||
if (dyn_cast<TypedefType>(PointeeTy.getTypePtr())) {
|
||||
// Another historical/compatibility reason.
|
||||
// We encode the underlying type which comes out as
|
||||
// {...};
|
||||
S += '^';
|
||||
getObjCEncodingForTypeImpl(PointeeTy, S,
|
||||
false, ExpandPointedToStructures,
|
||||
NULL);
|
||||
return;
|
||||
}
|
||||
S += '@';
|
||||
if (FD) {
|
||||
ObjCInterfaceDecl *OI = PointeeTy->getAsObjCInterfaceType()->getDecl();
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
// RUN: grep -e "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}" %t | count 1 &&
|
||||
// RUN: grep -e "{B1=#@c}" %t | count 1 &&
|
||||
// RUN: grep -e "v12@0:4\[3\[4{Test=i}]]8" %t | count 1 &&
|
||||
// RUN: grep -e "r^{S=i}" %t | count 1
|
||||
// RUN: grep -e "r^{S=i}" %t | count 1 &&
|
||||
// RUN: grep -e "\^{Object=#}" %t | count 1
|
||||
|
||||
@class Int1;
|
||||
|
||||
|
@ -75,11 +76,19 @@ struct Innermost {
|
|||
|
||||
struct S { int iS; };
|
||||
|
||||
@interface Object
|
||||
{
|
||||
Class isa;
|
||||
}
|
||||
@end
|
||||
typedef Object MyObj;
|
||||
|
||||
int main()
|
||||
{
|
||||
const char *en = @encode(Derived);
|
||||
const char *eb = @encode(B1);
|
||||
const char *es = @encode(const struct S *);
|
||||
const char *ec = @encode(const struct S);
|
||||
const char *ee = @encode(MyObj *const);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue