Re: Finding source of typeid use

2017-07-08 Thread Nicholas Wilson via Digitalmars-d-learn

On Saturday, 8 July 2017 at 08:56:17 UTC, Rainer Schuetze wrote:



On 08.07.2017 07:55, Nicholas Wilson wrote:
On Saturday, 8 July 2017 at 05:36:49 UTC, rikki cattermole 
wrote:

On 08/07/2017 2:35 AM, Nicholas Wilson wrote:
On Friday, 7 July 2017 at 08:49:58 UTC, Nicholas Wilson 
wrote:

My library is generating a typeid from somewhere.
e.g.
typeid(const(Pointer!(cast(AddrSpace)1u, float)))

[...]


It seems to be coming from the need to hash the type, 
goodness knows why, which explains why I only get the const 
variety.


https://github.com/dlang/druntime/blob/master/src/object.d#L253 Maybe?


No, the culprit is
https://github.com/dlang/druntime/blob/master/src/object.d#L1128
but IDK why it is being generated in the first place since 
nothing I wrote relies on being able to hash it.


I suspect this is generated while building the hash function 
for your Pointer struct in buildXtoHash in ddmd/clone.d.


Hmm, I found needToHash(StructDeclaration sd) which enumerates 
the fields

If a field is a struct
recurse, makes sense
if the struct has an alias this, which Pointer does, generate 
a typeinfo, with a note to see 
https://issues.dlang.org/show_bug.cgi?id=14948 / dmdPR 5001.




Re: Finding source of typeid use

2017-07-08 Thread Rainer Schuetze via Digitalmars-d-learn



On 08.07.2017 07:55, Nicholas Wilson wrote:

On Saturday, 8 July 2017 at 05:36:49 UTC, rikki cattermole wrote:

On 08/07/2017 2:35 AM, Nicholas Wilson wrote:

On Friday, 7 July 2017 at 08:49:58 UTC, Nicholas Wilson wrote:

My library is generating a typeid from somewhere.
e.g.
typeid(const(Pointer!(cast(AddrSpace)1u, float)))

[...]


It seems to be coming from the need to hash the type, goodness knows 
why, which explains why I only get the const variety.


https://github.com/dlang/druntime/blob/master/src/object.d#L253 Maybe?


No, the culprit is
https://github.com/dlang/druntime/blob/master/src/object.d#L1128
but IDK why it is being generated in the first place since nothing I 
wrote relies on being able to hash it.


I suspect this is generated while building the hash function for your 
Pointer struct in buildXtoHash in ddmd/clone.d.


Re: Finding source of typeid use

2017-07-08 Thread Nicholas Wilson via Digitalmars-d-learn

On Saturday, 8 July 2017 at 05:36:49 UTC, rikki cattermole wrote:

On 08/07/2017 2:35 AM, Nicholas Wilson wrote:

On Friday, 7 July 2017 at 08:49:58 UTC, Nicholas Wilson wrote:

My library is generating a typeid from somewhere.
e.g.
typeid(const(Pointer!(cast(AddrSpace)1u, float)))

[...]


It seems to be coming from the need to hash the type, goodness 
knows why, which explains why I only get the const variety.


https://github.com/dlang/druntime/blob/master/src/object.d#L253 
Maybe?


No, the culprit is
https://github.com/dlang/druntime/blob/master/src/object.d#L1128
but IDK why it is being generated in the first place since 
nothing I wrote relies on being able to hash it.


Re: Finding source of typeid use

2017-07-07 Thread rikki cattermole via Digitalmars-d-learn

On 08/07/2017 2:35 AM, Nicholas Wilson wrote:

On Friday, 7 July 2017 at 08:49:58 UTC, Nicholas Wilson wrote:

My library is generating a typeid from somewhere.
e.g.
typeid(const(Pointer!(cast(AddrSpace)1u, float)))

[...]


It seems to be coming from the need to hash the type, goodness knows 
why, which explains why I only get the const variety.


https://github.com/dlang/druntime/blob/master/src/object.d#L253 Maybe?


Re: Finding source of typeid use

2017-07-07 Thread Nicholas Wilson via Digitalmars-d-learn

On Friday, 7 July 2017 at 08:49:58 UTC, Nicholas Wilson wrote:

My library is generating a typeid from somewhere.
e.g.
typeid(const(Pointer!(cast(AddrSpace)1u, float)))

[...]


It seems to be coming from the need to hash the type, goodness 
knows why, which explains why I only get the const variety.


Finding source of typeid use

2017-07-07 Thread Nicholas Wilson via Digitalmars-d-learn

My library is generating a typeid from somewhere.
e.g.
typeid(const(Pointer!(cast(AddrSpace)1u, float)))

but I have never declared a const of that type nor have I used 
typeid explicitly in my program. Where is this coming from?


The program is just:

enum AddrSpace {
Global,
Shared
}
struct Pointer(AddrSpace n,T)
{
T* ptr;
}
private import std.traits;
struct AutoIndexed(T) if (isInstanceOf(T,Pointer))
{
T p = void;
enum  n = TemplateArgsOf!(T)[0];
alias U = TemplateArgsOf!(T)[1];
static assert(n == AddrSpace.Global || n == AddrSpace.Shared);

@property U index()
{
static if (n == AddrSpace.Global)
return p[0]; //Some calculation
else static if (n == AddrSpace.Shared)
return p[0];// ditto

}

@property void index(U t)
{
static if (n == AddrSpace.Global)
p[0] = t; // ditto
else static if (n == AddrSpace.Shared)
p[0] = t; // ditto
}
@disable this();
alias index this;
}

alias aagf = AutoIndexed!(GlobalPointer!(float));

@kernel void auto_index_test(aagf a,
 aagf b,
 aagf c)
{
a = b + c;
}