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

--- Comment #19 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #18)
> GIMPLE testcase that doesn't fail, possibly because of NOPs or because of
> missing range info or whatever...
> 
> typedef struct {
>   char array[81];
> } container;
> container *get();
> int guard = 0;
> container c;
> 
> void __GIMPLE (startwith("vrp1"))
> d ()
> {
>   long unsigned int len2;
>   container * a;
>   char * _1;
>   int _18;
>   int i_19;
> 
>   bb_2:
>   a_6 = get ();
>   if (a_6 != _Literal (struct container *) 0)
>     goto bb_3;
>   else
>     goto bb_8;
> 
>   bb_3:
>   _18 = guard;
>   if (_18 != 0)
>     goto bb_5;
>   else
>     goto bb_4;
> 
>   bb_4:
>   ;
> 
>   bb_5:
>   i_19 = __PHI (bb_3: 0, bb_4: 1);
>   _1 = &a_6->array[0];
>   len2_15 = __builtin_strlen (&c.array);
>   if (len2_15 > 81ul)
>     goto bb_6;
>   else
>     goto bb_7;
> 
>   bb_6:
>   ;
> 
>   bb_7:
>   len2_17 = __PHI (bb_5: len2_15, bb_6: 81ul);
>   __builtin_memmove (_1, &c.array, len2_17);
> 
>   bb_8:
>   return;
> 
> }

Who knows, I can see the jump threading happens:

Visiting statement:
_1_23 = &a_25->array[0];
LKUP STMT len2_15 = __builtin_strlen (&c.array) with .MEM_22
<<<< COPY i_19_19 = 1
  Registering jump thread: (4, 5) incoming edge;  (5, 9) normal;
1>>> STMT 1 = len2_15 le_expr 81
1>>> STMT 0 = len2_15 gt_expr 81
0>>> COPY len2_27 = len2_15
<<<< STMT 0 = len2_15 gt_expr 81
<<<< STMT 1 = len2_15 le_expr 81
<<<< COPY len2_27 = len2_15
0>>> COPY i_19_19 = 0
LKUP STMT _1_23 = &a_25->array[0]

Visiting statement:
_1_23 = &a_25->array[0];
LKUP STMT len2_15 = __builtin_strlen (&c.array) with .MEM_22
<<<< COPY i_19_19 = 0
  Registering jump thread: (3, 5) incoming edge;  (5, 9) normal;
  Threaded jump 4 --> 5 to 10
  Threaded jump 3 --> 5 to 10
Removing basic block 5
;; basic block 5, loop depth 0
;;  pred:      
# i_19_19 = PHI <>
bb_5:
_1_23 = &a_6->array[0];
len2_15 = __builtin_strlen (&c.array);
if (0 != 0)
  goto <bb 6>; [INV]
else
  goto <bb 9>; [INV]
;;  succ:       6
;;              9

and the BB is removed, but I can't see the ICE.

Reply via email to