December 09, 2017
There are a number of NRV tests in the testsuite that do pointer comparison on what would otherwise be undefined behaviour.

For instance:
---
/**********************************/
// 13089

struct S13089
{
    @disable this(this);    // non nothrow
}

void* p13089;

S13089[1000] foo13089() nothrow
{
    typeof(return) data;
    p13089 = &data;
    return data;
}

void test13089()
{
    immutable data = foo13089();
    assert(p13089 == &data);
}
---

What 'p13089' points to after the scope of 'foo13089' closes is undefined, and NRV does not give us any semantic guarantee about what this code should do.

There should be better ways to validate that NRVO is happening.  I could perhaps put these in a new test file under runnable/testnrvo.d

Iain.
_______________________________________________
dmd-internals mailing list
dmd-internals@puremagic.com
http://lists.puremagic.com/mailman/listinfo/dmd-internals