digitalmars.D - extern(C) declaration inside function
- =?UTF-8?B?Ikx1w61z?= Marques" (12/12) Sep 10 2013 When you declare an extern(C) function inside a D function it
- =?UTF-8?B?Ikx1w61z?= Marques" (2/3) Sep 12 2013 *bump*
- deadalnix (3/7) Sep 12 2013 This is invalid in C, so not manglable. when you use extern C in
- Andrej Mitrovic (7/15) Sep 13 2013 I was going to suggest using pragma(mangle, "...") as a workaround
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?
Sep 10 2013
On Tuesday, 10 September 2013 at 13:41:14 UTC, Luís Marques wrote:Is this a bug?*bump*
Sep 12 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:This is invalid in C, so not manglable. when you use extern C in this context, you mean calling convention.Is this a bug?*bump*
Sep 12 2013
On 9/10/13, <luis luismarques.eu>" puremagic.com <"\"Lu=EDs".Marques"> wrot= e: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.
Sep 13 2013