[Issue 4434] ICE(mtype.c, 887) alias with const, shared, or immutable

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Nov 3 05:22:58 PDT 2010


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


Don <clugdbug at yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch


--- Comment #4 from Don <clugdbug at yahoo.com.au> 2010-11-03 05:21:34 PDT ---
According to TDPL, const T[] is supposed to mean const(const(T)[]).
But currently, it isn't; it's  const(mutable(T)[])
This happens because mtype.c, TypeNext::makeConst() includes a line which
should be deleted:

    if (ty != Tfunction && ty != Tdelegate &&
-        (next->deco || next->ty == Tfunction) &&
        !next->isImmutable() && !next->isConst())
    {   if (next->isShared())
            t->next = next->sharedConstOf();
        else
            t->next = next->constOf();
    }
which means that it's not making the array contents const.
Same change also needs to be applied to TypeNext::makeShared(),
makeSharedConst(), makeInvariant()
and possibly also to makeWild().

Test cases:
-----
struct Bug4434 {}
alias const Bug4434* IceConst4434;
alias shared Bug4434* IceShared4434;
alias shared Bug4434[] IceSharedArray4434;
alias immutable Bug4434* IceImmutable4434;
alias shared const Bug4434* IceSharedConst4434;

alias int MyInt4434;
alias const MyInt4434[3] IceConstInt4434;

alias immutable string[] Bug4830;
---

This patch also fixes these bugs:

Bug 4366 ICE(mtype.c) constrained template pure function with array/pointer
parameter
Bug 4709 ICE(mtype.c): undefined variable in const struct
Bug 4743 ICE(mtype.c) involving "in UnknownType*"
Bug 4830 Regression(2.038) ICE mtype.c:879: void Type::check(): Assertion
`tn->mod == 4' failed
Bug 4871 ICE(mtype.c 875) const alias
Bug 4964 ICE(mtype.c) casting to undefined types
Bug 4980 ICE(mtype.c) on unknown type in a shared class/struct

-- 
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