www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 10842] New: auto return function not executed depending on how it's called

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

           Summary: auto return function not executed depending on how
                    it's called
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: critical
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: thelastmammoth gmail.com


--- Comment #0 from thelastmammoth gmail.com 2013-08-17 18:28:51 PDT ---
dmd -version=A -run main.d: prints nothing
dmd -version=B -run main.d: prints ok

----
auto fail(){
  import std.stdio;
  writeln("ok");
  /+
  //would be same with this: 
  assert(0);
  //or this:
  import std.exception; throw new Exception("bad");
  +/
  return null;
}

string foo(){
    version(A){
      auto temp=fail();
      return temp;
    }
    else
      return fail();
}

void main(){
  foo();
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 17 2013
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10842


Andrej Mitrovic <andrej.mitrovich gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |andrej.mitrovich gmail.com


--- Comment #1 from Andrej Mitrovic <andrej.mitrovich gmail.com> 2013-08-17
18:40:12 PDT ---
Reduced:

-----
auto ret1()
{
    assert(0);  // should throw, doesn't
    return null;
}

string test1()
{
    return ret1();
}

void main()
{
    test1();
}
-----

If you change the return to an explicit expression, e.g. `return ""`, then the
assert is triggered.

Also perhaps noteworthy is that in older releases the reduced code used to fail
to compile, e.g. in 2.057:

Error: e2ir: cannot cast ret1() of type typeof(null) to type string

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 17 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10842



--- Comment #2 from thelastmammoth gmail.com 2013-08-17 18:58:29 PDT ---
 If you change the return to an explicit expression, e.g. `return ""`, then the
 assert is triggered.
In my case I want to make it work with arbitrary types, not just strings, do you have a suggestion for this? ( I just posted a suggestion here: http://forum.dlang.org/thread/mailman.160.1376790770.1719.digitalmars-d-learn puremagic.com "how to get enclosing function as symbol ? (eg: __function__.stringof ==__FUNCTION__)" which would allow this among other things. ) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 17 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10842



--- Comment #3 from Andrej Mitrovic <andrej.mitrovich gmail.com> 2013-08-17
19:09:05 PDT ---
(In reply to comment #2)
 Reduced:
Actually the bug is unrelated to auto, but instead related to typeof(null): ----- typeof(null) ret1() { assert(0); // not thrown return null; } string test1() { return ret1(); } void main() { test1(); } ----- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 17 2013
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10842


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |pull
            Summary|auto return function not    |Some integer casts wrongly
                   |executed depending on how   |remove side-effect of the
                   |it's called                 |operand.


--- Comment #4 from Kenji Hara <k.hara.pg gmail.com> 2013-09-28 23:12:47 PDT ---
https://github.com/D-Programming-Language/dmd/pull/2597

The problem is in CastExp::toElem, it sometimes remove the side effect of the
cast operand.

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



--- Comment #5 from github-bugzilla puremagic.com 2013-10-08 20:55:26 PDT ---
Commits pushed to master at https://github.com/D-Programming-Language/dmd

https://github.com/D-Programming-Language/dmd/commit/7123433d77bde06769d9227df8f5b3814117b1e6
fix Issue 10842 - Some integer casts wrongly remove side-effect of the operand

https://github.com/D-Programming-Language/dmd/commit/175c85bc5658aae266c061d2c3c42a0607325676
Merge pull request #2597 from 9rnsr/fix10842

Issue 10842 - Some integer casts wrongly remove side-effect of the operand.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 08 2013
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10842


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: -------
Oct 08 2013