Fix action No calculation in multiple-invoke-one-LP mode


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36987 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index 4480921..29f428b 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -2934,41 +2934,41 @@
       unsigned SizeAction = 0;
       signed FirstAction;
 
-      for (unsigned j = 0, E = LandingPad.BeginLabels.size(); j != E; ++j) {
-        if (IsFilter) {
-          // FIXME - Assume there is only one filter typeinfo list per function
-          // time being.  I.E., Each call to eh_filter will have the same list.
-          // This can change if a function is inlined. 
-          Filter = &LandingPad;
-          SizeAction =  Asm->SizeSLEB128(-1) + Asm->SizeSLEB128(0);
+      if (IsFilter) {
+        // FIXME - Assume there is only one filter typeinfo list per function
+        // time being.  I.E., Each call to eh_filter will have the same list.
+        // This can change if a function is inlined. 
+        Filter = &LandingPad;
+        SizeAction =  Asm->SizeSLEB128(-1) + Asm->SizeSLEB128(0);
+        SizeSiteActions += SizeAction;
+        // Record the first action of the landing pad site.
+        FirstAction = SizeActions + SizeSiteActions - SizeAction + 1;
+      } else if (TypeIds.empty()) {
+        FirstAction = 0;
+      } else {
+        // Gather the action sizes
+        for (unsigned j = 0, M = TypeIds.size(); j != M; ++j) {
+          unsigned TypeID = TypeIds[j];
+          unsigned SizeTypeID = Asm->SizeSLEB128(TypeID);
+          signed Action = j ? -(SizeAction + SizeTypeID) : 0;
+          SizeAction = SizeTypeID + Asm->SizeSLEB128(Action);
           SizeSiteActions += SizeAction;
-          // Record the first action of the landing pad site.
-          FirstAction = SizeActions + SizeSiteActions - SizeAction + 1;
-        } else if (TypeIds.empty()) {
-          FirstAction = 0;
-        } else {
-          // Gather the action sizes
-          for (unsigned k = 0, M = TypeIds.size(); k != M; ++k) {
-            unsigned TypeID = TypeIds[k];
-            unsigned SizeTypeID = Asm->SizeSLEB128(TypeID);
-            signed Action = k ? -(SizeAction + SizeTypeID) : 0;
-            SizeAction = SizeTypeID + Asm->SizeSLEB128(Action);
-            SizeSiteActions += SizeAction;
-          }
-        
-          // Record the first action of the landing pad site.
-          FirstAction = SizeActions + SizeSiteActions - SizeAction + 1;
         }
-      
+        
+        // Record the first action of the landing pad site.
+        FirstAction = SizeActions + SizeSiteActions - SizeAction + 1;
+      }
+
+      unsigned M = LandingPad.BeginLabels.size();
+      for (unsigned j = 0; j!=M; ++j)
         Actions.push_back(FirstAction);
         
-        // Compute this sites contribution to size.
-        SizeActions += SizeSiteActions;
-        SizeSites += sizeof(int32_t) + // Site start.
-                     sizeof(int32_t) + // Site length.
-                     sizeof(int32_t) + // Landing pad.
-                     Asm->SizeSLEB128(FirstAction); // Action.
-      }
+      // Compute this sites contribution to size.
+      SizeActions += SizeSiteActions*M;
+      SizeSites += M*(sizeof(int32_t) +               // Site start.
+                      sizeof(int32_t) +               // Site length.
+                      sizeof(int32_t) +               // Landing pad.
+                      Asm->SizeSLEB128(FirstAction)); // Action.
     }
     
     // Final tallies.