D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 4701 - Should returning a value in a void function be downgraded to a warning?
Summary: Should returning a value in a void function be downgraded to a warning?
Status: RESOLVED DUPLICATE of issue 3922
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P2 normal
Assignee: No Owner
URL:
Keywords: diagnostic
Depends on:
Blocks:
 
Reported: 2010-08-21 02:59 UTC by Iain Buclaw
Modified: 2015-06-09 05:11 UTC (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Iain Buclaw 2010-08-21 02:59:18 UTC
The code:
void main()
{
    return true;
}


Results in the compiler error:
test.d(3): Error: long has no effect in expression (true)

Which makes sense, but doesn't really indicate the reasoning very well.
Shouldn't it be instead downgraded to a warning? ie - based on GCC's message:

test.c:(3): Warning: ignoring return value in function returning void

This currently blocks some old D software from building (that, I know, should really be updated. :)

Regards
Iain
Comment 1 Jonathan M Davis 2010-08-21 04:02:01 UTC
1. Walter hates warnings. He pretty much thinks that everything should either be an error or not. So, you're generally going to have a hard time getting him to make anything a warning.

2. Returning a value from a void function is outright incorrect. It's not that it _might_ be incorrect or that it _might_ cause errors. It is _definitely_ incorrect. I have no idea why gcc wouldn't make that an outright error. It should be. Then again, C is historically lax about a lot of things that you'd think that it would consider errors, so that's probably why. Still, I see no reason to make D match gcc is this regard. D makes the correct choice here.
Comment 2 Iain Buclaw 2010-08-21 04:29:24 UTC
(In reply to comment #1)
> 1. Walter hates warnings. He pretty much thinks that everything should either
> be an error or not. So, you're generally going to have a hard time getting him
> to make anything a warning.
> 

I beg to differ, but it's his language, so he is allowed to enforce that.

> 2. Returning a value from a void function is outright incorrect. It's not that
> it _might_ be incorrect or that it _might_ cause errors. It is _definitely_
> incorrect. I have no idea why gcc wouldn't make that an outright error. It
> should be. Then again, C is historically lax about a lot of things that you'd
> think that it would consider errors, so that's probably why. Still, I see no
> reason to make D match gcc is this regard. D makes the correct choice here.

OK then, when the package maintainer goes chasing up my street for the software affected by the update, I'll let him know it's his fault. ;-)

I still think this should be a diagnostic bug though, as the error message does not relate in any way to what the programmer is trying to do.
Comment 3 Iain Buclaw 2010-08-21 04:36:46 UTC
(In reply to comment #2)
> I still think this should be a diagnostic bug though, as the error message does
> not relate in any way to what the programmer is trying to do.

Or accidentally did.
Comment 4 bearophile_hugs 2010-08-21 04:40:54 UTC
This is always bug, no need for warnings here.
The error message is indeed wrong, on it I have bug 3922
So I think this bug report may be closed.
Comment 5 Iain Buclaw 2010-08-21 04:47:59 UTC
Thanks, marked as dupe. :-)

*** This issue has been marked as a duplicate of issue 3922 ***