Donn Terry (donn@interix.com)
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 May 1999 01:58:39 +0000 (01:58 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 May 1999 01:58:39 +0000 (01:58 +0000)
        * calls.c (rtx_for_function_call): Extend function pointer being
        passed to chkr_check_exec_libfunc, if needed.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@26838 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/calls.c

index 3db9085..e5f2831 100644 (file)
@@ -1,3 +1,8 @@
+Sat May  8 01:57:58 1999  Donn Terry (donn@interix.com)
+
+       * calls.c (rtx_for_function_call): Extend function pointer being
+       passed to chkr_check_exec_libfunc, if needed.
+
 Sat May  8 01:51:50 1999  David Edelsohn  <edelsohn@gnu.org>
 
        * ginclude/stdarg.h (__va_rounded_size): Use long type for
index 03bac91..d0153a3 100644 (file)
@@ -1407,15 +1407,25 @@ rtx_for_function_call (fndecl, exp)
   else
     /* Generate an rtx (probably a pseudo-register) for the address.  */
     {
+      rtx funaddr;
       push_temp_slots ();
-      funexp = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
+      funaddr = funexp = 
+         expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
       pop_temp_slots ();       /* FUNEXP can't be BLKmode */
 
       /* Check the function is executable.  */
       if (current_function_check_memory_usage)
-       emit_library_call (chkr_check_exec_libfunc, 1,
-                          VOIDmode, 1,
-                          funexp, Pmode);
+       {
+#ifdef POINTERS_EXTEND_UNSIGNED
+         /* It might be OK to convert funexp in place, but there's
+            a lot going on between here and when it happens naturally
+            that this seems safer. */
+          funaddr = convert_memory_address (Pmode, funexp);
+#endif
+         emit_library_call (chkr_check_exec_libfunc, 1,
+                            VOIDmode, 1,
+                            funaddr, Pmode);
+       }
       emit_queue ();
     }
   return funexp;