| // Test that implicit module builds diagnose redefinition of a module when two |
| // different modulemaps define the same module name. |
| // |
| // Module "b" is defined in both first/module.modulemap and |
| // second/module.modulemap. |
| |
| // RUN: rm -rf %t |
| // RUN: split-file %s %t |
| |
| // We detect the error when we read a's modulemap in first |
| // and discovers another b, which we have seen earlier in |
| // second/module.modulemap. |
| // RUN: not %clang_cc1 -x objective-c -fmodules -fimplicit-module-maps \ |
| // RUN: -I %t/second -I %t/first \ |
| // RUN: -fmodules-cache-path=%t/cache \ |
| // RUN: %t/sourcefile.c 2>&1 | FileCheck %s |
| |
| // CHECK: first{{[/\\]}}module.modulemap:5:8: error: redefinition of module 'b' |
| // CHECK: second{{[/\\]}}module.modulemap:1:8: note: previously defined here |
| |
| // On the other hand, we do NOT detect error if we load a's modulemap first. |
| // Checking duplicating module decls in general is too expensive, since |
| // it requires loading all the modulemaps. The command below should succeed. |
| // RUN: %clang_cc1 -x objective-c -fmodules -fimplicit-module-maps \ |
| // RUN: -I %t/first -I %t/second \ |
| // RUN: -fmodules-cache-path=%t/cache \ |
| // RUN: %t/sourcefile.c |
| |
| //--- first/module.modulemap |
| module a { |
| header "a.h" |
| } |
| |
| module b { |
| export * |
| } |
| |
| //--- first/a.h |
| // empty |
| |
| //--- second/module.modulemap |
| module b { |
| header "b.h" |
| } |
| |
| //--- second/b.h |
| // empty |
| |
| |
| //--- sourcefile.c |
| @import b; |
| @import a; |
| |
| int main() { |
| return 0; |
| } |