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

            Bug ID: 92596
           Summary: [10 Regression] ICE in exact_div, at poly-int.h:2162
                    since r278406
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
                CC: rguenth at gcc dot gnu.org, rsandifo at gcc dot gnu.org
  Target Milestone: ---

I see the following ICE:

$ cat div2.i
typedef struct {
  long n[5];
} secp256k1_fe;

int a, b, c;
void fn1(secp256k1_fe *p1, int p2) { p1->n[2] = p1->n[3] = p1->n[4] = p2; }
void fn2() {
  fn1(b, !c);
  fn1(a, !c);
}

$ gcc -c div2.i -O3
div2.i: In function ‘fn2’:
div2.i:8:7: warning: passing argument 1 of ‘fn1’ makes pointer from integer
without a cast [-Wint-conversion]
    8 |   fn1(b, !c);
      |       ^
      |       |
      |       int
div2.i:6:24: note: expected ‘secp256k1_fe *’ but argument is of type ‘int’
    6 | void fn1(secp256k1_fe *p1, int p2) { p1->n[2] = p1->n[3] = p1->n[4] =
p2; }
      |          ~~~~~~~~~~~~~~^~
div2.i:9:7: warning: passing argument 1 of ‘fn1’ makes pointer from integer
without a cast [-Wint-conversion]
    9 |   fn1(a, !c);
      |       ^
      |       |
      |       int
div2.i:6:24: note: expected ‘secp256k1_fe *’ but argument is of type ‘int’
    6 | void fn1(secp256k1_fe *p1, int p2) { p1->n[2] = p1->n[3] = p1->n[4] =
p2; }
      |          ~~~~~~~~~~~~~~^~
during GIMPLE pass: slp
div2.i:7:6: internal compiler error: in exact_div, at poly-int.h:2162
    7 | void fn2() {
      |      ^~~
0x738c34 poly_int<1u, poly_result<unsigned long, if_nonpoly<unsigned long,
unsigned long, poly_int_traits<unsigned long>::is_poly>::type,
poly_coeff_pair_traits<unsigned long, if_nonpoly<unsigned long, unsigned long,
poly_int_traits<unsigned long>::is_poly>::type>::result_kind>::type>
exact_div<1u, unsigned long, unsigned long>(poly_int_pod<1u, unsigned long>
const&, unsigned long)
        /home/marxin/Programming/gcc/gcc/poly-int.h:2162
0x738c34 poly_int<1u, poly_result<unsigned long, unsigned long,
poly_coeff_pair_traits<unsigned long, unsigned long>::result_kind>::type>
exact_div<1u, unsigned long, unsigned long>(poly_int_pod<1u, unsigned long>
const&, poly_int_pod<1u, unsigned long> const&)
        /home/marxin/Programming/gcc/gcc/poly-int.h:2175
0x738c34 vect_get_num_vectors
        /home/marxin/Programming/gcc/gcc/tree-vectorizer.h:1490
0x738c34 vect_slp_analyze_node_operations_1
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2795
0x738c34 vect_slp_analyze_node_operations
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2905
0x1064d78 vect_slp_analyze_node_operations
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2863
0x1064d78 vect_slp_analyze_node_operations
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2863
0x1065778 vect_slp_analyze_operations(vec_info*)
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2939
0x106b352 vect_slp_analyze_bb_1
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:3267
0x106b352 vect_slp_bb_region
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:3328
0x106b352 vect_slp_bb(basic_block_def*)
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:3463
0x106d34f execute
        /home/marxin/Programming/gcc/gcc/tree-vectorizer.c:1320
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

And one starting from r278334:

$ cat div.c
typedef struct {
  long n[5];
} secp256k1_fe;

secp256k1_fe a;

void fn1(int p1) { a.n[0] = a.n[1] = a.n[2] = p1; }
void fn2() {
  int b;
  fn1(!b);
}

$ gcc -c div.c -O3
during GIMPLE pass: slp
div.c: In function ‘fn2’:
div.c:8:6: internal compiler error: in exact_div, at poly-int.h:2162
    8 | void fn2() {
      |      ^~~
0x738c34 poly_int<1u, poly_result<unsigned long, if_nonpoly<unsigned long,
unsigned long, poly_int_traits<unsigned long>::is_poly>::type,
poly_coeff_pair_traits<unsigned long, if_nonpoly<unsigned long, unsigned long,
poly_int_traits<unsigned long>::is_poly>::type>::result_kind>::type>
exact_div<1u, unsigned long, unsigned long>(poly_int_pod<1u, unsigned long>
const&, unsigned long)
        /home/marxin/Programming/gcc/gcc/poly-int.h:2162
0x738c34 poly_int<1u, poly_result<unsigned long, unsigned long,
poly_coeff_pair_traits<unsigned long, unsigned long>::result_kind>::type>
exact_div<1u, unsigned long, unsigned long>(poly_int_pod<1u, unsigned long>
const&, poly_int_pod<1u, unsigned long> const&)
        /home/marxin/Programming/gcc/gcc/poly-int.h:2175
0x738c34 vect_get_num_vectors
        /home/marxin/Programming/gcc/gcc/tree-vectorizer.h:1490
0x738c34 vect_slp_analyze_node_operations_1
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2795
0x738c34 vect_slp_analyze_node_operations
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2905
0x1064d78 vect_slp_analyze_node_operations
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2863
0x1064d78 vect_slp_analyze_node_operations
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2863
0x1065778 vect_slp_analyze_operations(vec_info*)
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:2939
0x106b352 vect_slp_analyze_bb_1
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:3267
0x106b352 vect_slp_bb_region
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:3328
0x106b352 vect_slp_bb(basic_block_def*)
        /home/marxin/Programming/gcc/gcc/tree-vect-slp.c:3463
0x106d34f execute
        /home/marxin/Programming/gcc/gcc/tree-vectorizer.c:1320
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

Reply via email to