Thread overview
segmentation fault when executing the binary produced by compiling with ldc2 on MacOS (M1)
May 18

Hi;

I downloaded

https://github.com/ldc-developers/ldc/releases/download/v1.40.1/ldc2-1.40.1-osx-arm64.tar.xz

on my MacOS M1 Mac Mini.

I'm running zsh as my default shell.

I placed the contents of the tarball at /opt/dlang

which ldc2
/opt/dlang/bin/ldc2

ldc2 -version
LDC - the LLVM D compiler (1.40.1):
  based on DMD v2.110.0 and LLVM 19.1.7
  built with LDC - the LLVM D compiler (1.39.0)
  Default target: arm64-apple-darwin24.5.0
  Host CPU: apple-m1
  http://dlang.org - http://wiki.dlang.org/LDC

I have a very short test program:

cat -n ./hello.d
     1	import std.stdio;
     2
     3	void main() {
     4	    writeln("Hello world!");
     5	}

ldc2 -v ./hello.d
binary /opt/dlang/bin/ldc2
version 1.40.1 (DMD v2.110.0, LLVM 19.1.7)
config /opt/dlang/etc/ldc2.conf (arm64-apple-darwin24.5.0)
predefs LDC all D_Version2 assert D_PreConditions D_PostConditions D_Invariants D_ModuleInfo D_Exceptions D_TypeInfo AArch64 ARM_HardFloat D_HardFloat LittleEndian D_LP64 D_PIC OSX darwin Posix CppRuntime_LLVM CppRuntime_Clang LDC_LLVM_1901 D_ObjectiveC
parse hello
importall hello
import object (/opt/dlang/bin/../import/object.d)
import core.attribute (/opt/dlang/bin/../import/core/attribute.d)
import ldc.attributes (/opt/dlang/bin/../import/ldc/attributes.d)
import core.internal.hash (/opt/dlang/bin/../import/core/internal/hash.d)
import core.internal.traits (/opt/dlang/bin/../import/core/internal/traits.d)
import core.internal.entrypoint (/opt/dlang/bin/../import/core/internal/entrypoint.d)
import core.internal.array.appending (/opt/dlang/bin/../import/core/internal/array/appending.d)
import core.internal.array.comparison (/opt/dlang/bin/../import/core/internal/array/comparison.d)
import core.internal.array.equality (/opt/dlang/bin/../import/core/internal/array/equality.d)
import core.internal.array.casting (/opt/dlang/bin/../import/core/internal/array/casting.d)
import core.internal.array.concatenation (/opt/dlang/bin/../import/core/internal/array/concatenation.d)
import core.internal.array.construction (/opt/dlang/bin/../import/core/internal/array/construction.d)
import core.internal.array.arrayassign (/opt/dlang/bin/../import/core/internal/array/arrayassign.d)
import core.internal.array.capacity (/opt/dlang/bin/../import/core/internal/array/capacity.d)
import core.internal.dassert (/opt/dlang/bin/../import/core/internal/dassert.d)
import core.internal.destruction (/opt/dlang/bin/../import/core/internal/destruction.d)
import core.internal.moving (/opt/dlang/bin/../import/core/internal/moving.d)
import core.internal.postblit (/opt/dlang/bin/../import/core/internal/postblit.d)
import core.internal.switch_ (/opt/dlang/bin/../import/core/internal/switch_.d)
import core.lifetime (/opt/dlang/bin/../import/core/lifetime.d)
import core.internal.attributes (/opt/dlang/bin/../import/core/internal/attributes.d)
import core.builtins (/opt/dlang/bin/../import/core/builtins.d)
import ldc.intrinsics (/opt/dlang/bin/../import/ldc/intrinsics.di)
import std.stdio (/opt/dlang/bin/../import/std/stdio.d)
import core.stdc.stddef (/opt/dlang/bin/../import/core/stdc/stddef.d)
import std.algorithm.mutation (/opt/dlang/bin/../import/std/algorithm/mutation.d)
import std.traits (/opt/dlang/bin/../import/std/traits.d)
import std.meta (/opt/dlang/bin/../import/std/meta.d)
import std.range.primitives (/opt/dlang/bin/../import/std/range/primitives.d)
import std.typecons (/opt/dlang/bin/../import/std/typecons.d)
import std.format.spec (/opt/dlang/bin/../import/std/format/spec.d)
import std.format.write (/opt/dlang/bin/../import/std/format/write.d)
import std.format.internal.write (/opt/dlang/bin/../import/std/format/internal/write.d)
import std.internal.attributes (/opt/dlang/bin/../import/std/internal/attributes.d)
import std.range (/opt/dlang/bin/../import/std/range/package.d)
import std.array (/opt/dlang/bin/../import/std/array.d)
import std.functional (/opt/dlang/bin/../import/std/functional.d)
import std.conv (/opt/dlang/bin/../import/std/conv.d)
import std.ascii (/opt/dlang/bin/../import/std/ascii.d)
import std.range.interfaces (/opt/dlang/bin/../import/std/range/interfaces.d)
import core.stdc.stdio (/opt/dlang/bin/../import/core/stdc/stdio.d)
import core.stdc.stdint (/opt/dlang/bin/../import/core/stdc/stdint.d)
import core.stdc.config (/opt/dlang/bin/../import/core/stdc/config.d)
import core.stdc.signal (/opt/dlang/bin/../import/core/stdc/signal.d)
import core.stdc.wchar_ (/opt/dlang/bin/../import/core/stdc/wchar_.d)
import core.atomic (/opt/dlang/bin/../import/core/atomic.d)
import core.internal.atomic (/opt/dlang/bin/../import/core/internal/atomic.d)
import core.stdc.stdarg (/opt/dlang/bin/../import/core/stdc/stdarg.d)
import core.stdc.time (/opt/dlang/bin/../import/core/stdc/time.d)
import core.sys.posix.stdc.time (/opt/dlang/bin/../import/core/sys/posix/stdc/time.d)
import core.sys.posix.sys.types (/opt/dlang/bin/../import/core/sys/posix/sys/types.d)
import core.sys.posix.config (/opt/dlang/bin/../import/core/sys/posix/config.d)
import core.sys.posix.stdio (/opt/dlang/bin/../import/core/sys/posix/stdio.d)
semantic hello
import std.exception (/opt/dlang/bin/../import/std/exception.d)
import core.stdc.errno (/opt/dlang/bin/../import/core/stdc/errno.d)
entry main ./hello.d
semantic2 hello
semantic3 hello
import std.utf (/opt/dlang/bin/../import/std/utf.d)
import core.exception (/opt/dlang/bin/../import/core/exception.d)
import core.internal.string (/opt/dlang/bin/../import/core/internal/string.d)
import std.algorithm.comparison (/opt/dlang/bin/../import/std/algorithm/comparison.d)
import core.stdc.string (/opt/dlang/bin/../import/core/stdc/string.d)
import core.internal.array.duplication (/opt/dlang/bin/../import/core/internal/array/duplication.d)
import core.internal.array.utils (/opt/dlang/bin/../import/core/internal/array/utils.d)
import core.memory (/opt/dlang/bin/../import/core/memory.d)
import core.time (/opt/dlang/bin/../import/core/time.d)
import core.sys.posix.time (/opt/dlang/bin/../import/core/sys/posix/time.d)
import core.sys.posix.signal (/opt/dlang/bin/../import/core/sys/posix/signal.d)
import core.sys.posix.sys.time (/opt/dlang/bin/../import/core/sys/posix/sys/time.d)
import core.sys.posix.sys.select (/opt/dlang/bin/../import/core/sys/posix/sys/select.d)
import core.sys.darwin.mach.kern_return (/opt/dlang/bin/../import/core/sys/darwin/mach/kern_return.d)
import core.checkedint (/opt/dlang/bin/../import/core/checkedint.d)
GC stats 7M used, 5M free, 12M total
code hello
/usr/bin/cc hello.o -o hello -L/opt/dlang/bin/../lib -lphobos2-ldc -ldruntime-ldc -Wl,-dead_strip -lpthread -lm -lobjc -target arm64-apple-macos15

file ./hello
./hello: Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE|HAS_TLV_DESCRIPTORS>

./hello
zsh: segmentation fault ./hello

What did I do wrong? Or what did I fail to do?

Thanks,
Ken Wolcott

May 19
Try the beta, there is a known problem for OSX in older versions, that is supposed to be fixed.

https://github.com/ldc-developers/ldc/releases/tag/v1.41.0-beta1
May 18
On Sunday, 18 May 2025 at 20:59:12 UTC, Richard (Rikki) Andrew Cattermole wrote:
> Try the beta, there is a known problem for OSX in older versions, that is supposed to be fixed.
>
> https://github.com/ldc-developers/ldc/releases/tag/v1.41.0-beta1

Works great for me now.

Thanks!