digitalmars.D.learn - Bug in DMD?
- ryuukk_ (17/17) Mar 02 2023 Hello,
- ryuukk_ (5/5) Mar 02 2023 It crashes with a weird message, address doesn't match the
- Richard (Rikki) Andrew Cattermole (6/6) Mar 02 2023 There isn't anything we can do without source.
- ryuukk_ (4/10) Mar 02 2023 I have no idea what does 1. mean, as for 2. do you have a link
- ryuukk_ (5/17) Mar 02 2023 Better, can i send you a zip of my project? i'm not sure i'm
- H. S. Teoh (15/23) Mar 02 2023 https://dlang.org/blog/2020/04/13/dustmite-the-general-purpose-data-redu...
- ryuukk_ (8/33) Mar 02 2023 the problem is not that it can run in the background, the problem
- Richard (Rikki) Andrew Cattermole (8/10) Mar 02 2023 Already is.
- ryuukk_ (10/10) Mar 02 2023 I couldn't figure out dustmite, so i started from 0 and managed
- Vladimir Panteleev (3/9) Mar 02 2023 Yeah... `rt.a.stuffs` is a TLS variable. The D runtime manages
- ryuukk_ (60/72) Mar 02 2023 I have some questions:
- Vladimir Panteleev (11/17) Mar 02 2023 I think these are probably coincidences and the answer can be
- Richard (Rikki) Andrew Cattermole (20/20) Mar 02 2023 This works:
- ryuukk_ (3/23) Mar 02 2023 So it is a DMD bug?
- Richard (Rikki) Andrew Cattermole (3/4) Mar 02 2023 Yes and thanks to you I can now say that we can absolutely get rid of
- Richard (Rikki) Andrew Cattermole (1/1) Mar 02 2023 I added a note here: https://issues.dlang.org/show_bug.cgi?id=20737
- ryuukk_ (4/8) Mar 02 2023 glad the outcome is positive, and i apologies about earlier
- =?UTF-8?Q?Ali_=c3=87ehreli?= (4/9) Mar 02 2023 I haven't used it myself but dustmite seems to be integrated into dub.
- Richard (Rikki) Andrew Cattermole (6/19) Mar 02 2023 When debugging, native debuggers i.e. Visual Studio, will provide you
Hello, I encountered a weird issue, my program segfault when i feed DMD with my files and static libs It doesn't when i compile with LDC If i split the compile/link in 2 different steps, then all works correctly DMD (1step: ⛔): https://gist.github.com/ryuukk/f0ae2ae0c8980219c04d0c6d8678940d LDC (1step: ✅): https://gist.github.com/ryuukk/4c7706697583431389d5e2074548f7c4 DMD (2step: ✅): https://gist.github.com/ryuukk/a0373339e590ecdae91e3f05b2d81bf4 Looks like DMD is messing things up when mixing code with static libraries? Toolchains: - DMD32 D Compiler v2.102.1 - LDC - the LLVM D compiler (1.32.0-beta1):
Mar 02 2023
It crashes with a weird message, address doesn't match the mangled name: ``C:\dev\kdom\projects\dawn\gl\glad\loader.d`` inside: ``module dawn.gl.glad.loader;`` ![screenshot](https://i.imgur.com/sY2KcgR.png)
Mar 02 2023
There isn't anything we can do without source. But here is what I would do in this situation: 1. Look at the assembly at the point of debug break, from here it should give you hints as to why its trying to write to dawn.assets.Resource init array. 2. Dustmite, so we have something we can work with.
Mar 02 2023
On Thursday, 2 March 2023 at 21:21:14 UTC, Richard (Rikki) Andrew Cattermole wrote:There isn't anything we can do without source. But here is what I would do in this situation: 1. Look at the assembly at the point of debug break, from here it should give you hints as to why its trying to write to dawn.assets.Resource init array. 2. Dustmite, so we have something we can work with.I have no idea what does 1. mean, as for 2. do you have a link for a guide how to setup "dustmite"?
Mar 02 2023
On Thursday, 2 March 2023 at 21:38:23 UTC, ryuukk_ wrote:On Thursday, 2 March 2023 at 21:21:14 UTC, Richard (Rikki) Andrew Cattermole wrote:Better, can i send you a zip of my project? i'm not sure i'm willing to waste any more time trying to figure out what is wrong That's is not something i like doing, it should just work, i shouldn't have to debug DMD, that aint my jobThere isn't anything we can do without source. But here is what I would do in this situation: 1. Look at the assembly at the point of debug break, from here it should give you hints as to why its trying to write to dawn.assets.Resource init array. 2. Dustmite, so we have something we can work with.I have no idea what does 1. mean, as for 2. do you have a link for a guide how to setup "dustmite"?
Mar 02 2023
On Thu, Mar 02, 2023 at 09:55:55PM +0000, ryuukk_ via Digitalmars-d-learn wrote:On Thursday, 2 March 2023 at 21:38:23 UTC, ryuukk_ wrote:[...]On Thursday, 2 March 2023 at 21:21:14 UTC, Richard (Rikki) Andrew Cattermole wrote:https://dlang.org/blog/2020/04/13/dustmite-the-general-purpose-data-reduction-tool/ Dustmite automatically reduces your code to a minimal example that still exhibits the same problem, good for bug reports that are easily reproducible. Also useful if you don't want to publicly share the code for whatever reason, but still want to provide enough information so that the dmd devs can find the problem and fix it. [...]2. Dustmite, so we have something we can work with.[...] 2. do you have a link for a guide how to setup "dustmite"?That's is not something i like doing, it should just work, i shouldn't have to debug DMD, that aint my jobDustmite can run in the background on a temporary copy of your code, you don't have to babysit it and can work on other things while it's doing its thing. T -- Written on the window of a clothing store: No shirt, no shoes, no service.
Mar 02 2023
On Thursday, 2 March 2023 at 22:24:11 UTC, H. S. Teoh wrote:On Thu, Mar 02, 2023 at 09:55:55PM +0000, ryuukk_ via Digitalmars-d-learn wrote:the problem is not that it can run in the background, the problem is figuring out 1. how to install 2. how to setup 3. how to run i was initially working on my game, i shouldn't have to take a 1 week break to debug dmdOn Thursday, 2 March 2023 at 21:38:23 UTC, ryuukk_ wrote:[...]On Thursday, 2 March 2023 at 21:21:14 UTC, Richard (Rikki) Andrew Cattermole wrote:https://dlang.org/blog/2020/04/13/dustmite-the-general-purpose-data-reduction-tool/ Dustmite automatically reduces your code to a minimal example that still exhibits the same problem, good for bug reports that are easily reproducible. Also useful if you don't want to publicly share the code for whatever reason, but still want to provide enough information so that the dmd devs can find the problem and fix it. [...]2. Dustmite, so we have something we can work with.[...] 2. do you have a link for a guide how to setup "dustmite"?That's is not something i like doing, it should just work, i shouldn't have to debug DMD, that aint my jobDustmite can run in the background on a temporary copy of your code, you don't have to babysit it and can work on other things while it's doing its thing. T
Mar 02 2023
On 03/03/2023 12:34 PM, ryuukk_ wrote:1. how to installAlready is. Comes with dmd and ldc. You can also just do ``$ dub run digger -- args``.2. how to setup > 3. how to runIt is a bit of a pain but the basics is you need some sort of compilation command, list of sources and a test to confirm if it still fails. https://github.com/CyberShadow/DustMite/wiki#how-to-use-it
Mar 02 2023
I couldn't figure out dustmite, so i started from 0 and managed to hit something: https://github.com/ryuukk/dmd_bug ``Assertion failed: array index out of bounds, file game\app.d, line 5`` Wich indicates probably TLS problem? This now reminds me of: https://issues.dlang.org/show_bug.cgi?id=23310 I am clueless what to do next, but at least now there is a small repro available for knowledgeable people
Mar 02 2023
On Friday, 3 March 2023 at 01:07:07 UTC, ryuukk_ wrote:I couldn't figure out dustmite, so i started from 0 and managed to hit something: https://github.com/ryuukk/dmd_bug ``Assertion failed: array index out of bounds, file game\app.d, line 5`` Wich indicates probably TLS problem?Yeah... `rt.a.stuffs` is a TLS variable. The D runtime manages TLS. `extern(C) main` bypasses D runtime initialization.
Mar 02 2023
On Friday, 3 March 2023 at 01:11:06 UTC, Vladimir Panteleev wrote:On Friday, 3 March 2023 at 01:07:07 UTC, ryuukk_ wrote:I have some questions: 1. why does it work with LDC? 2. why does it work with DMD when build/link in 2 step? 3. why it doesn't work when DMD is invoked once for build/link 4. is this a bug in DMD or my code is wrong? 5. if it's wrong, then why does it compile/no error? ```sh set -e build_dmd() { echo "build dmd" dmd \ -debug -g \ -m64 -vcolumns -betterC -w -i -i=-std -i=-core \ -Igame \ -Istuff/ \ stuff/rt/object.d \ game/app.d \ -of=game.exe } build_ldc() { echo "build ldc" ldc2 \ -d-debug -g \ -m64 -vcolumns -betterC -w -i -i=-std -i=-core \ -Igame \ -Istuff/ \ stuff/rt/object.d \ game/app.d \ -of=game.exe } build_dmd_and_link() { echo "build dmd and link (2step)" dmd \ -debug -g -c \ -m64 -vcolumns -betterC -w -i -i=-std -i=-core \ -Igame \ -Istuff/ \ stuff/rt/object.d \ game/app.d \ -of=game.obj dmd \ -debug -g \ -m64 -vcolumns -betterC -w -i -i=-std -i=-core \ -Igame \ -Istuff/ \ game.obj \ -of=game.exe } build_ldc ./game.exe rm game.obj game.exe build_dmd_and_link ./game.exe rm game.obj game.exe build_dmd ./game.exe rm game.obj game.exe ```I couldn't figure out dustmite, so i started from 0 and managed to hit something: https://github.com/ryuukk/dmd_bug ``Assertion failed: array index out of bounds, file game\app.d, line 5`` Wich indicates probably TLS problem?Yeah... `rt.a.stuffs` is a TLS variable. The D runtime manages TLS. `extern(C) main` bypasses D runtime initialization.
Mar 02 2023
On Friday, 3 March 2023 at 01:21:52 UTC, ryuukk_ wrote:I have some questions: 1. why does it work with LDC? 2. why does it work with DMD when build/link in 2 step? 3. why it doesn't work when DMD is invoked once for build/linkI think these are probably coincidences and the answer can be summarized as "that's what ends up happening due to the details of the implementation".4. is this a bug in DMD or my code is wrong?I would say the code is wrong in principle, though as you've noted it can still work in some specific circumstances.5. if it's wrong, then why does it compile/no error?`extern(C) main` is a low-level feature, because it effectively turns off parts of the language. However, the rest of the program doesn't know that this is the case - currently the compiler simply assumes you know what you're doing. Maybe it's not OK that it's easy to use it by accident.
Mar 02 2023
This works: ```d extern(C) void main() { Stuff[5] temp = [ Stuff(), Stuff(), Stuff(), Stuff(), Stuff(), ]; stuffs = temp[]; stuffs[0].do_something(); } ``` ```d Stuff[] stuffs; ``` The problem here is dmd isn't initializing TLS with a value, but TLS itself is working.
Mar 02 2023
On Friday, 3 March 2023 at 01:24:42 UTC, Richard (Rikki) Andrew Cattermole wrote:This works: ```d extern(C) void main() { Stuff[5] temp = [ Stuff(), Stuff(), Stuff(), Stuff(), Stuff(), ]; stuffs = temp[]; stuffs[0].do_something(); } ``` ```d Stuff[] stuffs; ``` The problem here is dmd isn't initializing TLS with a value, but TLS itself is working.So it is a DMD bug?
Mar 02 2023
On 03/03/2023 2:33 PM, ryuukk_ wrote:So it is a DMD bug?Yes and thanks to you I can now say that we can absolutely get rid of DllMain requirement for DLLs!
Mar 02 2023
I added a note here: https://issues.dlang.org/show_bug.cgi?id=20737
Mar 02 2023
On Friday, 3 March 2023 at 01:37:42 UTC, Richard (Rikki) Andrew Cattermole wrote:On 03/03/2023 2:33 PM, ryuukk_ wrote:glad the outcome is positive, and i apologies about earlier comments, i may have sounded a little bit rudeSo it is a DMD bug?Yes and thanks to you I can now say that we can absolutely get rid of DllMain requirement for DLLs!
Mar 02 2023
On 3/2/23 15:34, ryuukk_ wrote:the problem is not that it can run in the background, the problem is figuring out 1. how to install 2. how to setup 3. how to runI haven't used it myself but dustmite seems to be integrated into dub. 'dub dustmite <...>' Ali
Mar 02 2023
On 03/03/2023 10:38 AM, ryuukk_ wrote:On Thursday, 2 March 2023 at 21:21:14 UTC, Richard (Rikki) Andrew Cattermole wrote:When debugging, native debuggers i.e. Visual Studio, will provide you with the disassembly of the function currently being executed. Between this and other entries in the call stack, you can generally figure out what the statement is being executed just by looking at things like call instructions. The symbols there will be accurate.There isn't anything we can do without source. But here is what I would do in this situation: 1. Look at the assembly at the point of debug break, from here it should give you hints as to why its trying to write to dawn.assets.Resource init array. 2. Dustmite, so we have something we can work with.I have no idea what does 1. mean, as for 2. do you have a link for a guide how to setup "dustmite"?
Mar 02 2023