OSDN Git Service

PR target/27571
authorfalk <falk@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 May 2006 12:28:40 +0000 (12:28 +0000)
committerfalk <falk@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 May 2006 12:28:40 +0000 (12:28 +0000)
* config/alpha/alpha.c (alpha_does_function_need_gp): Skip jump
table data.

* gcc.c-torture/compile/pr27571.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114130 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/alpha/alpha.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr27571.c [new file with mode: 0644]

index 4e271ed..2ea2497 100644 (file)
@@ -1,3 +1,9 @@
+2006-05-24  Steven Bosscher  <steven@gcc.gnu.org>
+
+       PR target/27571
+       * config/alpha/alpha.c (alpha_does_function_need_gp): Skip jump
+       table data.
+
 2006-05-25  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/20103
 2006-05-25  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/20103
index 6b1cef7..1a3cf83 100644 (file)
@@ -7410,6 +7410,7 @@ alpha_does_function_need_gp (void)
 
   for (; insn; insn = NEXT_INSN (insn))
     if (INSN_P (insn)
 
   for (; insn; insn = NEXT_INSN (insn))
     if (INSN_P (insn)
+       && ! JUMP_TABLE_DATA_P (insn)
        && GET_CODE (PATTERN (insn)) != USE
        && GET_CODE (PATTERN (insn)) != CLOBBER
        && get_attr_usegp (insn))
        && GET_CODE (PATTERN (insn)) != USE
        && GET_CODE (PATTERN (insn)) != CLOBBER
        && get_attr_usegp (insn))
index c55a9ec..3201439 100644 (file)
@@ -1,3 +1,7 @@
+2006-05-24  Falk Hueffner  <falk@debian.org>
+
+       * gcc.c-torture/compile/pr27571.c: New test.
+
 2006-05-26  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/27709
 2006-05-26  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/27709
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr27571.c b/gcc/testsuite/gcc.c-torture/compile/pr27571.c
new file mode 100644 (file)
index 0000000..af66369
--- /dev/null
@@ -0,0 +1,27 @@
+/* PR target/27571
+   alpha_does_function_need_gp did not properly skip jump table insns  */
+
+int r3isseparator(int);
+void r3isdigit(int);
+void r3decimalvalue(int);
+
+void r7todouble(int *storage, int *count) {
+    int i = 0;
+    int state = 0;
+    int cc = 0;
+    while (i > *count) {
+       cc = *storage;
+       switch (state) {
+       case 0:
+           if (r3isseparator(cc))
+               state = 1;
+       case 1:
+           r3isdigit(cc);
+       case 2:
+       case 5:
+       case 6:
+           r3decimalvalue(cc);
+       }
+       i++;
+    }
+}