Thread overview | ||||||
---|---|---|---|---|---|---|
|
September 10, 2013 extern(C) declaration inside function | ||||
---|---|---|---|---|
| ||||
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 Re: extern(C) declaration inside function | ||||
---|---|---|---|---|
| ||||
Posted in reply to Luís Marques | On Tuesday, 10 September 2013 at 13:41:14 UTC, Luís Marques wrote:
> Is this a bug?
*bump*
|
September 13, 2013 Re: extern(C) declaration inside function | ||||
---|---|---|---|---|
| ||||
Posted in reply to Luís Marques | 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 Re: extern(C) declaration inside function | ||||
---|---|---|---|---|
| ||||
Posted in reply to Luís Marques | 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. |
Copyright © 1999-2021 by the D Language Foundation