Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
February 10, 2018 Getting a reference to an immutable string | ||||
---|---|---|---|---|
| ||||
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 |
February 10, 2018 Re: Getting a reference to an immutable string | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Zhang | 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.
|
February 10, 2018 Re: Getting a reference to an immutable string | ||||
---|---|---|---|---|
| ||||
Posted in reply to ag0aep6g | 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;
|
February 10, 2018 Re: Getting a reference to an immutable string | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Zhang | Building with Visual Studio seems to be fine. This isn't an OptLink issue, is it? |
February 10, 2018 Re: Getting a reference to an immutable string | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Zhang | 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. |
February 10, 2018 Re: Getting a reference to an immutable string | ||||
---|---|---|---|---|
| ||||
Posted in reply to ag0aep6g | 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.
|
Copyright © 1999-2021 by the D Language Foundation