https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112502
Bug ID: 112502
Summary: GCC: 14: internal compiler error: in
get_predictor_value, at predict.cc:2695
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: 141242068 at smail dot nju.edu.cn
Target Milestone: ---
Compiler Explorer: https://gcc.godbolt.org/z/WP94TWqj5
When compiling this program with `gcc-14 -O1`, gcc crashes:
```
int global;
void foo(int a, short b) {
if (__builtin_expect_with_probability(a, 1, -2.0f) >
__builtin_expect_with_probability(b, 0, 0.8f))
global++;
}
```
Based on the diagnostic error messages, the cause of the crash appears to be
the invalid argument `-2.0f` passed into the
`__builtin_expect_with_probability` function. But after removing the `if`, as
this program, the crash disappears:
```
int global;
void foo(int a, short b) {
__builtin_expect_with_probability(a, 1, -2.0f) >
__builtin_expect_with_probability(b, 0, 0.8f);
global++;
}
```
The crash output:
```
<source>: In function 'foo':
<source>:4:7: error: probability '-2.0e+0' is outside the range [0.0, 1.0]
4 | if (__builtin_expect_with_probability(a, 1, -2.0f) >
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
during GIMPLE pass: profile_estimate
<source>:7:1: internal compiler error: in get_predictor_value, at
predict.cc:2695
7 | }
| ^
0x238b15e internal_error(char const*, ...)
???:0
0xa11270 fancy_abort(char const*, int, char const*)
???:0
0x1019629 tree_estimate_probability(bool)
???:0
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Compiler returned: 1
```