Thread overview
extern(C) declaration inside function
Sep 10, 2013
Luís Marques
Sep 13, 2013
Luís Marques
Sep 13, 2013
deadalnix
Sep 13, 2013
Andrej Mitrovic
September 10, 2013
When you declare an extern(C) function inside a D function it seems to continue to use D's name mangling, which is unexpected for me. For instance:

    void main()
    {
        extern(C) void foo(int);
        foo(42);
    }

    Undefined symbols for architecture x86_64:
      "__D4test4mainFZv3fooUiZv", referenced from:
            __Dmain in test.o

Is this a bug?
September 13, 2013
On Tuesday, 10 September 2013 at 13:41:14 UTC, Luís Marques wrote:
> Is this a bug?

*bump*
September 13, 2013
On Friday, 13 September 2013 at 02:46:22 UTC, Luís Marques wrote:
> On Tuesday, 10 September 2013 at 13:41:14 UTC, Luís Marques wrote:
>> Is this a bug?
>
> *bump*

This is invalid in C, so not manglable. when you use extern C in this context, you mean calling convention.
September 13, 2013
On 9/10/13, <luis@luismarques.eu>"@puremagic.com <"\"Luís".Marques"> wrote:
> When you declare an extern(C) function inside a D function it seems to continue to use D's name mangling, which is unexpected for me. For instance:
>
>      void main()
>      {
>          extern(C) void foo(int);
>          foo(42);
>      }

I was going to suggest using pragma(mangle, "...") as a workaround (using a git-head compiler), but actually it won't work here because this pragma can only be used in module-scope. Apparently there's a difference between a pragma declaration and pragma statement, I'm not sure why we have this split.