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


--- Comment #0 from Koroskin Denis <2korden gmail.com> 2009-12-04 05:52:43 PST
---
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


--- Comment #1 from Don <clugdbug yahoo.com.au> 2010-01-27 02:47:38 PST ---
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


--- Comment #2 from Don <clugdbug yahoo.com.au> 2010-01-28 00:29:30 PST ---
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 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                       |


--- Comment #3 from Don <clugdbug yahoo.com.au> 2010-01-28 14:00:19 PST ---
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