void main returning int - why compiles?

Matthias Pleh matthias at net.at
Sat Jan 1 01:10:39 PST 2011

On 2011-01-01 09:32, Jonathan M Davis wrote:
> On Friday 31 December 2010 23:37:17 Daren Scot Wilson wrote:
>> I'm wondering why the following compiles.  I'm using LDC.  Perhaps it's a
>> bug, or there's some subtlety about D.   I have deliberately, out of a
>> combination of idleness and desire for mischief, have  main()  declared as
>> returning void, but with a return statement giving an integer.
>> If the first "half evil" return statement is uncommented, the corruption is
>> noticed by the compiler and it writes an error.
>> As shown, the "total evil" return statement gets a value from subroutine
>> foo().  Being somehow so perfect in its evilness, this passes through the
>> compiler without a burp.  The resulting executable returns zero (or my bash
>> shell defaults to zero when receiving nothing.)
>> When I get religion and like good boy declare main() as returing int, it
>> compiles in perfectly.  When executed, the program returns either number
>> according to which return statement is uncommented.
>> int foo(int x)   {
>> 	return x;
>> }
>> void main()   {
>> 	// return 333;   /* half evil */
>> 	return foo(666);  /* total evil */
>> }
> I don't know what LDC's current state is in terms of being up-to-date with the
> latest D. However, it is _not_ legal D to return a value from a void function.
> So, this is definitely a bug in LDC.
> - Jonathan M Davis

It's the same with dmd v2.051 on GNU/Linux

More information about the Digitalmars-d-learn mailing list