www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Passing stack allocated string to `assert`

reply Jacob Carlborg <doob me.com> writes:
This code compiles with DMD 2.089.0 with the `-dip1000` flag:

void main()  safe
{
     char[10] buffer = "0123456789";
     assert(false, buffer[]);
}

Running this code will obviously assert, but the assert message 
contains garbage. Should DIP1000 be able to catch this?

--
/Jacob Carlborg
Dec 17 2019
next sibling parent reply Petar Kirov [ZombineDev] <petar.p.kirov gmail.com> writes:
On Tuesday, 17 December 2019 at 08:47:49 UTC, Jacob Carlborg 
wrote:
 This code compiles with DMD 2.089.0 with the `-dip1000` flag:

 void main()  safe
 {
     char[10] buffer = "0123456789";
     assert(false, buffer[]);
 }

 Running this code will obviously assert, but the assert message 
 contains garbage. Should DIP1000 be able to catch this?

 --
 /Jacob Carlborg
Yes, depending on which druntime function the assert is lowered to.
Dec 17 2019
parent Petar Kirov [ZombineDev] <petar.p.kirov gmail.com> writes:
On Tuesday, 17 December 2019 at 09:21:42 UTC, Petar Kirov 
[ZombineDev] wrote:
 On Tuesday, 17 December 2019 at 08:47:49 UTC, Jacob Carlborg 
 wrote:
 This code compiles with DMD 2.089.0 with the `-dip1000` flag:

 void main()  safe
 {
     char[10] buffer = "0123456789";
     assert(false, buffer[]);
 }

 Running this code will obviously assert, but the assert 
 message contains garbage. Should DIP1000 be able to catch this?

 --
 /Jacob Carlborg
Yes, depending on which druntime function the assert is lowered to.
But if it's not lowered to a template, but to an extern(C) funcion, like most of the old runtime functions, it's not surprising that it didn't check it thoroughly. We really need to phase out those runtime functions from druntime.
Dec 17 2019
prev sibling parent reply Walter Bright <newshound2 digitalmars.com> writes:
On 12/17/2019 12:47 AM, Jacob Carlborg wrote:
 This code compiles with DMD 2.089.0 with the `-dip1000` flag:
 
 void main()  safe
 {
      char[10] buffer = "0123456789";
      assert(false, buffer[]);
 }
 
 Running this code will obviously assert, but the assert message contains 
 garbage. Should DIP1000 be able to catch this?
Please add to bugzilla.
Dec 18 2019
parent Jacob Carlborg <doob me.com> writes:
On 2019-12-18 23:25, Walter Bright wrote:

 Please add to bugzilla.
Done: https://issues.dlang.org/show_bug.cgi?id=20461. -- /Jacob Carlborg
Dec 21 2019