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.