On Thursday, 19 February 2026 at 16:54:11 UTC, monkyyy wrote:
On Thursday, 19 February 2026 at 16:43:04 UTC, user1234 wrote:
On Thursday, 19 February 2026 at 16:30:04 UTC, monkyyy wrote:
On Thursday, 19 February 2026 at 16:20:58 UTC, user1234 wrote:
On Thursday, 19 February 2026 at 15:37:42 UTC, user1234 wrote:
[...]
so you'll get

Error: function `runnable.NG` label `_D8runnable__T2ngVii1ZQiFNaNbNiNfZi` is undefined Error: function `runnable.NG` label `_D8runnable__T7ngVii2ZQnFNaNbNiNfZi` is undefined

So to keep things simples the idea is to provide a valid function identifier in the asm. I've used compiler explorer to get the __valid__ mangled version (https://godbolt.org/z/WYMqMhnWG). No luck.

Is that even possible ?

The static foreach does not seem to generate the symbols in a classic way tho...

assume  CS:.text._D8runnable__T2ngVii1ZQiFNaNbNiNfZi

but on the other hand the error message is not a linker one

nah its the asm block not having access to templates

That is not the problem. Here we accept that inline assemby is "lazily handled", so you cannot mix pure (in the sense of high level) D language with asm. The problem is really that the function identifier should be ignored until the linking phase.

Remember that we have generated the right name using "compiler explorer".

.mangleof is correct and should give the same result as godbolt; if you want to use a managle you would have to extern c it, otherwise it isnt a symbol

```d

// The OK part
int ok(int i:1)(){return 1;}
int ok(int i:2)(){return 2;}

enum mangle=ok!1.mangleof;
pragma(msg,mangle);
mixin("extern(C) int "~mangle~"();"); // <======

void OK()
{
    ulong r;
    asm
    {
        xor R8, R8;
        call _D9onlineapp__T2okHVii1ZQjFNaNbNiNfZi;
        add R8, RAX;
        mov r, R8;
    }
    assert(r == 1);
}
int main()
{
    OK();
    return 0;
}
```

That's a nice reduction. We are at the point where we agree that

```d
module onlineapp;

int ok(int i:1)(){return 1;}

enum mangle=ok!1.mangleof;
mixin("extern(C) int "~mangle~"();");

void OK()
{
    asm
    {
        call _D9onlineapp__T2okHVii1ZQjFNaNbNiNfZi;
    }
}

int main()
{
    OK();
    return 0;
}

```

is just fine. But if you remove the default static int argument:

```
module onlineapp;

int ok(int i)(){return i;}

enum mangle=ok!1.mangleof;
mixin("extern(C) int "~mangle~"();");

void OK()
{
    asm
    {
        call _D9onlineapp__T2okHVii1ZQjFNaNbNiNfZi;
    }
}

int main()
{
    OK();
    return 0;
}
```

you run into the same problem as the one I pointed in the initial message.

Error: function `onlineapp.OK` label `_D9onlineapp__T2okHVii1ZQjFNaNbNiNfZi` is undefined

Reply via email to