[cfe-commits] r133639 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/CodeGen/CGException.cpp lib/CodeGen/CGObjCGNU.cpp lib/CodeGen/CGObjCMac.cpp lib/CodeGen/CGObjCRuntime.h lib/Sema/SemaDeclCXX.cpp test/CodeGenObjCXX/catch-id-type.mm
John McCall
rjmccall at apple.com
Wed Jun 22 13:48:01 PDT 2011
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.
More information about the cfe-commits
mailing list