re PR middle-end/23125 (OpenBSD's zic.c causes g++ but not gcc to segfault)
authorAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 4 Oct 2005 13:39:17 +0000 (06:39 -0700)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 4 Oct 2005 13:39:17 +0000 (06:39 -0700)
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

gcc/ChangeLog
gcc/c-decl.c
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/register-var-3.c [new file with mode: 0644]
gcc/varasm.c

index 9003d0da7cc87b881f764ac0756e67093a943631..a0c8dcc8dfcdc8add57ba26f792d3077615fac48 100644 (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
index 9c2e829b0c9f55b49b49ec29925274c57c5fd0cd..1caf0b901bc2428c0b1724e2541a16141cb80399 100644 (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);
        }
index d6cc92da501e1bea114b0780627e46752e04ef7f..c42ec9eb91b0a6b551207dd593c616b1e7c3a1e2 100644 (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.
index 01da187a6a15f52693c66a62eb8563786ef7f793..1bca147a7742861a64920586998ff5d8c946523f 100644 (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
index 34826bfec699e2cf96eac804ef49f1a7c18ffb02..1eb0c21a4428b4d178d16a9d47d3af752908ae7f 100644 (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.
 
diff --git a/gcc/testsuite/gcc.dg/register-var-3.c b/gcc/testsuite/gcc.dg/register-var-3.c
new file mode 100644 (file)
index 0000000..dc659f5
--- /dev/null
@@ -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" } */
index 91d2ea0c8179a738962c49b5f491f27fc3a12dfa..f21c4b981ddf5bb9fa677737a8f48ed05f9f5c5f 100644 (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))
+    {
+      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);