blob: f6cab893bb44e222a769954c1804b2a9ad09d26a [file] [log] [blame]
/*
Informative error messages if the compiler inserted an optional destructor call into the constructor.
REQUIRED_ARGS: -preview=dtorfields
TEST_OUTPUT:
---
fail_compilation/dtorfields_attributes.d(117): Error: `pure` constructor `dtorfields_attributes.Strict.this` cannot call impure destructor `dtorfields_attributes.Strict.~this`
fail_compilation/dtorfields_attributes.d(119): generated `Strict.~this` is impure because of the following field's destructors:
fail_compilation/dtorfields_attributes.d(115): - HasDtor member
fail_compilation/dtorfields_attributes.d(103): impure `HasDtor.~this` is declared here
fail_compilation/dtorfields_attributes.d(117): Error: `@safe` constructor `dtorfields_attributes.Strict.this` cannot call `@system` destructor `dtorfields_attributes.Strict.~this`
fail_compilation/dtorfields_attributes.d(119): `dtorfields_attributes.Strict.~this` is declared here
fail_compilation/dtorfields_attributes.d(119): generated `Strict.~this` is @system because of the following field's destructors:
fail_compilation/dtorfields_attributes.d(115): - HasDtor member
fail_compilation/dtorfields_attributes.d(103): @system `HasDtor.~this` is declared here
fail_compilation/dtorfields_attributes.d(117): Error: `@nogc` constructor `dtorfields_attributes.Strict.this` cannot call non-@nogc destructor `dtorfields_attributes.Strict.~this`
fail_compilation/dtorfields_attributes.d(119): generated `Strict.~this` is non-@nogc because of the following field's destructors:
fail_compilation/dtorfields_attributes.d(115): - HasDtor member
fail_compilation/dtorfields_attributes.d(103): non-@nogc `HasDtor.~this` is declared here
---
*/
#line 100
struct HasDtor
{
~this()
{
// Enforce @system, ... just to be sure
__gshared int i;
if (++i)
throw new Exception(new immutable(char)[](10));
}
}
// The user-defined dtor matches the ctor attributes
struct Strict
{
HasDtor member;
this(int) pure @nogc @safe {} // nothrow doesn't generate dtor call
~this() pure @nogc @safe {}
}