diff options
Diffstat (limited to 'lib/CodeGen/DwarfWriter.cpp')
-rw-r--r-- | lib/CodeGen/DwarfWriter.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp index e72ff07..3296e11 100644 --- a/lib/CodeGen/DwarfWriter.cpp +++ b/lib/CodeGen/DwarfWriter.cpp @@ -2778,9 +2778,13 @@ private: std::vector<FunctionEHFrameInfo> EHFrames; - /// shouldEmit - Flag to indicate if debug information should be emitted. - /// + /// shouldEmit - Per-function flag to indicate if EH information should + /// be emitted. bool shouldEmit; + + /// shouldEmitModule - Per-module flag to indicate if EH information should + /// be emitted. + bool shouldEmitModule; /// EmitCommonEHFrame - Emit the common eh unwind frame. /// @@ -3368,6 +3372,7 @@ public: DwarfException(std::ostream &OS, AsmPrinter *A, const TargetAsmInfo *T) : Dwarf(OS, A, T, "eh") , shouldEmit(false) + , shouldEmitModule(false) {} virtual ~DwarfException() {} @@ -3387,7 +3392,7 @@ public: /// EndModule - Emit all exception information that should come after the /// content. void EndModule() { - if (!shouldEmit) return; + if (!shouldEmitModule) return; const std::vector<Function *> Personalities = MMI->getPersonalities(); for (unsigned i =0; i < Personalities.size(); ++i) @@ -3403,13 +3408,14 @@ public: void BeginFunction(MachineFunction *MF) { this->MF = MF; - if (MMI && - ExceptionHandling && + shouldEmit = false; + if ((ExceptionHandling || !MF->getFunction()->doesNotThrow()) && TAI->doesSupportExceptionHandling()) { shouldEmit = true; // Assumes in correct section after the entry point. EmitLabel("eh_func_begin", ++SubprogramCount); } + shouldEmitModule |= shouldEmit; } /// EndFunction - Gather and emit post-function exception information. |