Error: Global variable type does not match previous declaration with same mangled name:

kinke noone at nowhere.com
Sun Nov 22 19:53:51 UTC 2020


On Sunday, 22 November 2020 at 17:46:16 UTC, Adam D. Ruppe wrote:
> pragma(mangle, "_D" ~ T.mangleof[1..$] ~ "6__initZ")
> // llvm says it is supposed to be { [2 x i8*]*, i8* }       
> __gshared extern immutable idk initializer;

Yeah, this trick only works for (non-zero-initialized) structs.

> I just want to get at the raw bytes defined by that symbol and 
> I don't think the D language can actually express that.

Yeah, I think the proper way would be the addition of a new trait 
for aggregates, e.g., `__traits(initializer, T)`, with semantics 
equivalent to current `TypeInfo.initializer()` - returning a 
`const(void)[]`, and ptr being null for zero-initialized structs.

That wouldn't just be useful for a TypeInfo-free emplace(), but 
also for moving TypeInfo generation from the compiler to druntime 
templates.


More information about the digitalmars-d-ldc mailing list