https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66377

--- Comment #3 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
On Tue, Jun 02, 2015 at 07:04:21PM +0000, sgk at troutmask dot
apl.washington.edu wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66377
> 
> --- Comment #2 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
> On Tue, Jun 02, 2015 at 06:41:53PM +0000, kargl at gcc dot gnu.org wrote:
> > 
> > Thus, there is something about the "arrayness" of x in
> > the original testcase that matters.  Off-by-one maybe?
> 
> There certainly is an appearance of off-by-one.
> 
> For the original testcase, if I use -fdump-tree-original
> and remove the unessential portions of the dump, I get
> 
> another ()
> {
>   static integer(kind=4) x1   [value-expr: constant.eq.1.x1];
>   static integer(kind=4) x[2] [value-expr: constant.eq.1.x];
> }
> 
> test ()
> {
>   static integer(kind=4) x1   [value-expr: constant.eq.0.x1];
>   static integer(kind=4) x2   [value-expr: constant.eq.0.x2];
>   static integer(kind=4) x[2] [value-expr: constant.eq.0.x];
> }
> 

OK.  Digging a little deeper.  The problem is in 
module.c (load_equiv).  There is a section of code
(lines 4526-4534) that tries to avoid loading unused
equivalenced symbols.  If those lines are commented
out, the original code works.

In looking at these lines and neighboring code, it looks
like an singly-linked list is constructed from the 
equivalence in the module file, but it is compressed due
to the missing (ie unused symbols).  So, it still suspect
a counting problem.

Reply via email to