Skip to content
Snippets Groups Projects
  • Arsen Arsenović's avatar
    f44575cb
    c-family: Implicitly return zero from main even on freestanding · f44575cb
    Arsen Arsenović authored
    ... unless marked noreturn.
    
    This should not get in anyone's way, but should permit the use of main()
    in freestanding more easily, especially for writing test cases that
    should work both in freestanding and hosted modes.
    
    gcc/c/ChangeLog:
    
    	* c-decl.cc (finish_function): Ignore hosted when deciding
    	whether to implicitly return zero, but check noreturn.
    	* c-objc-common.cc (c_missing_noreturn_ok_p): Loosen the
    	requirements to just MAIN_NAME_P when hosted, or `int main'
    	otherwise.
    
    gcc/cp/ChangeLog:
    
    	* cp-tree.h (DECL_MAIN_P): Move most logic, besides the hosted
    	check, from here...
    	(DECL_MAIN_ANY_P): ... to here, so that it can be reused ...
    	(DECL_MAIN_FREESTANDING_P): ... here, with an additional
    	constraint on (hosted OR return type == int)
    	* decl.cc (finish_function): Use DECL_MAIN_FREESTANDING_P
    	instead of DECL_MAIN_P, to loosen the hosted requirement, but
    	check noreturn, before adding implicit returns.
    
    gcc/testsuite/ChangeLog:
    
    	* gcc.dg/noreturn-4.c: Removed.
    	* g++.dg/freestanding-main.C: New test.
    	* g++.dg/freestanding-nonint-main.C: New test.
    	* gcc.dg/freestanding-main.c: New test.
    	* gcc.dg/freestanding-nonint-main.c: New test.
    f44575cb
    History
    c-family: Implicitly return zero from main even on freestanding
    Arsen Arsenović authored
    ... unless marked noreturn.
    
    This should not get in anyone's way, but should permit the use of main()
    in freestanding more easily, especially for writing test cases that
    should work both in freestanding and hosted modes.
    
    gcc/c/ChangeLog:
    
    	* c-decl.cc (finish_function): Ignore hosted when deciding
    	whether to implicitly return zero, but check noreturn.
    	* c-objc-common.cc (c_missing_noreturn_ok_p): Loosen the
    	requirements to just MAIN_NAME_P when hosted, or `int main'
    	otherwise.
    
    gcc/cp/ChangeLog:
    
    	* cp-tree.h (DECL_MAIN_P): Move most logic, besides the hosted
    	check, from here...
    	(DECL_MAIN_ANY_P): ... to here, so that it can be reused ...
    	(DECL_MAIN_FREESTANDING_P): ... here, with an additional
    	constraint on (hosted OR return type == int)
    	* decl.cc (finish_function): Use DECL_MAIN_FREESTANDING_P
    	instead of DECL_MAIN_P, to loosen the hosted requirement, but
    	check noreturn, before adding implicit returns.
    
    gcc/testsuite/ChangeLog:
    
    	* gcc.dg/noreturn-4.c: Removed.
    	* g++.dg/freestanding-main.C: New test.
    	* g++.dg/freestanding-nonint-main.C: New test.
    	* gcc.dg/freestanding-main.c: New test.
    	* gcc.dg/freestanding-nonint-main.c: New test.