view gcc/testsuite/gdc.test/fail_compilation/fail9665b.d @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents 1830386684a0
children
line wrap: on
line source

/***************************************************/
// with disable this() struct

struct X
{
    @disable this();

    this(int) {}
}

/+
TEST_OUTPUT:
---
fail_compilation/fail9665b.d(32): Error: one path skips field x2
fail_compilation/fail9665b.d(33): Error: one path skips field x3
fail_compilation/fail9665b.d(35): Error: one path skips field x5
fail_compilation/fail9665b.d(36): Error: one path skips field x6
fail_compilation/fail9665b.d(30): Error: field x1 must be initialized in constructor
fail_compilation/fail9665b.d(30): Error: field x4 must be initialized in constructor
---
+/
struct S1
{
    X x1;
    X x2;
    X x3;
    X[2] x4;
    X[2] x5;
    X[2] x6;
    this(int)
    {
        if (true) x2 = X(1);
        auto n = true ? (x3 = X(1)) : X.init;

        if (true) x5 = X(1);
        auto m = true ? (x6 = X(1)) : typeof(x6).init;
    }
}

/***************************************************/
// with nested struct

/+
TEST_OUTPUT:
---
fail_compilation/fail9665b.d(65): Error: one path skips field x2
fail_compilation/fail9665b.d(66): Error: one path skips field x3
fail_compilation/fail9665b.d(68): Error: one path skips field x5
fail_compilation/fail9665b.d(69): Error: one path skips field x6
fail_compilation/fail9665b.d(63): Error: field x1 must be initialized in constructor, because it is nested struct
fail_compilation/fail9665b.d(63): Error: field x4 must be initialized in constructor, because it is nested struct
fail_compilation/fail9665b.d(76): Error: template instance fail9665b.S2!(X) error instantiating
---
+/
struct S2(X)
{
    X x1;
    X x2;
    X x3;
    X[2] x4;
    X[2] x5;
    X[2] x6;
    this(X x)
    {
        if (true) x2 = x;
        auto a = true ? (x3 = x) : X.init;

        if (true) x5 = x;
        auto b = true ? (x6 = x) : typeof(x6).init;
    }
}
void test2()
{
    struct X { this(int) {} }
    static assert(X.tupleof.length == 1);
    S2!(X) s = X(1);
}