mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
43 lines
2.1 KiB
Makefile
43 lines
2.1 KiB
Makefile
/*
|
|
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 {}
|
|
}
|