[dmd-internals] NRVO tests check for essentially undefined behaviour
Iain Buclaw
ibuclaw at gdcproject.org
Sat Dec 9 14:01:59 UTC 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.
More information about the dmd-internals
mailing list