]> granicus.if.org Git - clang/commitdiff
The ObjC++-to-C++ personality trick is only necessary on NeXT runtimes,
authorJohn McCall <rjmccall@apple.com>
Wed, 14 Nov 2012 17:48:31 +0000 (17:48 +0000)
committerJohn McCall <rjmccall@apple.com>
Wed, 14 Nov 2012 17:48:31 +0000 (17:48 +0000)
which is not coincidentally the only place it works, either (because
of how it tests for EH_TYPE symbols).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167935 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGException.cpp

index 369711a8a6285e8be24b718578d8e4048380c419..86dee5a4ab98134306b879d47186692342dbf331 100644 (file)
@@ -307,14 +307,15 @@ static bool PersonalityHasOnlyCXXUses(llvm::Constant *Fn) {
 /// aggressive about only using the ObjC++ personality in a function
 /// when it really needs it.
 void CodeGenModule::SimplifyPersonality() {
-  // For now, this is really a Darwin-specific operation.
-  if (!Context.getTargetInfo().getTriple().isOSDarwin())
-    return;
-
   // If we're not in ObjC++ -fexceptions, there's nothing to do.
   if (!LangOpts.CPlusPlus || !LangOpts.ObjC1 || !LangOpts.Exceptions)
     return;
 
+  // Both the problem this endeavors to fix and the way the logic
+  // above works is specific to the NeXT runtime.
+  if (!LangOpts.ObjCRuntime.isNeXTFamily())
+    return;
+
   const EHPersonality &ObjCXX = EHPersonality::get(LangOpts);
   const EHPersonality &CXX = getCXXPersonality(LangOpts);
   if (&ObjCXX == &CXX)