]> gcc.gnu.org Git - gcc.git/commitdiff
(expand_computed_goto): If -fcheck-memory-usage, check that computed address of a...
authorRichard Kenner <kenner@gcc.gnu.org>
Sat, 2 Aug 1997 17:19:38 +0000 (13:19 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Sat, 2 Aug 1997 17:19:38 +0000 (13:19 -0400)
(expand_computed_goto): If -fcheck-memory-usage, check that computed address
of a goto is executable.
(expand_asm, expand_asm_operands): If -fcheck-memory-usage, disallow
asm statments.

From-SVN: r14616

gcc/stmt.c

index 0dcb4cba8cb4c20fee26bab3e2b54ef86c1eb7bd..dcc5fa331feeb1f403d9f8aef7fc504dd9c9ae47 100644 (file)
@@ -627,6 +627,11 @@ expand_computed_goto (exp)
 #endif
 
       emit_queue ();
+      /* Be sure the function is executable.  */
+      if (flag_check_memory_usage)
+       emit_library_call (chkr_check_exec_libfunc, 1,
+                          VOIDmode, 1, x, ptr_mode);
+
       do_pending_stack_adjust ();
       emit_indirect_jump (x);
     }
@@ -1352,6 +1357,12 @@ expand_asm (body)
       return;
     }
 
+  if (flag_check_memory_usage)
+    {
+      error ("`asm' cannot be used with `-fcheck-memory-usage'");
+      return;
+    }
+
   if (TREE_CODE (body) == ADDR_EXPR)
     body = TREE_OPERAND (body, 0);
 
@@ -1404,6 +1415,12 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
       return;
     }
 
+  if (flag_check_memory_usage)
+    {
+      error ("`asm' cannot be used with `-fcheck-memory-usage'");
+      return;
+    }
+
   /* Count the number of meaningful clobbered registers, ignoring what
      we would ignore later.  */
   nclobbers = 0;
@@ -1502,7 +1519,8 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
            mark_addressable (TREE_VALUE (tail));
 
          output_rtx[i]
-           = expand_expr (TREE_VALUE (tail), NULL_RTX, VOIDmode, 0);
+           = expand_expr (TREE_VALUE (tail), NULL_RTX, VOIDmode,
+                          EXPAND_MEMORY_USE_WO);
 
          if (! allows_reg && GET_CODE (output_rtx[i]) != MEM)
            error ("output number %d not directly addressable", i);
This page took 0.071081 seconds and 5 git commands to generate.