Thread overview
Finding source of typeid use
Jul 07, 2017
Nicholas Wilson
Jul 08, 2017
Nicholas Wilson
Jul 08, 2017
rikki cattermole
Jul 08, 2017
Nicholas Wilson
Jul 08, 2017
Rainer Schuetze
Jul 08, 2017
Nicholas Wilson
July 07, 2017
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;
}
July 08, 2017
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.
July 08, 2017
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?
July 08, 2017
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.
July 08, 2017

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.
July 08, 2017
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.