[Issue 11636] New: -unittest flag preserves assert() statements but still allows in/out contracts to be stripped
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Thu Nov 28 14:51:19 PST 2013
    
    
  
https://d.puremagic.com/issues/show_bug.cgi?id=11636
           Summary: -unittest flag preserves assert() statements but still
                    allows in/out contracts to be stripped
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: joseph.wakeling at webdrake.net
--- Comment #0 from Joseph Rushton Wakeling <joseph.wakeling at webdrake.net> 2013-11-28 14:51:13 PST ---
Created an attachment (id=1296)
Code to illustrate the bug: try running with -unittest, -release, and -unittest
-release flags
Adding the -unittest flag to a build means that any assert() statements in the
code will be preserved, even if the -release flag is also used.
However, -release will still strip out in/out contracts even if the -unittest
flag is used.  This can lead to unittest failures when e.g. the unittest checks
that an in-contract is respected by looking for an AssertError.
The attached code illustrates this: if run with
    rdmd -unittest contract.d
it runs without error, as the call to foo in main does not fail the in-contract
assert, and the unittest catches the AssertError.
Similarly, if run with
    rdmd -release contract.d
it also runs without error, as the unittests are not called and the in-contract
is stripped out, meaning foo will run even with incorrect input.
However, when run with
    rdmd -unittest -release contract.d
it will fail with an error:
    core.exception.AssertError at contract.d(27): assertThrown failed: No
AssertError was thrown.
which triggers because, while asserts are still active, the in-contract has
still been stripped, and hence the assert it contains is not called, and an
AssertError is not thrown.
This inconsistency should surely be fixed -- if -unittest requires assert
statements to be present, it should require _all_ assert statements be present,
including those in in- and out-contracts.
-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
    
    
More information about the Digitalmars-d-bugs
mailing list