diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-02-19 15:18:45 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-02-19 15:18:45 +0000 |
commit | cfd70242ca544c0738fabc55d17ace9fc1d5a7b9 (patch) | |
tree | 40d4e4d0aba0c3c24fdfdd5a10229157c151bd28 /clang/lib/Sema | |
parent | d0bf6f640f6a2130cec017761321831db8c49455 (diff) | |
download | bcm5719-llvm-cfd70242ca544c0738fabc55d17ace9fc1d5a7b9.tar.gz bcm5719-llvm-cfd70242ca544c0738fabc55d17ace9fc1d5a7b9.zip |
Make Sema::ActOnClassMessage robust when name lookup for the receiver
name finds something other than a TypedefDecl or an
ObjCInterfaceDecl. This is a small part of <rdar://problem/7660386>.
llvm-svn: 96676
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index 0c5d8efa288..3a05241c016 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -426,14 +426,14 @@ Sema::ExprResult Sema::ActOnClassMessage( if (!ClassDecl) { NamedDecl *IDecl = LookupSingleName(TUScope, receiverName, LookupOrdinaryName); - if (TypedefDecl *OCTD = dyn_cast_or_null<TypedefDecl>(IDecl)) { - const ObjCInterfaceType *OCIT; - OCIT = OCTD->getUnderlyingType()->getAs<ObjCInterfaceType>(); - if (!OCIT) { - Diag(receiverLoc, diag::err_invalid_receiver_to_message); - return true; - } - ClassDecl = OCIT->getDecl(); + if (TypedefDecl *OCTD = dyn_cast_or_null<TypedefDecl>(IDecl)) + if (const ObjCInterfaceType *OCIT + = OCTD->getUnderlyingType()->getAs<ObjCInterfaceType>()) + ClassDecl = OCIT->getDecl(); + + if (!ClassDecl) { + Diag(receiverLoc, diag::err_invalid_receiver_to_message); + return true; } } assert(ClassDecl && "missing interface declaration"); |