[Issue 21744] New: [REG 2.092.0] NRVO sometimes not performed when it should be
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Mar 22 00:54:42 UTC 2021
https://issues.dlang.org/show_bug.cgi?id=21744
Issue ID: 21744
Summary: [REG 2.092.0] NRVO sometimes not performed when it
should be
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: regression
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: n8sh.secondary at hotmail.com
The following code compiles before v2.092 but fails to compile in v2.092 due to
`@disable this(this)`. Digger identifies
https://github.com/dlang/dmd/pull/10885 as the PR that broke it.
---
// Commenting out `@safe:` will make this compile with no other changes.
@safe:
struct S(bool isVeryWeird)
{
@disable this(this);
static if (isVeryWeird)
{
uint notEnum = 2;
// Changing `maybeEnum` to a non-template function will make
// this compile with no other changes.
@property uint maybeEnum()()
{
// Replacing `return notEnum` with `return 0` will make
// this compile with no other changes.
return notEnum;
}
}
else
enum uint maybeEnum = 0;
// Removing the following `static if` block will make this compile
// with no other changes.
static if (__traits(compiles, { enum e = maybeEnum; }))
{
// Empty
}
@property S spawnAnother()() const
{
S result;
return result;
}
}
void main()
{
auto a = S!false.init;
auto b = a.spawnAnother; // Succeeds.
auto c = S!true.init;
auto d = c.spawnAnother; // Compile error.
}
---
--
More information about the Digitalmars-d-bugs
mailing list