https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109789
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2023-05-12
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
A better reduction:
extern float fabsf(float);
typedef long unsigned size_t;
float dsp_abs_max_ret;
extern float lsp_dsp_abs_max(void);
float dsp_abs_max(float *buf, size_t size) {
for (size_t i = 0; i < size; i++)
if (fabsf(buf[i]) > 1e-20f)
dsp_abs_max_ret = fabsf(buf[i]);
return dsp_abs_max_ret;
}
void export_audio(int nframes, float init, int count) {
do {
float tmp_l[nframes];
for (int i = 0; i < nframes; i++)
tmp_l[i] = init;
float max_amp = dsp_abs_max(tmp_l, nframes);
} while (--count);
}
a.c.i: In function ‘dsp_abs_max’:
a.c.i:11:18: error: use of uninitialized value ‘*buf_16(D) + _1’ [CWE-457]
[-Werror=analyzer-use-of-uninitialized-value]
11 | if (fabsf(buf[i]) > 1e-20f)
| ~~~^~~
‘export_audio’: events 1-5
|
| 15 | void export_audio(int nframes, float init, int count) {
| | ^~~~~~~~~~~~
| | |
| | (1) entry to ‘export_audio’
| 16 | do {
| 17 | float tmp_l[nframes];
| | ~~~~~
| | |
| | (2) region created on stack here
| 18 | for (int i = 0; i < nframes; i++)
| | ~~~~~~~~~~~
| | |
| | (3) following ‘false’ branch (when ‘i >=
nframes’)...
| 19 | tmp_l[i] = init;
| 20 | float max_amp = dsp_abs_max(tmp_l, nframes);
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (4) ...to here
| | (5) calling ‘dsp_abs_max’ from ‘export_audio’
|
+--> ‘dsp_abs_max’: events 6-9
|
| 9 | float dsp_abs_max(float *buf, size_t size) {
| | ^~~~~~~~~~~
| | |
| | (6) entry to ‘dsp_abs_max’
| 10 | for (size_t i = 0; i < size; i++)
| | ~~~~~~~~
| | |
| | (7) following ‘true’ branch (when ‘i
< size’)...
| 11 | if (fabsf(buf[i]) > 1e-20f)
| | ~~~~~~
| | |
| | (8) ...to here
| | (9) use of uninitialized value ‘*buf_16(D)
+ _1’ here
|
a.c.i:11:18: error: use of uninitialized value ‘*buf_16(D) + _1’ [CWE-457]
[-Werror=analyzer-use-of-uninitialized-value]
11 | if (fabsf(buf[i]) > 1e-20f)
| ~~~^~~
‘export_audio’: events 1-5
|
| 15 | void export_audio(int nframes, float init, int count) {
| | ^~~~~~~~~~~~
| | |
| | (1) entry to ‘export_audio’
| 16 | do {
| 17 | float tmp_l[nframes];
| | ~~~~~
| | |
| | (2) region created on stack here
| 18 | for (int i = 0; i < nframes; i++)
| | ~~~~~~~~~~~
| | |
| | (3) following ‘false’ branch (when ‘i >=
nframes’)...
| 19 | tmp_l[i] = init;
| 20 | float max_amp = dsp_abs_max(tmp_l, nframes);
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (4) ...to here
| | (5) calling ‘dsp_abs_max’ from ‘export_audio’
|
+--> ‘dsp_abs_max’: events 6-11
|
| 9 | float dsp_abs_max(float *buf, size_t size) {
| | ^~~~~~~~~~~
| | |
| | (6) entry to ‘dsp_abs_max’
| 10 | for (size_t i = 0; i < size; i++)
| | ~~~~~~~~
| | |
| | (7) following ‘true’ branch (when ‘i
< size’)...
| | (9) following ‘true’ branch (when ‘i
< size’)...
| 11 | if (fabsf(buf[i]) > 1e-20f)
| | ~~~~~~
| | |
| | (8) ...to here
| | (10) ...to here
| | (11) use of uninitialized value
‘*buf_16(D) + _1’ here
|
a.c.i:12:34: error: use of uninitialized value ‘*buf_16(D) + _5’ [CWE-457]
[-Werror=analyzer-use-of-uninitialized-value]
12 | dsp_abs_max_ret = fabsf(buf[i]);
| ~~~^~~
‘export_audio’: events 1-5
|
| 15 | void export_audio(int nframes, float init, int count) {
| | ^~~~~~~~~~~~
| | |
| | (1) entry to ‘export_audio’
| 16 | do {
| 17 | float tmp_l[nframes];
| | ~~~~~
| | |
| | (2) region created on stack here
| 18 | for (int i = 0; i < nframes; i++)
| | ~~~~~~~~~~~
| | |
| | (3) following ‘false’ branch (when ‘i >=
nframes’)...
| 19 | tmp_l[i] = init;
| 20 | float max_amp = dsp_abs_max(tmp_l, nframes);
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (4) ...to here
| | (5) calling ‘dsp_abs_max’ from ‘export_audio’
|
+--> ‘dsp_abs_max’: events 6-11
|
| 9 | float dsp_abs_max(float *buf, size_t size) {
| | ^~~~~~~~~~~
| | |
| | (6) entry to ‘dsp_abs_max’
| 10 | for (size_t i = 0; i < size; i++)
| | ~~~~~~~~
| | |
| | (7) following ‘true’ branch (when ‘i
< size’)...
| 11 | if (fabsf(buf[i]) > 1e-20f)
| | ~ ~
| | | |
| | | (8) ...to here
| | (9) following ‘true’ branch...
| 12 | dsp_abs_max_ret = fabsf(buf[i]);
| | ~~~~~~
| | |
| | (10) ...to here
| | (11) use of uninitialized
value ‘*buf_16(D) + _5’ here
|
a.c.i:12:34: error: use of uninitialized value ‘*buf_16(D) + _5’ [CWE-457]
[-Werror=analyzer-use-of-uninitialized-value]
12 | dsp_abs_max_ret = fabsf(buf[i]);
| ~~~^~~
‘export_audio’: events 1-5
|
| 15 | void export_audio(int nframes, float init, int count) {
| | ^~~~~~~~~~~~
| | |
| | (1) entry to ‘export_audio’
| 16 | do {
| 17 | float tmp_l[nframes];
| | ~~~~~
| | |
| | (2) region created on stack here
| 18 | for (int i = 0; i < nframes; i++)
| | ~~~~~~~~~~~
| | |
| | (3) following ‘false’ branch (when ‘i >=
nframes’)...
| 19 | tmp_l[i] = init;
| 20 | float max_amp = dsp_abs_max(tmp_l, nframes);
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (4) ...to here
| | (5) calling ‘dsp_abs_max’ from ‘export_audio’
|
+--> ‘dsp_abs_max’: events 6-11
|
| 9 | float dsp_abs_max(float *buf, size_t size) {
| | ^~~~~~~~~~~
| | |
| | (6) entry to ‘dsp_abs_max’
| 10 | for (size_t i = 0; i < size; i++)
| | ~~~~~~~~
| | |
| | (7) following ‘true’ branch (when ‘i
< size’)...
| | (9) following ‘true’ branch (when ‘i
< size’)...
| 11 | if (fabsf(buf[i]) > 1e-20f)
| | ~
| | |
| | (8) ...to here
| | (10) ...to here
| 12 | dsp_abs_max_ret = fabsf(buf[i]);
| | ~~~~~~
| | |
| | (11) use of uninitialized
value ‘*buf_16(D) + _5’ here
|
cc1: some warnings being treated as errors
It seems to be related to the use of a VLA for the array.