re PR middle-end/23125 (OpenBSD's zic.c causes g++ but not gcc to segfault)

2005-10-04  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/23125
        * decl.c (make_rtl_for_nonlocal_decl): Use set_user_assembler_name
        instead of change_decl_assembler_name.
2005-10-04  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/23125
        * c-decl.c (finish_decl): Use set_user_assembler_name even for
        register variables.
        * varasm.c (make_decl_rtl): If a register variable does not
        have a set user assmbler name, error out.
        Decode the asmspec is now name+1 bypassing '*'.
2005-10-04  Andrew Pinski  <pinskia@physics.uc.edu>

        PR middle-end/23125
        * gcc.dg/register-var-3.c: New test.

From-SVN: r104942
This commit is contained in:
Andrew Pinski 2005-10-04 06:39:17 -07:00
parent 46fbb29c2e
commit 11e3f4b6f7
7 changed files with 41 additions and 8 deletions

View File

@ -1,4 +1,13 @@
2005-10-05 Steven Bosscher <stevenb@suse.de>
2005-10-04 Andrew Pinski <pinskia@physics.uc.edu>
PR middle-end/23125
* c-decl.c (finish_decl): Use set_user_assembler_name even for
register variables.
* varasm.c (make_decl_rtl): If a register variable does not
have a set user assmbler name, error out.
Decode the asmspec is now name+1 bypassing '*'.
2005-10-04 Steven Bosscher <stevenb@suse.de>
PR tree-optimization/23049
* tree-ssa-dom.c (thread_across_edge): Make sure that the condition

View File

@ -3426,8 +3426,6 @@ finish_decl (tree decl, tree init, tree asmspec_tree)
&& !TREE_STATIC (decl))
warning (0, "ignoring asm-specifier for non-static local "
"variable %q+D", decl);
else if (C_DECL_REGISTER (decl))
change_decl_assembler_name (decl, get_identifier (asmspec));
else
set_user_assembler_name (decl, asmspec);
}

View File

@ -1,3 +1,9 @@
2005-10-04 Andrew Pinski <pinskia@physics.uc.edu>
PR middle-end/23125
* decl.c (make_rtl_for_nonlocal_decl): Use set_user_assembler_name
instead of change_decl_assembler_name.
2005-10-03 Alexandre Oliva <aoliva@redhat.com>
* error.c (dump_type) <UNKNOWN_TYPE>: Print reworded message.

View File

@ -4661,7 +4661,7 @@ make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
placed in a particular register. */
if (TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
{
change_decl_assembler_name (decl, get_identifier (asmspec));
set_user_assembler_name (decl, asmspec);
DECL_HARD_REGISTER (decl) = 1;
}
else

View File

@ -1,4 +1,9 @@
2005-10-05 Steven Bosscher <stevenb@suse.de>
2005-10-04 Andrew Pinski <pinskia@physics.uc.edu>
PR middle-end/23125
* gcc.dg/register-var-3.c: New test.
2005-10-04 Steven Bosscher <stevenb@suse.de>
* gcc.dg/pr23049.c: New test.

View File

@ -0,0 +1,9 @@
/* { dg-options "" } */
/* { dg-do compile } */
register int r0; /* { dg-error "register name not specified" } */
register int bp; /* { dg-error "register name not specified" } */
register int sp; /* { dg-error "register name not specified" } */
register int r30; /* { dg-error "register name not specified" } */
register int toc; /* { dg-error "register name not specified" } */
register int d0; /* { dg-error "register name not specified" } */
register int a0; /* { dg-error "register name not specified" } */

View File

@ -923,10 +923,16 @@ make_decl_rtl (tree decl)
}
name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
if (name[0] != '*' && TREE_CODE (decl) != FUNCTION_DECL
&& DECL_REGISTER (decl))
{
reg_number = decode_reg_name (name);
error ("register name not specified for %q+D", decl);
}
else if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
{
const char *asmspec = name+1;
reg_number = decode_reg_name (asmspec);
/* First detect errors in declaring global registers. */
if (reg_number == -1)
error ("register name not specified for %q+D", decl);