$ cat test.c void f() { // missing set-but-unused char *li = 0; *li = 0; // missing dereference-null ? } $ /usr/local/gcc_current_193387/bin/gcc -Wall -Wextra -Ofast test.c -c $ /usr/local/gcc_current_193387/bin/gcc -v Using built-in specs. COLLECT_GCC=/usr/local/gcc_current_193387/bin/gcc COLLECT_LTO_WRAPPER=/usr/local/gcc_current_193387/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.8.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: /home/dimhen/src/gcc-current/configure --prefix=/usr/local/gcc_current --with-multilib-list=m64 --enable-__cxa_atexit --enable-shared --enable-checking=yes,df,fold,rtl,tree --enable-gnu-unique-object --enable-linker-build-id --enable-languages=c,c++,lto --enable-plugin --enable-version-specific-runtime-libs --with-tune=generic Thread model: posix gcc version 4.8.0 20121110 (experimental) [trunk revision 193387] (GCC)
The pointer is used in *li = 0; statement.
oh, was over-simplified example. Sorry void f1() { char ch; char *p = &ch; *p = 0; } Now 2 variables are 'set-but-unused'?
No, they are both used. ch in &ch, and p in *p.