Thread overview
[Issue 7046] New: CTFE: append null does nothing
Dec 02, 2011
Adam D. Ruppe
Dec 02, 2011
Don
Dec 02, 2011
Don
Dec 02, 2011
Adam D. Ruppe
Dec 02, 2011
Adam D. Ruppe
Dec 14, 2011
Don
December 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7046

           Summary: CTFE: append null does nothing
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: destructionator@gmail.com


--- Comment #0 from Adam D. Ruppe <destructionator@gmail.com> 2011-12-01 18:07:38 PST ---
string[] test() {
    string[] ret;

    ret ~= null;
    ret ~= null;

    assert(ret.length == 2); // fails
    return ret;
}

void main() {
    enum ctfe = test();
}

===
test90.d(7): Error: assert(ret.length == 2u) failed
test90.d(12):        called from here: a()

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7046


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |clugdbug@yahoo.com.au


--- Comment #1 from Don <clugdbug@yahoo.com.au> 2011-12-02 02:57:40 PST ---
This works on git HEAD. Probably a duplicate of a recently fixed bug.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7046


Steven Schveighoffer <schveiguy@yahoo.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |schveiguy@yahoo.com


--- Comment #2 from Steven Schveighoffer <schveiguy@yahoo.com> 2011-12-02 04:30:34 PST ---
Are we sure this isn't expected?  I mean a null could mean a null string[], not a null string.

string[] ret;
string[] a = null;

ret ~= a;
ret ~= a;

neither of these lines should do anything to ret, since they are empty arrays of the same type.

I almost think the code in question should fail to compile for being too ambiguous.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7046



--- Comment #3 from Don <clugdbug@yahoo.com.au> 2011-12-02 04:44:28 PST ---
See bug 2006.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7046


bearophile_hugs@eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs@eml.cc


--- Comment #4 from bearophile_hugs@eml.cc 2011-12-02 04:48:35 PST ---
(In reply to comment #2)

> I almost think the code in question should fail to compile for being too ambiguous.

Right.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7046



--- Comment #5 from Steven Schveighoffer <schveiguy@yahoo.com> 2011-12-02 04:54:29 PST ---
(In reply to comment #3)
> See bug 2006.

So is this a dupe?  I'm concerned there was a change in git that makes this "work."  Moving from one ambiguous interpretation to another doesn't sound like progress.

Do we have some definitive answer on what *should* happen?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7046



--- Comment #6 from Adam D. Ruppe <destructionator@gmail.com> 2011-12-02 07:47:17 PST ---
(In reply to comment #2)
> I mean a null could mean a null string[], not a null string.

I oversimplified the test - in the original code it came from, it was more like

string a = null;
ret ~= a;

which gets the same result in 2.056

I haven't tried git though. I'm not sure how to use that yet!

> I almost think the code in question should fail to compile for being too ambiguous.

With null itself... maybe. In the case of string[], ~= null could
have two meanings, but one of them is pretty obviously a no-op, so it's
probably not what you meant.

If a variable happens to be null, maybe doing nothing is what you wanted, but in that case, the variable has an exact type declared so it's not ambiguous anymore.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 02, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7046



--- Comment #7 from Adam D. Ruppe <destructionator@gmail.com> 2011-12-02 07:53:36 PST ---
BTW, I labeled this as CTFE because in 2.056, running the same function at runtime, the assert passes.

I think this worked in CTFE a couple releases ago too, and since it works in the git version again, it was probably just a temporary regression in the interpreter.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
December 14, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7046


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |DUPLICATE


--- Comment #8 from Don <clugdbug@yahoo.com.au> 2011-12-14 08:35:17 PST ---
This compiled on DMD2.053, but generated wrong code. It failed to compile on 2.054 to 2.056. Fixed 2.057 -- dup of bug 6077

*** This issue has been marked as a duplicate of issue 6077 ***

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