From reading the disassembly it looks like every time __arrayExpSliceMulSliceAddass_d is used, the implementation gets put in the object file instead of just an exterm reference.
main.d:
import module1;
void main() {
double[] a, b;
doStuff(a, b);
a[0..b.length] += b[0] * b[0..a.length];
}
module1.d:
void doStuff(double[] arr1, double[] arr2) {
arr1[0..arr2.length] += arr2[0] * arr2[0..arr1.length];
}
Command lines:
dmd -c main.d
dmd -c module1.d
dmd main.obj module1.obj
Result:
OPTLINK (R) for Win32 Release 8.00.8
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
module1.obj(module1) Offset 001FDH Record Type 00C3
Error 1: Previous Definition Different : __arrayExpSliceMulSliceAddass_d
--- errorlevel 1