digitalmars.D.ldc - LDC crash when compiling custom barebones runtime
- Dylan Graham (13/48) Sep 23 2020 Hi, I'm working on a barebones runtime targeting the ARM Cortex M
- Dylan Graham (4/5) Sep 23 2020 The crash also occurs if I build the runtime and user code as an
- kinke (10/12) Sep 23 2020 You need to fix the type of the 4th TypeInfo_Class field to
- Dylan Graham (3/15) Sep 23 2020 Oh bugger! I mistyped that declaration. Thanks for the quick
Hi, I'm working on a barebones runtime targeting the ARM Cortex M CPU lineup. I've got classes, structs, invariants, asserts and contract compilation working - but whenever I use an interface, despite providing a stub TypeInfo_Interface for it, LDC 1.23.0 and 1.21.0 crashes. I am building on Windows 10 x64. The following is my ldc2 1.23.0 command:ldc2 app.d object.d rtoslink.d util.d memory.d -defaultlib= -mtriple=arm-none-eabi -mcpu=cortex-m4 -d-debug -gc -float-abi=hardThis is the output:0x00007FF6B3749649 (0x0000000000000000 0x0000000000000000 0x000000E24E1FDD30 0x0000003F00000002) 0x00007FF6B57B4FB0 (0x00000233A388C1E0 0x000000E200000000 0x00000233A391F388 0x00007FF6B578DC03) 0x00007FF6B5742018 (0x00000233A388C678 0x0000000000000040 0x000000E24E1FDC90 0x00000233A388F980) 0x00007FF6B57558E8 (0x0000000000000050 0x0000000000000168 0x00000233A1850E40 0x0000000000000001) 0x00007FF6B5773A05 (0x00007FF6B65EBF5B 0x0000000002000002 0x00007FF6B65C2E69 0x0000000000000004) 0x00007FF6B5703159 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000) 0x00007FF6B5771510 (0x000000000000000F 0x000000000000000C 0x0032006308000008 0x00000233A1851140) 0x00007FF6B5887659 (0x0000000000000000 0x000000E24E1FFA08 0x0000000300000001 0x0000000000000000) 0x00007FF6B5887337 (0x00000233A192B8B8 0x000000E24E1FFCD8 0x000000E24E1FFB10 0x0000000000000000) 0x00007FF6B58875E3 (0x0000000000000010 0x00007FF600000000 0x00000233A192B9DE 0x0000000000000010) 0x00007FF6B576BEEC (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000) 0x00007FF6B58C60C8 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000) 0x00007FFCA2C17BD4 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000), BaseThreadInitThunk() + 0x14 bytes(s) 0x00007FFCA2D6CE51 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000), RtlUserThreadStart() + 0x21 bytes(s)My user code is:interface I {} class A : I {}That causes a crash. This is my object.d: https://github.com/0dyl/LWDR/blob/master/source/object.d Not really sure what is failing. Thanks in advance for the help.
Sep 23 2020
On Wednesday, 23 September 2020 at 16:48:25 UTC, Dylan Graham wrote:[...]The crash also occurs if I build the runtime and user code as an x86 target.
Sep 23 2020
On Wednesday, 23 September 2020 at 16:50:35 UTC, Dylan Graham wrote:The crash also occurs if I build the runtime and user code as an x86 target.You need to fix the type of the 4th TypeInfo_Class field to `Interface[]` (not `void*[]`; `Interface` is a struct and the instances are generated by the compiler). Then compiling interface I { void foo(); } class C : I { void foo() {} } works fine here for i686. Using a CI build of LDC (enabled assertions) can help tracking such stuff down.
Sep 23 2020
On Wednesday, 23 September 2020 at 20:01:16 UTC, kinke wrote:On Wednesday, 23 September 2020 at 16:50:35 UTC, Dylan Graham wrote:Oh bugger! I mistyped that declaration. Thanks for the quick help. It works now =)The crash also occurs if I build the runtime and user code as an x86 target.You need to fix the type of the 4th TypeInfo_Class field to `Interface[]` (not `void*[]`; `Interface` is a struct and the instances are generated by the compiler). Then compiling interface I { void foo(); } class C : I { void foo() {} } works fine here for i686. Using a CI build of LDC (enabled assertions) can help tracking such stuff down.
Sep 23 2020