[Issue 11268] Cannot use non-constant CTFE pointer in an initializer

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Oct 18 00:25:27 PDT 2013


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


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |rejects-valid
            Summary|[REG 2.064beta] cannot use  |Cannot use non-constant
                   |non-constant CTFE pointer   |CTFE pointer in an
                   |in an initializer           |initializer
           Severity|regression                  |normal


--- Comment #5 from Don <clugdbug at yahoo.com.au> 2013-10-18 00:25:23 PDT ---
(In reply to comment #4)
> (In reply to comment #3)
> > This isn't a regression. It used to compile, but it generated wrong code.
> 
> This also used to compile and fail the assert:
> 
>     const foo = "foo";
>     const(char)* p = foo.ptr;
> 
>     void main()
>     {
>         assert(p == foo.ptr);
>     }
> 
> (although I did not rely on that behavior, so for me this was a regression)

The compiler was still generating wrong code.
I'm downgrading this bug from regression to rejects-valid, since AFAIK there
were no cases where the compiler generated correct code.

Sometimes there are "regressions" where something no longer compiles that was
previously wrong, but happened to work in a few special cases. But this doesn't
even seem to be one of those issues. It was always wrong.

> But if you change to:
> 
>     const foo = "foo";
>     const(char)* p = foo; // remove .ptr
> 
>     void main()
>     {
>         assert(p == foo.ptr);
>     }
> 
> It still compiles with git head, and fails the assert.

Interesting. I'm not sure if that's a bug, or not. It's a slightly different
case though.
It's treating "foo" as a rvalue, not an lvalue. It evaluates foo, and the
implicit conversion to char * happens afterwards. But with ".ptr" it _has_ to
treat foo as an lvalue. while evaluating it. So the order of evaluation is
different.

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