summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2010-01-22 23:04:44 +0000
committerFariborz Jahanian <fjahanian@apple.com>2010-01-22 23:04:44 +0000
commit935f041243be2cf5f477c29ba1df6daa96190ee4 (patch)
treecea85712a5f4a5e9a4852e44ba505bcdccc0ab19 /clang/lib
parent690818fc27ff413ccbde97dddb82bb150dfabd23 (diff)
downloadbcm5719-llvm-935f041243be2cf5f477c29ba1df6daa96190ee4.tar.gz
bcm5719-llvm-935f041243be2cf5f477c29ba1df6daa96190ee4.zip
outside a method, 'super' should resolve in a normal name look up
to mimic gcc's behavior. Fixes radar 7400691. llvm-svn: 94246
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index 85889fa5d6d..ea8f4e3e890 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -398,7 +398,17 @@ Sema::ExprResult Sema::ActOnClassMessage(
return ActOnInstanceMessage(ReceiverExpr.get(), Sel, lbrac,
selectorLoc, rbrac, Args, NumArgs);
}
- return Diag(receiverLoc, diag::err_undeclared_var_use) << receiverName;
+ else if (TypedefDecl *OCTD = dyn_cast_or_null<TypedefDecl>(SuperDecl)) {
+ const ObjCInterfaceType *OCIT;
+ OCIT = OCTD->getUnderlyingType()->getAs<ObjCInterfaceType>();
+ if (!OCIT) {
+ Diag(receiverLoc, diag::err_invalid_receiver_to_message);
+ return true;
+ }
+ ClassDecl = OCIT->getDecl();
+ }
+ else
+ return Diag(receiverLoc, diag::err_undeclared_var_use) << receiverName;
}
} else
ClassDecl = getObjCInterfaceDecl(receiverName, receiverLoc);
OpenPOWER on IntegriCloud