www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 3574] New: post-condition is not evaluated if there is no return statement

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3574

           Summary: post-condition is not evaluated if there is no return
                    statement
           Product: D
           Version: unspecified
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: 2korden gmail.com



---
import std.stdio;

void main()
out
{
    writeln("out");
}
body
{
    //return;
}

"out" is only printed if return is explicit.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 04 2009
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3574


Don <clugdbug yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |clugdbug yahoo.com.au
            Version|unspecified                 |1.00



Applies to D1 (even ancient versions) as well as D2.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 27 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3574


Don <clugdbug yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch
            Summary|post-condition is not       |post-condition in void
                   |evaluated if there is no    |main() is not evaluated if
                   |return statement            |there is no return
                   |                            |statement



This is a very obscure bug; it's of interest for educational purposes only.
Only void main() is affected, and it's because the return 0; needs to be added
AFTER the invariant is processed, not before.
This patch (against DMD2, svn 356) just moves the return 0; insertion slightly
later in FuncDeclaration::semantic3().


Index: func.c
===================================================================
--- func.c    (revision 356)
+++ func.c    (working copy)
   -1287,16 +1287,8   

         int offend = blockexit & BEfallthru;
 #endif
-        if (type->nextOf()->ty == Tvoid)
+        if (type->nextOf()->ty != Tvoid)
         {
-            if (offend && isMain())
-            {    // Add a return 0; statement
-            Statement *s = new ReturnStatement(0, new IntegerExp(0));
-            fbody = new CompoundStatement(0, fbody, s);
-            }
-        }
-        else
-        {
             if (offend)
             {   Expression *e;
 #if DMDV1
   -1462,8 +1454,17   
             }
             ReturnStatement *s = new ReturnStatement(0, e);
             a->push(s);
-        }
+        } 
         }
+#if DMDV2
+        int blockexit = fbody ? fbody->blockExit() : BEfallthru;
+        int offend = blockexit & BEfallthru;
+#endif
+        if (offend && isMain() && type->nextOf()->ty == Tvoid)
+        {   // For void main(), add a 'return 0' statement
+        ReturnStatement *s = new ReturnStatement(0, new IntegerExp(0));
+        a->push(s);
+        }

         fbody = new CompoundStatement(0, a);
 #if DMDV2

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 28 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3574


Don <clugdbug yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|patch                       |



Oops, there's something wrong with this patch. It can interfere badly with
foreach for some reason.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 28 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3574


Kenji Hara <k.hara.pg gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull
           Platform|Other                       |All
            Version|1.00                        |D1 & D2



https://github.com/D-Programming-Language/dmd/pull/986

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 06 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3574




Commits pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/2b05220ce3c10602748037189cfd6f3123faafd7
fix Issue 3574 - post-condition in void main() is not evaluated if there is no
return statement

https://github.com/D-Programming-Language/dmd/commit/48d389b430b16b61d5f101485deb004a50b3a700


Issue 3574 - post-condition in void main() is not evaluated if there is no
return statement

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 11 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3574


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |bugzilla digitalmars.com
         Resolution|                            |FIXED


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 11 2012