This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[tree-ssa] Fix alpha bootstrap failure
- From: Diego Novillo <dnovillo at redhat dot com>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 15 Dec 2003 22:17:29 -0500
- Subject: [tree-ssa] Fix alpha bootstrap failure
- Organization: Red Hat Canada
Volatile variables should not be scalarized. This showed up while
trying to bootstrap on alpha. We try to scalarize a variable used
inside a VA_ARG_EXPR (which are marked volatile until we implement
VA_ARG_EXPR lowering).
The sibcall.c fix is to quell a valid warning about uninitialized
variables.
Diego.
* tree-sra.c (can_be_scalarized_p): Reject volatile variables.
* sibcall.c (skip_copy_to_return_value): Initialize 'hardret' and
'softret'.
Index: sibcall.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/sibcall.c,v
retrieving revision 1.38.2.9
diff -d -c -p -r1.38.2.9 sibcall.c
*** sibcall.c 18 Nov 2003 23:06:35 -0000 1.38.2.9
--- sibcall.c 16 Dec 2003 03:09:09 -0000
*************** static rtx
*** 144,150 ****
skip_copy_to_return_value (rtx orig_insn)
{
rtx insn, set = NULL_RTX;
! rtx hardret, softret;
/* If there is no return value, we have nothing to do. */
if (! identify_call_return_value (PATTERN (orig_insn), &hardret, &softret))
--- 144,150 ----
skip_copy_to_return_value (rtx orig_insn)
{
rtx insn, set = NULL_RTX;
! rtx hardret = NULL_RTX, softret = NULL_RTX;
/* If there is no return value, we have nothing to do. */
if (! identify_call_return_value (PATTERN (orig_insn), &hardret, &softret))
Index: tree-sra.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-sra.c,v
retrieving revision 1.1.2.8
diff -d -c -p -r1.1.2.8 tree-sra.c
*** tree-sra.c 15 Dec 2003 22:58:34 -0000 1.1.2.8
--- tree-sra.c 16 Dec 2003 03:09:09 -0000
*************** can_be_scalarized_p (tree var)
*** 176,181 ****
--- 176,192 ----
return false;
}
+ if (TREE_THIS_VOLATILE (var))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Cannot scalarize variable ");
+ print_generic_expr (dump_file, var, 0);
+ fprintf (dump_file, " because it is declared volatile\n");
+ }
+ return false;
+ }
+
type = TREE_TYPE (var);
nfields = 0;
for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))