4 ms·
That helps, but is not bullet proof. Changes to optimization passes can cause warnings to be emitted in cases where they weren't previously. For example, detect
by larschdk 9y ago
That helps, but is not bullet proof. Changes to optimization passes can cause warnings to be emitted in cases where they weren't previously. For example, detection of an unused result of an expression.
- viraptor 9y agoI can't really think of any case where this is possible. Warnings are produced (only?) before the serious optimisation passes. Have you got an example where unused result warning changes between optimisation levels?
- Khoth 9y agoI've not seen an unused result warning change, but I've come across a case where a dead code warning appeared at higher optimisation levels when some function inlining revealed to the compiler that a certain function would call exit(). Still, I wouldn't expect so many of these that updating a new compiler would be too onerous.
- pm215 9y agoThese are, or used to be, quite common with gcc. Unused-result warnings require dataflow analysis to run to determine whether the values are used, and on no-optimisation compiles gcc didn't bother to do dataflow analysis. Conversely, here's one where a warning is produced only without -O2: orth$ cat z.c int foo (int a) { int x; if (a == 5) { x = 3; return 42; } return x; } orth$ gcc -O2 -Wall -o z.o -c z.c orth$ gcc -Wall -o z.o -c z.c z.c: In function ‘foo’: z.c:4:4: warning: ‘x’ may be used uninitialized in this function [-Wmaybe-uninitialized] return x; ^ orth$ gcc --version gcc (Debian 4.9.2-10) 4.9.2