pragma(mangle,"name") for a type?

Nicholas Wilson via Digitalmars-d digitalmars-d at puremagic.com
Tue Feb 14 16:41:30 PST 2017


On Tuesday, 14 February 2017 at 11:15:26 UTC, Timothee Cour wrote:
> How do I define pragma(mangle,"name") for a type?
>
> Use case:
> I'd like to avoid the complications involved in
> https://github.com/dlang/druntime/pull/1316/files [Addition of 
> C++
> std::string, std::vector to D #1316]
> by directly defining the desired mangle for a c++ std::string 
> (+ other
> similar use cases):
>
> ```
>
> pragma(mangle, 
> "NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE")
> struct string_cpp;
>
> extern(C++, ns){
>   void fun1(string_cpp*a);
>   string_cpp fun2();
>   void string_cpp fun3(const ref string_cpp a);
> }
>
> ```
>
>
> The problem is that this mangles fun1 as 
> _ZN2ns4fun1EP10string_cpp , ie, using "string_cpp" instead of 
> "NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE" for the 
> `a` argument of fun1, thus ignoring (silently!) the 
> pragma(mangle).

I've got a use case similar to this: declaring and using named 
opaque types in LLVM IR to support images for DCompute OpenCL 
support. If I could leverage pragma mangle instead that would be 
awesome!


More information about the Digitalmars-d mailing list