[Issue 4241] New: duplicate union initialization error doesn't give a file location

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu May 27 10:48:59 PDT 2010


http://d.puremagic.com/issues/show_bug.cgi?id=4241

           Summary: duplicate union initialization error doesn't give a
                    file location
           Product: D
           Version: 2.041
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Keywords: diagnostic
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: mrmocool at gmx.de


--- Comment #0 from Trass3r <mrmocool at gmx.de> 2010-05-27 10:48:54 PDT ---
import std.typetuple;

/// repeat a type count times
template Repeat(T, int count)
{
    static if (!count)
        alias TypeTuple!() Repeat;
    else
        alias TypeTuple!(T, Repeat!(T, count-1)) Repeat;
}

struct Vector(T, int dim)
{
    static assert (dim >= 2 && dim <= 4);

    union
    {
// including these gives more errors of the same kind
//        T[dim] cell;            /// array access
//        Repeat!(T, dim) tuple;    /// for tuple access

        /// normal struct element access
        struct
        {
            static if (dim >= 1)    union { T x; T r; }
            static if (dim >= 2)    union { T y; T g; }
            static if (dim >= 3)    union { T z; T b; }
            static if (dim >= 4)    union { T w; T a; }
        }
    }

    // these constructors are workarounds for the "overlapping initialization
for _tuple_field_0" problem
    static if (dim == 2)
    this(T ax, T ay)
    {
        x = ax;
        y = ay;
    }

    static if (dim == 3)
    this(T ax, T ay, T az)
    {
        x = ax;
        y = ay;
        z = az;
    }

    static if (dim == 4)
    this(T ax, T ay, T az, T aw)
    {
        x = ax;
        y = ay;
        z = az;
        w = aw;
    }

    static if (2 == dim) const static Vector zero = Vector(0, 0);
    static if (3 == dim) const static Vector zero = Vector(0, 0, 0);
    static if (4 == dim) const static Vector zero = Vector(0, 0, 0, 0);
}

alias Vector!(float, 2)    Vector2f; ///
alias Vector!(float, 3)    Vector3f; ///
alias Vector!(float, 4)    Vector4f; ///

yields:
Error: duplicate union initialization for r
Error: duplicate union initialization for g
Error: duplicate union initialization for r
Error: duplicate union initialization for g
Error: duplicate union initialization for b
Error: duplicate union initialization for r
Error: duplicate union initialization for g
Error: duplicate union initialization for b
Error: duplicate union initialization for a


It would be helpful to have a file location.
Unfortunately for some reason loc is null in StructLiteralExp::toDt(dt_t **pdt)
where the error occurs.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list