Bug 4701 – Should returning a value in a void function be downgraded to a warning?
Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2010-08-21T02:59:00Z
Last change time
2015-06-09T05:11:36Z
Keywords
diagnostic
Assigned to
nobody
Creator
ibuclaw
Comments
Comment #0 by ibuclaw — 2010-08-21T02:59:18Z
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 by issues.dlang — 2010-08-21T04:02:01Z
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 by ibuclaw — 2010-08-21T04:29:24Z
(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 by ibuclaw — 2010-08-21T04:36:46Z
(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 by bearophile_hugs — 2010-08-21T04:40:54Z
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 by ibuclaw — 2010-08-21T04:47:59Z
Thanks, marked as dupe. :-)
*** This issue has been marked as a duplicate of issue 3922 ***