function.c (assign_stack_local_1): Issue an error message if the frame size overflows...
[gcc.git] / gcc / function.c
index 9e36af74d72344d9cb3c33eae0a3285e5c44d13a..963ad4f1e94d7d72ebf5cd79a6251b4b738b4c7f 100644 (file)
@@ -479,6 +479,19 @@ assign_stack_local_1 (enum machine_mode mode, HOST_WIDE_INT size, int align,
   function->x_stack_slot_list
     = gen_rtx_EXPR_LIST (VOIDmode, x, function->x_stack_slot_list);
 
+  /* Try to detect frame size overflows.  */
+  if ((FRAME_GROWS_DOWNWARD
+       ? (unsigned HOST_WIDE_INT) -function->x_frame_offset
+       : (unsigned HOST_WIDE_INT) function->x_frame_offset)
+       > ((unsigned HOST_WIDE_INT) 1 << (BITS_PER_WORD - 1))
+           /* Leave room for the fixed part of the frame.  */
+           - 64 * UNITS_PER_WORD)
+    {
+      error ("%Jtotal size of local objects too large", function->decl);
+      /* Avoid duplicate error messages as much as possible.  */
+      function->x_frame_offset = 0;
+    }
+
   return x;
 }