From 1c44af1ef27cc71e05a556b2ecdecc08ce1b9174 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 3 May 2002 22:46:23 +0200 Subject: [PATCH] re PR target/6542 (Internal compiler error when building libgcc for sparc-elf) 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 | 8 ++++++++ gcc/config/sparc/sparc.c | 2 +- gcc/config/sparc/sparc.h | 6 +++++- gcc/testsuite/ChangeLog | 2 ++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4afc04fd44bb..4a4d6c1707f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2002-05-03 Jakub Jelinek + + 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 PR target/6522 diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index cd0b951ded2c..28bbcecc76c5 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -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, diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 47f09094d11f..3f2157810b6b 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -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. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b4046bfe3878..0ab468915b65 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2002-05-03 Jakub Jelinek + * 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. -- 2.47.2