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.