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 ***