Thread overview
[Issue 10842] New: auto return function not executed depending on how it's called
Aug 18, 2013
Andrej Mitrovic
Aug 18, 2013
Andrej Mitrovic
[Issue 10842] Some integer casts wrongly remove side-effect of the operand.
Sep 29, 2013
Kenji Hara
Oct 09, 2013
Walter Bright
August 18, 2013
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: -------
August 18, 2013
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: -------
August 18, 2013
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: -------
August 18, 2013
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: -------
September 29, 2013
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: -------
October 09, 2013
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: -------
October 09, 2013
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: -------