www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 1924] New: fail to pragma compile time constant

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924

           Summary: fail to pragma compile time constant
           Product: D
           Version: 1.026
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: davidl 126.com


char[] wrongfunc()
{
    char[] result;
    pragma(msg, result);       // fail at this line
    return result;
}
mixin(wrongfunc);


-- 
Mar 14 2008
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924


fvbommel wxs.nl changed:

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




------- Comment #1 from fvbommel wxs.nl  2008-03-14 09:44 -------
Your 'result' is a variable that happens not to get assigned at runtime, but
the fact that it happens not to change doesn't mean it's a constant.


P.S. According to the spec it even needs to be a string literal (which I don't
think is what the compiler implements, since I'm pretty sure it allows string
constants constructed by templates and ctfe). But either way your code is
clearly illegal.


-- 
Mar 14 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924


davidl 126.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|INVALID                     |




------- Comment #2 from davidl 126.com  2008-03-15 00:23 -------
char[] wrongfunc()
{
    char[] result="void main()";
    result ~= "{}";
    const char[] myresult= result;
    pragma(msg, myresult);       // fail at this line
    return result;
}
mixin(wrongfunc);

abc.d(6): Error: string expected for message, not 'result'

pragma here is clearly for debugging CTFE. I don't want to make it as the
following 

char[] getresult()
{
    char[] result="void main()";
    result ~= "{}";
    return result;
}
char[] myfunc()
{
    const char[] result = getresult();
    pragma(msg,result);
    return result;
}
mixin(myfunc);

it's way dummier for debugging CTFE, especially if i want to do only some
simple inspect on some particular vars.


-- 
Mar 14 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924


clugdbug yahoo.com.au changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |enhancement
           Keywords|spec                        |
            Summary|fail to pragma compile time |Allow pragma(msg) in CTFE
                   |constant                    |




------- Comment #3 from clugdbug yahoo.com.au  2008-11-26 08:35 -------
Although a way of debugging CTFE functions would be very nice to have, this is
definitely not a bug. 

I'm changing this to an enhancement, changed title from: fail to pragma compile
time constant


-- 
Nov 26 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924





------- Comment #4 from smjg iname.com  2008-11-26 08:52 -------
I think we need separate notation for this.  Generating a compiler message
while compiling a function is conceptually different from generating a compiler
message while evaluating it.


-- 
Nov 26 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924


shro8822 vandals.uidaho.edu changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |shro8822 vandals.uidaho.edu




------- Comment #5 from shro8822 vandals.uidaho.edu  2008-11-26 10:32 -------

pragma(writefln,"hello #%d", 1);
vote++;


-- 
Nov 26 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924





------- Comment #6 from smjg iname.com  2008-11-26 11:13 -------
From the names pragma(msg) and pragma(writefln), it isn't clear at all that
one's while compiling and one's while evaluating.

Better would be to name it something like "ctfeMsg" or "msgCTFE".  And perhaps
writefln notation could be supported in both this and regular msg.  This won't
break existing code as long as pragma(msg, string) with no further arguments is
still defined to write that exact string.


-- 
Nov 26 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924





------- Comment #7 from shro8822 vandals.uidaho.edu  2008-11-26 11:17 -------
To date, every use of writefln I've seen has been run time. So it doesn't seem
particularly ambiguous at least to me,


-- 
Nov 26 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924





------- Comment #8 from smjg iname.com  2008-11-26 12:05 -------
(In reply to comment #7)
 To date, every use of writefln I've seen has been run time. So it doesn't seem
 particularly ambiguous at least to me,

That's because at the moment writefln can only be executed at run time. If it (or something resembling it) becomes executable at compile time, it could just as well be either as and when compiled or during CTFE. Having a difference between pragma(msg) and pragma(writefln) beyond what they say on the tin would be arbitrary and confusing. --
Nov 26 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924





------- Comment #9 from shro8822 vandals.uidaho.edu  2008-11-26 12:43 -------

Sorry, I was far less than clear.

writefln in all cases we use it in now executes with the code path, e.g. when
the code is executed rather than generated. pragma is compile time in all
cases. Seems like a good fit to me.

OTOH as long as it's not something like
pragma(D9B01F73-E64A-4FA9-A2DE-C20CD24560BA) I'm not going to object to getting
it!


-- 
Nov 26 2008
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924





------- Comment #10 from clugdbug yahoo.com.au  2008-11-27 03:57 -------
On second thoughts, this isn't an actual proposal. There's a genuine need, but 
pragma(msg) inside CTFE is not the solution. I think we should just kill this
bug, and create a new one when there's an actual proposal for how it should
work.


-- 
Nov 27 2008
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1924


shro8822 vandals.uidaho.edu changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Allow pragma(msg) in CTFE   |Allow writefln like ouput
                   |                            |during CTFE.




------- Comment #11 from shro8822 vandals.uidaho.edu  2008-11-27 11:11 -------
Vote++ or rename and re-tag it.


-- 
Nov 27 2008