xref: /llvm-project/clang/test/VFS/module-header-mismatches.m (revision 32208555af26c48f3df845a10b049c8eb74e2eb3)
1*32208555SBen Barham// RUN: rm -rf %t
2*32208555SBen Barham// RUN: split-file %s %t
3*32208555SBen Barham// RUN: sed -e "s;TEST_DIR;%/t;g" %t/sed-overlay.yaml > %t/overlay.yaml
4*32208555SBen Barham
5*32208555SBen Barham// These tests first build with an overlay such that the header is resolved
6*32208555SBen Barham// to %t/other/Mismatch.h. They then build again with the header resolved
7*32208555SBen Barham// to the one in their directory.
8*32208555SBen Barham//
9*32208555SBen Barham// This should cause a rebuild if the contents is different (and thus multiple
10*32208555SBen Barham// PCMs), but this currently isn't the case. We should at least not error,
11*32208555SBen Barham// since this does happen in real projects (with a different copy of the same
12*32208555SBen Barham// file).
13*32208555SBen Barham
14*32208555SBen Barham// RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/hf-mcp -ivfsoverlay %t/overlay.yaml -F %t/header-frameworks -fsyntax-only -verify %t/use.m
15*32208555SBen Barham// RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/hf-mcp -F %t/header-frameworks -fsyntax-only -verify %t/use.m
16*32208555SBen Barham// RUN: find %t/hf-mcp -name "Mismatch-*.pcm" | count 1
17*32208555SBen Barham
18*32208555SBen Barham// RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/df-mcp -ivfsoverlay %t/overlay.yaml -F %t/dir-frameworks -fsyntax-only -verify %t/use.m
19*32208555SBen Barham// RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/hf-mcp -F %t/dir-frameworks -fsyntax-only -verify %t/use.m
20*32208555SBen Barham// RUN: find %t/df-mcp -name "Mismatch-*.pcm" | count 1
21*32208555SBen Barham
22*32208555SBen Barham// RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/nf-mcp -ivfsoverlay %t/overlay.yaml -F %t/norm-frameworks -fsyntax-only -verify %t/use.m
23*32208555SBen Barham// RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/nf-mcp -F %t/norm-frameworks -fsyntax-only -verify %t/use.m
24*32208555SBen Barham// RUN: find %t/nf-mcp -name "Mismatch-*.pcm" | count 1
25*32208555SBen Barham
26*32208555SBen Barham// RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/m-mcp -ivfsoverlay %t/overlay.yaml -I %t/mod -fsyntax-only -verify %t/use.m
27*32208555SBen Barham// RUN: %clang_cc1 -Werror -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/m-mcp -I %t/mod -fsyntax-only -verify %t/use.m
28*32208555SBen Barham// RUN: find %t/m-mcp -name "Mismatch-*.pcm" | count 1
29*32208555SBen Barham
30*32208555SBen Barham//--- use.m
31*32208555SBen Barham// expected-no-diagnostics
32*32208555SBen Barham@import Mismatch;
33*32208555SBen Barham
34*32208555SBen Barham//--- header-frameworks/Mismatch.framework/Modules/module.modulemap
35*32208555SBen Barhamframework module Mismatch {
36*32208555SBen Barham  umbrella header "Mismatch.h"
37*32208555SBen Barham}
38*32208555SBen Barham//--- header-frameworks/Mismatch.framework/Headers/Mismatch.h
39*32208555SBen Barham
40*32208555SBen Barham//--- dir-frameworks/Mismatch.framework/Modules/module.modulemap
41*32208555SBen Barhamframework module Mismatch {
42*32208555SBen Barham  umbrella "someheaders"
43*32208555SBen Barham}
44*32208555SBen Barham//--- dir-frameworks/Mismatch.framework/someheaders/Mismatch.h
45*32208555SBen Barham
46*32208555SBen Barham//--- norm-frameworks/Mismatch.framework/Modules/module.modulemap
47*32208555SBen Barhamframework module Mismatch {
48*32208555SBen Barham  header "Mismatch.h"
49*32208555SBen Barham}
50*32208555SBen Barham//--- norm-frameworks/Mismatch.framework/Headers/Mismatch.h
51*32208555SBen Barham
52*32208555SBen Barham//--- mod/module.modulemap
53*32208555SBen Barhammodule Mismatch {
54*32208555SBen Barham  umbrella header "Mismatch.h"
55*32208555SBen Barham}
56*32208555SBen Barham//--- mod/Mismatch.h
57*32208555SBen Barham
58*32208555SBen Barham//--- other/Mismatch.h
59*32208555SBen Barham
60*32208555SBen Barham//--- sed-overlay.yaml
61*32208555SBen Barham{
62*32208555SBen Barham  'version': 0,
63*32208555SBen Barham  'roots': [
64*32208555SBen Barham    { 'name': 'TEST_DIR', 'type': 'directory',
65*32208555SBen Barham      'contents': [
66*32208555SBen Barham        { 'name': 'header-frameworks/Mismatch.framework/Headers/Mismatch.h',
67*32208555SBen Barham          'type': 'file',
68*32208555SBen Barham          'external-contents': 'TEST_DIR/other/Mismatch.h'
69*32208555SBen Barham        },
70*32208555SBen Barham        { 'name': 'dir-frameworks/Mismatch.framework/someheaders',
71*32208555SBen Barham          'type': 'directory',
72*32208555SBen Barham          'external-contents': 'TEST_DIR/others'
73*32208555SBen Barham        },
74*32208555SBen Barham        { 'name': 'norm-frameworks/Mismatch.framework/Headers/Mismatch.h',
75*32208555SBen Barham          'type': 'file',
76*32208555SBen Barham          'external-contents': 'TEST_DIR/other/Mismatch.h'
77*32208555SBen Barham        },
78*32208555SBen Barham        { 'name': 'mod/Mismatch.h',
79*32208555SBen Barham          'type': 'file',
80*32208555SBen Barham          'external-contents': 'TEST_DIR/other/Mismatch.h'
81*32208555SBen Barham        }
82*32208555SBen Barham      ]
83*32208555SBen Barham    }
84*32208555SBen Barham  ]
85*32208555SBen Barham}
86*32208555SBen Barham
87