On Jun 22, 2011, at 1:48 PM, John McCall wrote: > On Jun 22, 2011, at 1:21 PM, Fariborz Jahanian wrote: >> Added: >> cfe/trunk/test/CodeGenObjCXX/catch-id-type.mm >> Modified: >> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> cfe/trunk/lib/CodeGen/CGException.cpp >> cfe/trunk/lib/CodeGen/CGObjCGNU.cpp >> cfe/trunk/lib/CodeGen/CGObjCMac.cpp >> cfe/trunk/lib/CodeGen/CGObjCRuntime.h >> cfe/trunk/lib/Sema/SemaDeclCXX.cpp >> >> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=133639&r1=133638&r2=133639&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) >> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Jun 22 15:21:51 >> 2011 >> @@ -3151,9 +3151,12 @@ >> "@catch parameter declarator cannot be qualified">; >> def err_objc_pointer_cxx_catch_gnu : Error< >> "can't catch Objective C exceptions in C++ in the GNU runtime">; >> -def err_objc_pointer_cxx_catch_fragile : Error< >> - "can't catch Objective C exceptions in C++ in the non-unified " >> +def warn_objc_pointer_cxx_catch_fragile : Warning< >> + "catching Objective C id's exceptions in C++ in the non-unified " >> "exception model">; > > Please put this in a warning group so that users who do it intentionally > can suppress the warning. I suggest -Wobjc-nonunified-exceptions. > >> Modified: cfe/trunk/lib/CodeGen/CGObjCGNU.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCGNU.cpp?rev=133639&r1=133638&r2=133639&view=diff >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CGObjCGNU.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGObjCGNU.cpp Wed Jun 22 15:21:51 2011 >> @@ -438,7 +438,7 @@ >> bool lval = false); >> virtual llvm::Value *GetSelector(CGBuilderTy &Builder, const ObjCMethodDecl >> *Method); >> - virtual llvm::Constant *GetEHType(QualType T); >> + virtual llvm::Constant *GetEHType(QualType T, const CodeGenFunction >> *CGF=0); > > Er. Why is a CGF necessary here? The only use I can see is: > >> -llvm::Constant *CGObjCMac::GetEHType(QualType T) { >> +llvm::Constant *CGObjCMac::GetEHType(QualType T, const CodeGenFunction >> *CGF) { >> + if (T->isObjCIdType() || >> + T->isObjCQualifiedIdType()) { >> + return CGM.GetAddrOfRTTIDescriptor( >> + CGF->getContext().ObjCIdRedefinitionType, /*ForEH=*/true); >> + } > > But CodeGenModule has a getContext() method, too. > > Also, I think these users want to be able to throw and catch any Objective-C > type, not just id and qualified id, and it looks like this will change the EH > type we use for 'id' in a fragile @catch, too, which seems wrong.
This is all done in r133747. As we talked before, @catch is not impacted by this change. - Fariborz > > John. _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
