Fix #2599. The compiler handled all functions returning an int but without a
"return" statement by silently adding "return 0" instead of emitting a warning. This is the desired behavior for the "main" function in C99 and above, but the compiler applied it to all functions.
This commit is contained in:
@@ -636,7 +636,9 @@ void NewFunc (SymEntry* Func, FuncDesc* D)
|
|||||||
/* If this is the main function in a C99 environment returning an int,
|
/* If this is the main function in a C99 environment returning an int,
|
||||||
** let it always return zero. Otherwise output a warning.
|
** let it always return zero. Otherwise output a warning.
|
||||||
*/
|
*/
|
||||||
if (IS_Get (&Standard) >= STD_C99 && GetUnqualRawTypeCode (ReturnType) == T_INT) {
|
if (F_IsMainFunc (CurrentFunc) &&
|
||||||
|
IS_Get (&Standard) >= STD_C99 &&
|
||||||
|
GetUnqualRawTypeCode (ReturnType) == T_INT) {
|
||||||
g_getimmed (CF_INT | CF_CONST, 0, 0);
|
g_getimmed (CF_INT | CF_CONST, 0, 0);
|
||||||
} else if (IS_Get (&WarnReturnType)) {
|
} else if (IS_Get (&WarnReturnType)) {
|
||||||
Warning ("Control reaches end of non-void function [-Wreturn-type]");
|
Warning ("Control reaches end of non-void function [-Wreturn-type]");
|
||||||
|
|||||||
Reference in New Issue
Block a user