Thread overview
seg fault due to a ref parameter with default value
Mar 20, 2013
Rob T
Mar 21, 2013
bearophile
Mar 21, 2013
Rob T
Mar 21, 2013
Jonathan M Davis
Mar 21, 2013
Rob T
Mar 21, 2013
deadalnix
March 20, 2013
void f( ref string a = "" )
{
   a = "crash and burn";
}

main()
{

  f(); // seg fault. This should not even compile.

}

I did not see a bug report on this one, but maybe I missed it.

Any comments before I submit a bug report?

--rt
March 21, 2013
Rob T:

> Any comments before I submit a bug report?

I don't see a crash (Win 32) but it should not compile.

Bye,
bearophile
March 21, 2013
On Thursday, 21 March 2013 at 00:30:41 UTC, bearophile wrote:
> Rob T:
>
>> Any comments before I submit a bug report?
>
> I don't see a crash (Win 32) but it should not compile.
>
> Bye,
> bearophile

I'm running it on Linux 64 with compiler optimizations enabled.

I think the solution to the problem is that it simply should not compile.

--rt
March 21, 2013
On Wednesday, 20 March 2013 at 23:12:37 UTC, Rob T wrote:
> void f( ref string a = "" )
> {
>    a = "crash and burn";
> }
>
> main()
> {
>
>   f(); // seg fault. This should not even compile.
>
> }
>
> I did not see a bug report on this one, but maybe I missed it.
>
> Any comments before I submit a bug report?
>
> --rt

I don't think "" should be an lvalue, so it should bind to ref parameter in the first place.
March 21, 2013
On Thursday, March 21, 2013 05:07:14 Rob T wrote:
> On Thursday, 21 March 2013 at 00:30:41 UTC, bearophile wrote:
> > Rob T:
> >> Any comments before I submit a bug report?
> > 
> > I don't see a crash (Win 32) but it should not compile.
> > 
> > Bye,
> > bearophile
> 
> I'm running it on Linux 64 with compiler optimizations enabled.
> 
> I think the solution to the problem is that it simply should not compile.

Of course it shouldn't compile. It's clearly an "accepts-invalid" bug. Literals aren't lvalues, and ref only accepts lvalues.

- Jonathan M Davis
March 21, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=9773