From 11e3f4b6f733c96148bea5747f793f020f4aeadb Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 4 Oct 2005 06:39:17 -0700 Subject: [PATCH] re PR middle-end/23125 (OpenBSD's zic.c causes g++ but not gcc to segfault) 2005-10-04 Andrew Pinski 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 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 PR middle-end/23125 * gcc.dg/register-var-3.c: New test. From-SVN: r104942 --- gcc/ChangeLog | 11 ++++++++++- gcc/c-decl.c | 2 -- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 2 +- gcc/testsuite/ChangeLog | 7 ++++++- gcc/testsuite/gcc.dg/register-var-3.c | 9 +++++++++ gcc/varasm.c | 12 +++++++++--- 7 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/register-var-3.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9003d0da7cc8..a0c8dcc8dfcd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,13 @@ -2005-10-05 Steven Bosscher +2005-10-04 Andrew Pinski + + 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 PR tree-optimization/23049 * tree-ssa-dom.c (thread_across_edge): Make sure that the condition diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 9c2e829b0c9f..1caf0b901bc2 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -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); } diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d6cc92da501e..c42ec9eb91b0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-10-04 Andrew Pinski + + 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 * error.c (dump_type) : Print reworded message. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 01da187a6a15..1bca147a7742 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 34826bfec699..1eb0c21a4428 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,9 @@ -2005-10-05 Steven Bosscher +2005-10-04 Andrew Pinski + + PR middle-end/23125 + * gcc.dg/register-var-3.c: New test. + +2005-10-04 Steven Bosscher * gcc.dg/pr23049.c: New test. diff --git a/gcc/testsuite/gcc.dg/register-var-3.c b/gcc/testsuite/gcc.dg/register-var-3.c new file mode 100644 index 000000000000..dc659f57f8b3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/register-var-3.c @@ -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" } */ diff --git a/gcc/varasm.c b/gcc/varasm.c index 91d2ea0c8179..f21c4b981ddf 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -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);