diff --git a/compiler/src/dmd/dsymbol.d b/compiler/src/dmd/dsymbol.d index c940ff06c6..7e2d02f06b 100644 --- a/compiler/src/dmd/dsymbol.d +++ b/compiler/src/dmd/dsymbol.d @@ -1544,6 +1544,12 @@ public: if (flags & IgnoreAmbiguous) // if return NULL on ambiguity return null; + + /* If two imports from C import files, pick first one, as C has global name space + */ + if (s.isCsymbol() && s2.isCsymbol()) + continue; + if (!(flags & IgnoreErrors)) ScopeDsymbol.multiplyDefined(loc, s, s2); break; diff --git a/compiler/test/compilable/cimports2.i b/compiler/test/compilable/cimports2.i new file mode 100644 index 0000000000..56e4693e76 --- /dev/null +++ b/compiler/test/compilable/cimports2.i @@ -0,0 +1,4 @@ +__import imports.cimports2a; +__import imports.cimports2b; + +int *p = &xx; diff --git a/compiler/test/compilable/imports/cimports2a.i b/compiler/test/compilable/imports/cimports2a.i new file mode 100644 index 0000000000..026e4801e5 --- /dev/null +++ b/compiler/test/compilable/imports/cimports2a.i @@ -0,0 +1 @@ +extern int xx; diff --git a/compiler/test/compilable/imports/cimports2b.i b/compiler/test/compilable/imports/cimports2b.i new file mode 100644 index 0000000000..026e4801e5 --- /dev/null +++ b/compiler/test/compilable/imports/cimports2b.i @@ -0,0 +1 @@ +extern int xx;