Hi,
why does gcc (4.4.7 and 4.8.2) sometimes warn and sometimes not warn
when undefined behavior is invoked when making illegal function
pointer conversions?
For instance, consider the code below:
---------
/* Tested with gcc 4.4.7 and 4.8.2 */
#include <stdio.h>
#include <stdbool.h>
bool boolFunctionThatReturnsFalse() { return false; }
typedef int (*intFunction)(void);
int
main()
{
/* no warning here, just undefined behavior */
intFunction f = (intFunction) boolFunctionThatReturnsFalse;
if ( f() )
printf("true\n");
else
printf("false\n");
/* gcc warns and emits abort code */
if ( ((intFunction) boolFunctionThatReturnsFalse) () )
printf("true\n");
else
printf("false\n");
}
---------------
Why does assigning boolFunctionThatReturnsFalse to a variable f after
the cast, instead of directly dereferencing it, silence the compiler's
warnings?
Thanks.
- Godmar
ps: I would like to see the warning, of course, since casting a bool
returning function to an int returning function is undefined behavior.