Commit 88d94632 by Ramana Radhakrishnan

Fix PR debug/60655 - part 1



This is a partial fix for PR60655 where dwarf2out.c rejects NOT of a
value in const_ok_for_output_1. There is still a problem with the
testcase on armhf where we get operations of the form, const (minus
(const_int) (symref)) without the -fdata-sections option which is just
weird. I'm not yet sure where this is produced from and will not have
the time to dig further today.


As Jakub said on IRC, const_ok_for_output_1 is called only with
partial rtx's and therefore disabling minus (const_int) (symref) might
not be the best thing to do especially if this were part of plus
(symref) (minus (const int) (symref)) and both symrefs were in the
same section.


Bootstrapped and regtested on armhf

Bootstrap and regression test running on x86_64.

Ok to commit ?

regards
Ramana

gcc/

<DATE>   Jakub Jelinek <jakub@redhat.com>
         Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

	* dwarf2out.c (const_ok_for_output_1): Reject expressions
	containing a NOT.

gcc/testsuite

<DATE>  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

	* gcc.c-torture/compile/pr60655-1.c: New test.

From-SVN: r209121
parent 094bc219
2014-04-04 Jakub Jelinek <jakub@redhat.com>
Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR debug/60655
* dwarf2out.c (const_ok_for_output_1): Reject expressions
containing a NOT.
2014-04-04 Kyrylo Tkachov <kyrylo.tkachov@arm.com> 2014-04-04 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR bootstrap/60743 PR bootstrap/60743
......
...@@ -11325,8 +11325,18 @@ const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED) ...@@ -11325,8 +11325,18 @@ const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
return 1; return 1;
} }
/* FIXME: Refer to PR60655. It is possible for simplification
of rtl expressions in var tracking to produce such expressions.
We should really identify / validate expressions
enclosed in CONST that can be handled by assemblers on various
targets and only handle legitimate cases here. */
if (GET_CODE (rtl) != SYMBOL_REF) if (GET_CODE (rtl) != SYMBOL_REF)
return 0; {
if (GET_CODE (rtl) == NOT)
return 1;
return 0;
}
if (CONSTANT_POOL_ADDRESS_P (rtl)) if (CONSTANT_POOL_ADDRESS_P (rtl))
{ {
......
2014-04-04 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
PR debug/60655
* gcc.c-torture/compile/pr60655-1.c: New test.
2014-04-04 Martin Jambor <mjambor@suse.cz> 2014-04-04 Martin Jambor <mjambor@suse.cz>
PR ipa/60640 PR ipa/60640
......
/* { dg-options "-fdata-sections" } */
typedef unsigned char unit;
typedef unit *unitptr;
extern short global_precision;
typedef unsigned int size_t;
extern void *memcpy (void *dest, const void *src, size_t n);
short mp_compare(const unit* r1, const unit* r2)
{
register short precision;
precision = global_precision;
(r1) = ((r1)+(precision)-1);
(r2) = ((r2)+(precision)-1);
do
{ if (*r1 < *r2)
return(-1);
if (*((r1)--) > *((r2)--))
return(1);
} while (--precision);
}
static unit modulus[((1280+(2*8))/8)];
static unit d_data[((1280+(2*8))/8)*2];
int upton_modmult (unitptr prod, unitptr multiplicand, unitptr multiplier)
{
unitptr d = d_data;
while (mp_compare(d,modulus) > 0)
memcpy((void*)(prod), (const void*)(d), (global_precision));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment