diff --git a/dmd/main.d b/dmd/main.d index b1588b8a0cd..327336a626a 100644 --- a/dmd/main.d +++ b/dmd/main.d @@ -786,7 +786,8 @@ version (IN_LLVM) if (global.errors) fatal(); - if (!IN_LLVM && driverParams.lib && params.objfiles.length == 0) + // IN_LLVM: with -lib, accept no object files if there are library files + if (driverParams.lib && params.objfiles.length == 0 && (!IN_LLVM || params.libfiles.length == 0)) { error(Loc.initial, "no input files"); return EXIT_FAILURE; @@ -834,12 +835,11 @@ else if (global.errors) fatal(); int status = EXIT_SUCCESS; - if (!params.objfiles.length) + // IN_LLVM: with -lib, accept no object files if there are library files (verified earlier) + if (!params.objfiles.length && (!IN_LLVM || !driverParams.lib)) { if (driverParams.link) error(Loc.initial, "no object files to link"); - if (IN_LLVM && !driverParams.link && driverParams.lib) - error(Loc.initial, "no object files"); } else { diff --git a/tests/driver/merge_static_libs.d b/tests/driver/merge_static_libs.d new file mode 100644 index 00000000000..970b5df60e3 --- /dev/null +++ b/tests/driver/merge_static_libs.d @@ -0,0 +1,5 @@ +// RUN: %ldc -lib %s -of=%t%lib +// RUN: %ldc -lib %t%lib -of=%t_merged%lib +// RUN: %diff_binary %t%lib %t_merged%lib + +void foo() {}