]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/6542 (Internal compiler error when building libgcc for sparc-elf)
authorJakub Jelinek <jakub@redhat.com>
Fri, 3 May 2002 20:46:23 +0000 (22:46 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 3 May 2002 20:46:23 +0000 (22:46 +0200)
PR target/6542
* config/sparc/sparc.h (leaf_reg_remap): Remove const.
(CONDITIONAL_REGISTER_USAGE): For TARGET_FLAT make
fill leaf_reg_remap with identity.
* config/sparc/sparc.c (leaf_reg_remap): Remove const.

* gcc.dg/20020503-1.c: New test.

From-SVN: r53127

gcc/ChangeLog
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.h
gcc/testsuite/ChangeLog

index 4afc04fd44bbd6ca2b37cdc36153e1cf8f7a4d6f..4a4d6c1707f01f3e9a1ced582f08979ee4f6d5bf 100644 (file)
@@ -1,3 +1,11 @@
+2002-05-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/6542
+       * config/sparc/sparc.h (leaf_reg_remap): Remove const.
+       (CONDITIONAL_REGISTER_USAGE): For TARGET_FLAT make
+       fill leaf_reg_remap with identity.
+       * config/sparc/sparc.c (leaf_reg_remap): Remove const.
+
 2002-05-03  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/6522
index cd0b951ded2c45954fb2699266fb2d48afe9b166..28bbcecc76c5c25190cb66cbee4bc7b7fdcfb159 100644 (file)
@@ -85,7 +85,7 @@ bool sparc_emitting_epilogue;
 /* Vector to say how input registers are mapped to output registers.
    HARD_FRAME_POINTER_REGNUM cannot be remapped by this function to
    eliminate it.  You must use -fomit-frame-pointer to get that.  */
-const char leaf_reg_remap[] =
+char leaf_reg_remap[] =
 { 0, 1, 2, 3, 4, 5, 6, 7,
   -1, -1, -1, -1, -1, -1, 14, -1,
   -1, -1, -1, -1, -1, -1, -1, -1,
index 47f09094d11f6cb17b7f208d82a7cde3e6853924..3f2157810b6b9dbfbd10f41d90c1b5ac4fa512fb 100644 (file)
@@ -1017,12 +1017,16 @@ do                                                              \
       fixed_regs[4] = 0;                                       \
     if (TARGET_FLAT)                                           \
       {                                                                \
+       int regno;                                              \
        /* Let the compiler believe the frame pointer is still  \
           %fp, but output it as %i7.  */                       \
        fixed_regs[31] = 1;                                     \
        reg_names[HARD_FRAME_POINTER_REGNUM] = "%i7";           \
        /* Disable leaf functions */                            \
        memset (sparc_leaf_regs, 0, FIRST_PSEUDO_REGISTER);     \
+       /* Make LEAF_REG_REMAP a noop.  */                      \
+       for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) \
+         leaf_reg_remap [regno] = regno;                       \
       }                                                                \
   }                                                            \
 while (0)
@@ -1319,7 +1323,7 @@ extern enum reg_class sparc_regno_reg_class[FIRST_PSEUDO_REGISTER];
 extern char sparc_leaf_regs[];
 #define LEAF_REGISTERS sparc_leaf_regs
 
-extern const char leaf_reg_remap[];
+extern char leaf_reg_remap[];
 #define LEAF_REG_REMAP(REGNO) (leaf_reg_remap[REGNO])
 
 /* The class value for index registers, and the one for base regs.  */
index b4046bfe3878bc1b117b25683ce678bd009c69b6..0ab468915b65b54eb056f71c45305508f8a881d1 100644 (file)
@@ -1,5 +1,7 @@
 2002-05-03  Jakub Jelinek  <jakub@redhat.com>
 
+       * gcc.dg/20020503-1.c: New test.
+
        * gcc.dg/cpp/cmdlne-dM-M.c: New test.
        * gcc.dg/cpp/cmdlne-dD-M.c: New test.
        * gcc.dg/cpp/cmdlne-dN-M.c: New test.