[Issue 18774] New: meta used in .di files causes link errors

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Apr 17 21:27:53 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=18774

          Issue ID: 18774
           Summary: meta used in .di files causes link errors
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: turkeyman at gmail.com

We produce a function prototype in a .di file using some meta

test.di
-------
module test;

template Test()
{
    import std.range, std.algorithm;
    enum Test = "void test_func(" ~
                                  zip(["int","int"], ["a","b"])
                                    .map!(tuple => tuple[0] ~ " " ~ tuple[1])
                                    .reduce!((a, b) => a ~ ", " ~ b) ~
                                ");";
}
mixin(Test!()); // <- Mixes in: void test_func(int a, int b);
-------


main.d
------
import test;

int main()
{
    test_func(1, 2);

    return 0;
}
------


I expect compiling this example to result in a single link error to the
unresolved external test_func().
But we also see "error LNK2001: unresolved external symbol
_D3std5range__T3ZipTAAyaTQfZQn6__initZ"

Calling zip() at CTFE results in an additional unexpected link error.
Using a function in CTFE this way shouldn't affect the symbol table, or add any
additional link references.

--


More information about the Digitalmars-d-bugs mailing list