Re: Getting a reference to an immutable string

2018-02-10 Thread David Zhang via Digitalmars-d-learn

On Saturday, 10 February 2018 at 22:59:18 UTC, ag0aep6g wrote:
But there is a recent regression on Windows that might be 
related. Do you also have a static constructor (`static this`) 
that uses `wndclassName`? If so, you might be hitting issue 
18412.


https://issues.dlang.org/show_bug.cgi?id=18412

If you don't have a static constructor, it might be a different 
bug. In that case, please provide complete code so that we can 
get to the bottom of it.


I have a static constructor that uses wndclassName to register 
the window class... at the top of the file.


I think that's the bug.


Re: Getting a reference to an immutable string

2018-02-10 Thread ag0aep6g via Digitalmars-d-learn

On 02/10/2018 11:46 PM, David Zhang wrote:

This is what I'm talking about:

void createWindow( ... ) {

     assert( wndclassName.ptr ); //This fails

     HWND hwnd = CreateWindowW(
     wndclassName.ptr, //This too
     null,
     0,
     CW_USEDEFAULT, CW_USEDEFAULT,
     CW_USEDEFAULT, CW_USEDEFAULT,
     null,
     null,
     null,
     null
     );
}

wstring wndclassName = "wndclass_name"w;


That's not enough code to reproduce the issue. This works as far as I see:


import core.sys.windows.windef: HWND;
import core.sys.windows.winuser: CreateWindowW, CW_USEDEFAULT;

void main()
{
assert( wndclassName.ptr );

HWND hwnd = CreateWindowW(
wndclassName.ptr,
null,
0,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
null,
null,
null,
null
);
}

wstring wndclassName = "wndclass_name"w;


But there is a recent regression on Windows that might be related. Do 
you also have a static constructor (`static this`) that uses 
`wndclassName`? If so, you might be hitting issue 18412.


https://issues.dlang.org/show_bug.cgi?id=18412

If you don't have a static constructor, it might be a different bug. In 
that case, please provide complete code so that we can get to the bottom 
of it.


Re: Getting a reference to an immutable string

2018-02-10 Thread David Zhang via Digitalmars-d-learn
Building with Visual Studio seems to be fine. This isn't an 
OptLink issue, is it?


Re: Getting a reference to an immutable string

2018-02-10 Thread David Zhang via Digitalmars-d-learn

On Saturday, 10 February 2018 at 22:36:41 UTC, ag0aep6g wrote:

On 02/10/2018 11:26 PM, David Zhang wrote:
I've got an immutable string declared in module scope, and I 
attempted to get a pointer to its characters through both 
&str[0] and str.ptr. However, it appears to me that the string 
is behaving like a manifest constant, in that the pointer is 
null.


The language reference indicates that it has a location in 
memory and thus has a pointer.


So, my question is thus: Is this a bug in DMD, or is this just 
something I missed?


The pointer should not be null, even when `str` is a manifest 
constant. But without code it's impossible to say if you're 
hitting a compiler bug or if you're doing something wrong.


Ah, yeah.

It appears to occur only when compiled in x86 mode.

This is what I'm talking about:

void createWindow( ... ) {

assert( wndclassName.ptr ); //This fails

HWND hwnd = CreateWindowW(
wndclassName.ptr, //This too
null,
0,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
null,
null,
null,
null
);
}

wstring wndclassName = "wndclass_name"w;


Re: Getting a reference to an immutable string

2018-02-10 Thread ag0aep6g via Digitalmars-d-learn

On 02/10/2018 11:26 PM, David Zhang wrote:
I've got an immutable string declared in module scope, and I attempted 
to get a pointer to its characters through both &str[0] and str.ptr. 
However, it appears to me that the string is behaving like a manifest 
constant, in that the pointer is null.


The language reference indicates that it has a location in memory and 
thus has a pointer.


So, my question is thus: Is this a bug in DMD, or is this just something 
I missed?


The pointer should not be null, even when `str` is a manifest constant. 
But without code it's impossible to say if you're hitting a compiler bug 
or if you're doing something wrong.


Getting a reference to an immutable string

2018-02-10 Thread David Zhang via Digitalmars-d-learn

Hi,

I've got an immutable string declared in module scope, and I 
attempted to get a pointer to its characters through both &str[0] 
and str.ptr. However, it appears to me that the string is 
behaving like a manifest constant, in that the pointer is null.


The language reference indicates that it has a location in memory 
and thus has a pointer.


So, my question is thus: Is this a bug in DMD, or is this just 
something I missed?


Thanks

David