[CodeGen] Force emission of personality directive if explicitly specified
[oota-llvm.git] / lib / CodeGen / AsmPrinter / WinException.cpp
index 7ef2832d41a3e498b1ac22a24357d7d962e95976..71c77815e281df0ba06ea702cc37be3f10b40bcf 100644 (file)
@@ -74,8 +74,12 @@ void WinException::beginFunction(const MachineFunction *MF) {
   if (F->hasPersonalityFn())
     Per = dyn_cast<Function>(F->getPersonalityFn()->stripPointerCasts());
 
-  shouldEmitPersonality = hasLandingPads &&
-    PerEncoding != dwarf::DW_EH_PE_omit && Per;
+  bool forceEmitPersonality =
+    F->hasPersonalityFn() && !isNoOpWithoutInvoke(classifyEHPersonality(Per)) &&
+    F->needsUnwindTableEntry();
+
+  shouldEmitPersonality = forceEmitPersonality || (hasLandingPads &&
+    PerEncoding != dwarf::DW_EH_PE_omit && Per);
 
   unsigned LSDAEncoding = TLOF.getLSDAEncoding();
   shouldEmitLSDA = shouldEmitPersonality &&