$ cat exc.d void main() { try { throw new Exception("muh"); } catch (Exception e) { } } $ dmd exc.d -L--gc-sections -L--print-gc-sections 2>&1 |grep exc /usr/bin/ld: Removing unused section '.deh_eh' in file 'exc.o' /usr/bin/ld: Removing unused section '.tdata' in file 'exc.o' $ ./exc unhandled exception This "unhandled exception" thing is printed when the D runtime (Tango; based on Phobos1 runtime) doesn't find any exception records. It seems --gc-sections removes all D sections (including the bottom most exception handler in the runtime). It seems the linker removes all entries from section .deh_eh. I wonder if this can be fixed. It works in g++.
*** This issue has been marked as a duplicate of issue 879 ***