From: jakub Date: Wed, 23 Oct 2002 21:20:08 +0000 (+0000) Subject: * config/i386/i386.c (local_symbolic_operand): Move LABEL_REF test X-Git-Tag: upstream/4.9.2~83747 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=94aedecce72351263b373c1def00acd2581e5719;p=platform%2Fupstream%2Flinaro-gcc.git * config/i386/i386.c (local_symbolic_operand): Move LABEL_REF test after CONST test. * gcc.dg/20021023-1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58469 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 96011b3..0a33a70 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-10-23 Jakub Jelinek + + * config/i386/i386.c (local_symbolic_operand): Move LABEL_REF test + after CONST test. + 2002-10-23 Steve Ellcey * config/ia64/ia64.c (hfa_element_mode): Don't allow 128 bit floats diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index f3d5acc..4b13c46 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -3063,9 +3063,6 @@ local_symbolic_operand (op, mode) rtx op; enum machine_mode mode ATTRIBUTE_UNUSED; { - if (GET_CODE (op) == LABEL_REF) - return 1; - if (GET_CODE (op) == CONST && GET_CODE (XEXP (op, 0)) == PLUS && GET_CODE (XEXP (XEXP (op, 0), 1)) == CONST_INT @@ -3074,6 +3071,9 @@ local_symbolic_operand (op, mode) && INTVAL (XEXP (XEXP (op, 0), 1)) < 16*1024*1024))) op = XEXP (XEXP (op, 0), 0); + if (GET_CODE (op) == LABEL_REF) + return 1; + if (GET_CODE (op) != SYMBOL_REF) return 0; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d0c5776..e2fa077 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-10-23 Jakub Jelinek + + * gcc.dg/20021023-1.c: New test. + 2002-10-23 Mark Mitchell PR c++/7679 diff --git a/gcc/testsuite/gcc.dg/20021023-1.c b/gcc/testsuite/gcc.dg/20021023-1.c new file mode 100644 index 0000000..6fe555a --- /dev/null +++ b/gcc/testsuite/gcc.dg/20021023-1.c @@ -0,0 +1,24 @@ +/* This testcase ICEd on x86-64 because LABEL_REF + small const was not + considered as local_symbolic_operand. */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fpic" } */ + +typedef __builtin_va_list va_list; + +static unsigned int +foo (void *a, float b, const char *c, va_list d, void *e) +{ + return -1; +} + +unsigned int +bar (void *a, float b, const char *c, ...) +{ + va_list args; + unsigned int d; + + __builtin_stdarg_start (args, c); + d = foo (a, b, c, args, a); + __builtin_va_end (args); + return d; +}