aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@gcc.gnu.org>2005-10-04 06:39:17 -0700
committerAndrew Pinski <pinskia@gcc.gnu.org>2005-10-04 06:39:17 -0700
commit11e3f4b6f733c96148bea5747f793f020f4aeadb (patch)
tree106e20fbf3e5761d186df10f3b57e6e715d3c4b7 /gcc
parent46fbb29c2ee1a905f9cad8b5004ff79fcf82bfeb (diff)
downloadgcc-11e3f4b6f733c96148bea5747f793f020f4aeadb.zip
gcc-11e3f4b6f733c96148bea5747f793f020f4aeadb.tar.gz
gcc-11e3f4b6f733c96148bea5747f793f020f4aeadb.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/c-decl.c2
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c2
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.dg/register-var-3.c9
-rw-r--r--gcc/varasm.c12
7 files changed, 41 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9003d0d..a0c8dcc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 9c2e829..1caf0b9 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 d6cc92da..c42ec9e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 01da187..1bca147 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 34826bf..1eb0c21 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
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 0000000..dc659f5
--- /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 91d2ea0c..f21c4b9 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))
+ {
+ error ("register name not specified for %q+D", decl);
+ }
+ else if (TREE_CODE (decl) != FUNCTION_DECL && DECL_REGISTER (decl))
{
- reg_number = decode_reg_name (name);
+ 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);