digitalmars.D - CTFE in .di files
- Manu (11/11) Apr 17 2018 I've been having some problems like this:
- Diego Lago (5/5) Apr 18 2018 Could this issue be related?
- Jonathan M Davis (18/21) Apr 18 2018 Without digging through the compiler internals, I couldn't say with 100%
- Jacob Carlborg (24/31) Apr 18 2018 Same problem on macOS.
- Jonathan M Davis (12/24) Apr 18 2018 As in you're seeing the same problem Manu is, or as in you're not seeing...
- Jacob Carlborg (5/14) Apr 18 2018 Right. I got those mixed up.
- Stefan Koch (3/18) Apr 18 2018 stick an empty extern(C) function into your module with the name
- Manu (3/20) Apr 18 2018 You sly dog! :P
I've been having some problems like this: https://issues.dlang.org/show_bug.cgi?id=18774 I have .di files with mixins that generate declarations using CTFE. Trouble is, executing the CTFE seems to leave residual references to symbols which result in unresolved link errors in the client of the .di file. This seems wrong to me. CTFE shouldn't leave residual dependencies on runtime symbols... is this a well-known issue? Are there common workarounds? I'm surprised I haven't run into this before... I must have just luckily managed to avoid the specific problem structure.
Apr 17 2018
Could this issue be related? https://issues.dlang.org/show_bug.cgi?id=18485 It is about *.di files but it isn't related with CTFE. -- Diego
Apr 18 2018
On Wednesday, April 18, 2018 07:25:17 Diego Lago via Digitalmars-d wrote:Could this issue be related? https://issues.dlang.org/show_bug.cgi?id=18485 It is about *.di files but it isn't related with CTFE.Without digging through the compiler internals, I couldn't say with 100% certainty that they arent related, but what Manu is hitting isn't a segfault, and I doubt that they're particularly related. Maybe the problems come from similar sections of code, but the results are quite different. In Manu's case, it's seems to be that when you import a module that uses CTFE to generate code within that module, but you don't actually compile the module into your program, then at least some of the time, some of the symbols that were used during CTFE are referenced in the object file but don't exist, so the linker gives an error. So, it seems like some symbol references are getting into the object file when they shouldn't, and that's very different from segfaulting. Curiously, I can't reproduce the problem on my FreeBSD system, so I wonder if it's Windows-specific (or at least that the linker on FreeBSD doesn't choke in the same way - the object files may or may not have a similar problem). I don't know if it's happening on Linux or OS X or not. If I understand correctly, Manu has been hitting the problem with 64-bit Windows. - Jonathan M Davis
Apr 18 2018
On Wednesday, 18 April 2018 at 08:12:43 UTC, Jonathan M Davis wrote:Curiously, I can't reproduce the problem on my FreeBSD system, so I wonder if it's Windows-specific (or at least that the linker on FreeBSD doesn't choke in the same way - the object files may or may not have a similar problem). I don't know if it's happening on Linux or OS X or not.Same problem on macOS.If I understand correctly, Manu has been hitting the problem with 64-bit Windows.The mangling in the reported issue is the same as for Posix. Does Windows 64-bit use the same mangling as Posix? Interestingly, if I add a call to "zip" in the main D file, I get an additional missing symbol: import test; import std.range; int main() { // test_func(1, 2); auto b = zip(["int","int"], ["a","b"]); return 0; } Undefined symbols for architecture x86_64: "__D3std5range__T3ZipTAAyaTQfZQn6__initZ", referenced from: __D38TypeInfo_S3std5range__T3ZipTAAyaTQfZQn6__initZ in main.o "__D3std5range__T3zipTAAyaTQfZQnFNaNbNiNfQtQvZSQBrQBq__T3ZipTQBnTQBrZQn", referenced from: __Dmain in main.o -- /Jacob Carlborg
Apr 18 2018
On Wednesday, April 18, 2018 09:16:14 Jacob Carlborg via Digitalmars-d wrote:On Wednesday, 18 April 2018 at 08:12:43 UTC, Jonathan M Davis wrote:As in you're seeing the same problem Manu is, or as in you're not seeing it on Mac OS X, just like I'm not seeing it on FreeBSD? I'd guess the latter given how close FreeBSD and Mac OS X are, but the way you said it wasn't clear.Curiously, I can't reproduce the problem on my FreeBSD system, so I wonder if it's Windows-specific (or at least that the linker on FreeBSD doesn't choke in the same way - the object files may or may not have a similar problem). I don't know if it's happening on Linux or OS X or not.Same problem on macOS.Well, with D name mangling, I don't see any reason for it to differ across systems, since it's defined by us. It's the C++ name mangling that would be different depending on the target, since that involves different C++ compilers, and for better or worse, the C++ folks never agreed on a standard for name mangling. - Jonathan M DavisIf I understand correctly, Manu has been hitting the problem with 64-bit Windows.The mangling in the reported issue is the same as for Posix. Does Windows 64-bit use the same mangling as Posix?
Apr 18 2018
On 2018-04-18 11:35, Jonathan M Davis wrote:As in you're seeing the same problem Manu is, or as in you're not seeing it on Mac OS X, just like I'm not seeing it on FreeBSD? I'd guess the latter given how close FreeBSD and Mac OS X are, but the way you said it wasn't clear.I am seeing the same problem as Manu on macOS.Well, with D name mangling, I don't see any reason for it to differ across systems, since it's defined by us. It's the C++ name mangling that would be different depending on the target, since that involves different C++ compilers, and for better or worse, the C++ folks never agreed on a standard for name mangling.Right. I got those mixed up. -- /Jacob Carlborg
Apr 18 2018
On Tuesday, 17 April 2018 at 22:19:19 UTC, Manu wrote:I've been having some problems like this: https://issues.dlang.org/show_bug.cgi?id=18774 I have .di files with mixins that generate declarations using CTFE. Trouble is, executing the CTFE seems to leave residual references to symbols which result in unresolved link errors in the client of the .di file. This seems wrong to me. CTFE shouldn't leave residual dependencies on runtime symbols... is this a well-known issue? Are there common workarounds? I'm surprised I haven't run into this before... I must have just luckily managed to avoid the specific problem structure.stick an empty extern(C) function into your module with the name the linker complained about.
Apr 18 2018
On 18 April 2018 at 08:10, Stefan Koch via Digitalmars-d <digitalmars-d puremagic.com> wrote:On Tuesday, 17 April 2018 at 22:19:19 UTC, Manu wrote:You sly dog! :PI've been having some problems like this: https://issues.dlang.org/show_bug.cgi?id=18774 I have .di files with mixins that generate declarations using CTFE. Trouble is, executing the CTFE seems to leave residual references to symbols which result in unresolved link errors in the client of the .di file. This seems wrong to me. CTFE shouldn't leave residual dependencies on runtime symbols... is this a well-known issue? Are there common workarounds? I'm surprised I haven't run into this before... I must have just luckily managed to avoid the specific problem structure.stick an empty extern(C) function into your module with the name the linker complained about.
Apr 18 2018