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. John. _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
