http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46664

Richard Guenther <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2010.11.26 11:23:10
         AssignedTo|unassigned at gcc dot       |rguenth at gcc dot gnu.org
                   |gnu.org                     |
     Ever Confirmed|0                           |1

--- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2010-11-26 
11:23:10 UTC ---
Confirmed.  My gold also complains:

/var.o netcdf/typeSizes.o netcdf/netcdf.o                     -o wrf
/usr/bin/gold: error: module_physics_init.fppized.o: multiple definition of
'module_ra_gfdleta.eq.0_'
/usr/bin/gold: module_ra_gfdleta.fppized.o: previous definition here
/usr/bin/gold: error: module_physics_init.fppized.o: multiple definition of
'module_ra_gfdleta.eq.1_'
/usr/bin/gold: module_ra_gfdleta.fppized.o: previous definition here
/usr/bin/gold: error: module_physics_init.fppized.o: multiple definition of
'module_ra_gfdleta.eq.2_'
...
In file included from :12:0:
solve_em.fppized.f90: In function 'solve_em':
solve_em.fppized.f90:3:0: internal compiler error: in build2_stat, at
tree.c:3798
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
make[1]: *** [/tmp/cc4pERit.ltrans2.ltrans.o] Error 1

In the end it is because we have

{
  type = <float:32>[0:D.35766] * restrict
  offset = 0
  elements = {
    [0] = D.36037_17957 * 1, 
    [1] = (lbound.2168_17368 + 1) * stride.2022_17908 * 8, 
    [2] = stride.2025_17914 * j_18060 * 4, 
    [3] = offset.2026_17932 * 4, 
    [4] = lbound.2168_17368 * stride.2022_17908 * -4, 
    [5] = (j_18060 + -1) * stride.2025_17914 * -4, 
    [6] = D.36025_17988 * -1, 
    [7] = i_18065 * 4
  }
  rest = (<unnamed-unsigned:32>) D.36049_17926
}

and D.36049_17926 is a pointer.  Thus, the affine comb is of pointer type
but there is no pointer element.

We are adding

{
  type = <float:32>[0:D.35766] * restrict
  offset = 0
  elements = {
    [0] = D.36037_17957 * 1, (void *)
    [1] = (lbound.2168_17368 + 1) * stride.2022_17908 * 4, (int)
    [2] = stride.2025_17914 * j_18060 * 4, (int)
    [3] = offset.2026_17932 * 4 (int)
  }
}

and

{
  type = <unnamed-unsigned:32>
  offset = 0
  elements = {
    [0] = lbound.2168_17368 * stride.2022_17908 * -1,  (int)
    [1] = (j_18060 + -1) * stride.2025_17914 * -1,  (int)
    [2] = D.36025_17988 * -1,  (void *)
    [3] = i_18065 * 4,  (int)
    [4] = D.36049_17926 * 1,  (void *)
    [5] = (lbound.2168_17368 + 1) * stride.2022_17908 * 4  (int)
  }
}

Adding D.36049_17926 we add it to ->rest of

{
  type = <float:32>[0:D.35766] * restrict
  offset = 0
  elements = {
    [0] = D.36037_17957 * 1, 
    [1] = (lbound.2168_17368 + 1) * stride.2022_17908 * 4, 
    [2] = stride.2025_17914 * j_18060 * 4, 
    [3] = offset.2026_17932 * 4, 
    [4] = lbound.2168_17368 * stride.2022_17908 * -4, 
    [5] = (j_18060 + -1) * stride.2025_17914 * -4, 
    [6] = D.36025_17988 * -1, 
    [7] = i_18065 * 4
  }
}

because we overflow MAX_AFF_ELTS and hit

  type = comb->type;
  if (POINTER_TYPE_P (type))
    type = sizetype;

which means ->rest will be always of sizetype which is inconsistent
with what aff_combination_to_tree does.

It sounds more natural to not start aff_combination_to_tree with
->rest but instead add that last, before adding ->offset.  That fixes
the ICE.

Mine.

Reply via email to