1 // REQUIRES: shell 2 // 3 // RUN: rm -rf %t 4 // RUN: mkdir %t 5 // 6 // Build module map with 40 modules; two layers with importing and re-exporting 7 // the previous layer. 8 // 9 // RUN: echo 'module a0 { header "a0.h" export * }' > %t/module.modulemap 10 // RUN: echo 'module b0 { header "b0.h" export * }' >> %t/module.modulemap 11 // RUN: echo 'module a1 { header "a1.h" export * }' >> %t/module.modulemap 12 // RUN: echo 'module b1 { header "b1.h" export * }' >> %t/module.modulemap 13 // RUN: echo 'module a2 { header "a2.h" export * }' >> %t/module.modulemap 14 // RUN: echo 'module b2 { header "b2.h" export * }' >> %t/module.modulemap 15 // RUN: echo 'module a3 { header "a3.h" export * }' >> %t/module.modulemap 16 // RUN: echo 'module b3 { header "b3.h" export * }' >> %t/module.modulemap 17 // RUN: echo 'module a4 { header "a4.h" export * }' >> %t/module.modulemap 18 // RUN: echo 'module b4 { header "b4.h" export * }' >> %t/module.modulemap 19 // RUN: echo 'module a5 { header "a5.h" export * }' >> %t/module.modulemap 20 // RUN: echo 'module b5 { header "b5.h" export * }' >> %t/module.modulemap 21 // RUN: echo 'module a6 { header "a6.h" export * }' >> %t/module.modulemap 22 // RUN: echo 'module b6 { header "b6.h" export * }' >> %t/module.modulemap 23 // RUN: echo 'module a7 { header "a7.h" export * }' >> %t/module.modulemap 24 // RUN: echo 'module b7 { header "b7.h" export * }' >> %t/module.modulemap 25 // RUN: echo 'module a8 { header "a8.h" export * }' >> %t/module.modulemap 26 // RUN: echo 'module b8 { header "b8.h" export * }' >> %t/module.modulemap 27 // RUN: echo 'module a9 { header "a9.h" export * }' >> %t/module.modulemap 28 // RUN: echo 'module b9 { header "b9.h" export * }' >> %t/module.modulemap 29 // RUN: echo 'module a10 { header "a10.h" export * }' >> %t/module.modulemap 30 // RUN: echo 'module b10 { header "b10.h" export * }' >> %t/module.modulemap 31 // RUN: echo 'module a11 { header "a11.h" export * }' >> %t/module.modulemap 32 // RUN: echo 'module b11 { header "b11.h" export * }' >> %t/module.modulemap 33 // RUN: echo 'module a12 { header "a12.h" export * }' >> %t/module.modulemap 34 // RUN: echo 'module b12 { header "b12.h" export * }' >> %t/module.modulemap 35 // RUN: echo 'module a13 { header "a13.h" export * }' >> %t/module.modulemap 36 // RUN: echo 'module b13 { header "b13.h" export * }' >> %t/module.modulemap 37 // RUN: echo 'module a14 { header "a14.h" export * }' >> %t/module.modulemap 38 // RUN: echo 'module b14 { header "b14.h" export * }' >> %t/module.modulemap 39 // RUN: echo 'module a15 { header "a15.h" export * }' >> %t/module.modulemap 40 // RUN: echo 'module b15 { header "b15.h" export * }' >> %t/module.modulemap 41 // RUN: echo 'module a16 { header "a16.h" export * }' >> %t/module.modulemap 42 // RUN: echo 'module b16 { header "b16.h" export * }' >> %t/module.modulemap 43 // RUN: echo 'module a17 { header "a17.h" export * }' >> %t/module.modulemap 44 // RUN: echo 'module b17 { header "b17.h" export * }' >> %t/module.modulemap 45 // RUN: echo 'module a18 { header "a18.h" export * }' >> %t/module.modulemap 46 // RUN: echo 'module b18 { header "b18.h" export * }' >> %t/module.modulemap 47 // RUN: echo 'module a19 { header "a19.h" export * }' >> %t/module.modulemap 48 // RUN: echo 'module b19 { header "b19.h" export * }' >> %t/module.modulemap 49 // RUN: echo 'module a20 { header "a20.h" export * }' >> %t/module.modulemap 50 // RUN: echo 'module b20 { header "b20.h" export * }' >> %t/module.modulemap 51 // 52 // Build the corresponding headers. 53 // 54 // RUN: echo 'extern int n;' > %t/a0.h 55 // RUN: cp %t/a0.h %t/b0.h 56 // RUN: echo '#include "a0.h"' > %t/a1.h 57 // RUN: echo '#include "b0.h"' >> %t/a1.h 58 // RUN: cp %t/a1.h %t/b1.h 59 // RUN: echo '#include "a1.h"' > %t/a2.h 60 // RUN: echo '#include "b1.h"' >> %t/a2.h 61 // RUN: cp %t/a2.h %t/b2.h 62 // RUN: echo '#include "a2.h"' > %t/a3.h 63 // RUN: echo '#include "b2.h"' >> %t/a3.h 64 // RUN: cp %t/a3.h %t/b3.h 65 // RUN: echo '#include "a3.h"' > %t/a4.h 66 // RUN: echo '#include "b3.h"' >> %t/a4.h 67 // RUN: cp %t/a4.h %t/b4.h 68 // RUN: echo '#include "a4.h"' > %t/a5.h 69 // RUN: echo '#include "b4.h"' >> %t/a5.h 70 // RUN: cp %t/a5.h %t/b5.h 71 // RUN: echo '#include "a5.h"' > %t/a6.h 72 // RUN: echo '#include "b5.h"' >> %t/a6.h 73 // RUN: cp %t/a6.h %t/b6.h 74 // RUN: echo '#include "a6.h"' > %t/a7.h 75 // RUN: echo '#include "b6.h"' >> %t/a7.h 76 // RUN: cp %t/a7.h %t/b7.h 77 // RUN: echo '#include "a7.h"' > %t/a8.h 78 // RUN: echo '#include "b7.h"' >> %t/a8.h 79 // RUN: cp %t/a8.h %t/b8.h 80 // RUN: echo '#include "a8.h"' > %t/a9.h 81 // RUN: echo '#include "b8.h"' >> %t/a9.h 82 // RUN: cp %t/a9.h %t/b9.h 83 // RUN: echo '#include "a9.h"' > %t/a10.h 84 // RUN: echo '#include "b9.h"' >> %t/a10.h 85 // RUN: cp %t/a10.h %t/b10.h 86 // RUN: echo '#include "a10.h"' > %t/a11.h 87 // RUN: echo '#include "b10.h"' >> %t/a11.h 88 // RUN: cp %t/a11.h %t/b11.h 89 // RUN: echo '#include "a11.h"' > %t/a12.h 90 // RUN: echo '#include "b11.h"' >> %t/a12.h 91 // RUN: cp %t/a12.h %t/b12.h 92 // RUN: echo '#include "a12.h"' > %t/a13.h 93 // RUN: echo '#include "b12.h"' >> %t/a13.h 94 // RUN: cp %t/a13.h %t/b13.h 95 // RUN: echo '#include "a13.h"' > %t/a14.h 96 // RUN: echo '#include "b13.h"' >> %t/a14.h 97 // RUN: cp %t/a14.h %t/b14.h 98 // RUN: echo '#include "a14.h"' > %t/a15.h 99 // RUN: echo '#include "b14.h"' >> %t/a15.h 100 // RUN: cp %t/a15.h %t/b15.h 101 // RUN: echo '#include "a15.h"' > %t/a16.h 102 // RUN: echo '#include "b15.h"' >> %t/a16.h 103 // RUN: cp %t/a16.h %t/b16.h 104 // RUN: echo '#include "a16.h"' > %t/a17.h 105 // RUN: echo '#include "b16.h"' >> %t/a17.h 106 // RUN: cp %t/a17.h %t/b17.h 107 // RUN: echo '#include "a17.h"' > %t/a18.h 108 // RUN: echo '#include "b17.h"' >> %t/a18.h 109 // RUN: cp %t/a18.h %t/b18.h 110 // RUN: echo '#include "a18.h"' > %t/a19.h 111 // RUN: echo '#include "b18.h"' >> %t/a19.h 112 // RUN: cp %t/a19.h %t/b19.h 113 // RUN: echo '#include "a19.h"' > %t/a20.h 114 // RUN: echo '#include "b19.h"' >> %t/a20.h 115 // RUN: cp %t/a20.h %t/b20.h 116 // 117 // Explicitly build all the modules. 118 // 119 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a0 -x c++ -emit-module %t/module.modulemap -o %t/a0.pcm 120 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b0 -x c++ -emit-module %t/module.modulemap -o %t/b0.pcm 121 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a1 -x c++ -emit-module %t/module.modulemap -o %t/a1.pcm -fmodule-file=%t/a0.pcm -fmodule-file=%t/b0.pcm 122 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b1 -x c++ -emit-module %t/module.modulemap -o %t/b1.pcm -fmodule-file=%t/a0.pcm -fmodule-file=%t/b0.pcm 123 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a2 -x c++ -emit-module %t/module.modulemap -o %t/a2.pcm -fmodule-file=%t/a1.pcm -fmodule-file=%t/b1.pcm 124 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b2 -x c++ -emit-module %t/module.modulemap -o %t/b2.pcm -fmodule-file=%t/a1.pcm -fmodule-file=%t/b1.pcm 125 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a3 -x c++ -emit-module %t/module.modulemap -o %t/a3.pcm -fmodule-file=%t/a2.pcm -fmodule-file=%t/b2.pcm 126 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b3 -x c++ -emit-module %t/module.modulemap -o %t/b3.pcm -fmodule-file=%t/a2.pcm -fmodule-file=%t/b2.pcm 127 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a4 -x c++ -emit-module %t/module.modulemap -o %t/a4.pcm -fmodule-file=%t/a3.pcm -fmodule-file=%t/b3.pcm 128 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b4 -x c++ -emit-module %t/module.modulemap -o %t/b4.pcm -fmodule-file=%t/a3.pcm -fmodule-file=%t/b3.pcm 129 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a5 -x c++ -emit-module %t/module.modulemap -o %t/a5.pcm -fmodule-file=%t/a4.pcm -fmodule-file=%t/b4.pcm 130 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b5 -x c++ -emit-module %t/module.modulemap -o %t/b5.pcm -fmodule-file=%t/a4.pcm -fmodule-file=%t/b4.pcm 131 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a6 -x c++ -emit-module %t/module.modulemap -o %t/a6.pcm -fmodule-file=%t/a5.pcm -fmodule-file=%t/b5.pcm 132 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b6 -x c++ -emit-module %t/module.modulemap -o %t/b6.pcm -fmodule-file=%t/a5.pcm -fmodule-file=%t/b5.pcm 133 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a7 -x c++ -emit-module %t/module.modulemap -o %t/a7.pcm -fmodule-file=%t/a6.pcm -fmodule-file=%t/b6.pcm 134 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b7 -x c++ -emit-module %t/module.modulemap -o %t/b7.pcm -fmodule-file=%t/a6.pcm -fmodule-file=%t/b6.pcm 135 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a8 -x c++ -emit-module %t/module.modulemap -o %t/a8.pcm -fmodule-file=%t/a7.pcm -fmodule-file=%t/b7.pcm 136 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b8 -x c++ -emit-module %t/module.modulemap -o %t/b8.pcm -fmodule-file=%t/a7.pcm -fmodule-file=%t/b7.pcm 137 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a9 -x c++ -emit-module %t/module.modulemap -o %t/a9.pcm -fmodule-file=%t/a8.pcm -fmodule-file=%t/b8.pcm 138 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b9 -x c++ -emit-module %t/module.modulemap -o %t/b9.pcm -fmodule-file=%t/a8.pcm -fmodule-file=%t/b8.pcm 139 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a10 -x c++ -emit-module %t/module.modulemap -o %t/a10.pcm -fmodule-file=%t/a9.pcm -fmodule-file=%t/b9.pcm 140 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b10 -x c++ -emit-module %t/module.modulemap -o %t/b10.pcm -fmodule-file=%t/a9.pcm -fmodule-file=%t/b9.pcm 141 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a11 -x c++ -emit-module %t/module.modulemap -o %t/a11.pcm -fmodule-file=%t/a10.pcm -fmodule-file=%t/b10.pcm 142 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b11 -x c++ -emit-module %t/module.modulemap -o %t/b11.pcm -fmodule-file=%t/a10.pcm -fmodule-file=%t/b10.pcm 143 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a12 -x c++ -emit-module %t/module.modulemap -o %t/a12.pcm -fmodule-file=%t/a11.pcm -fmodule-file=%t/b11.pcm 144 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b12 -x c++ -emit-module %t/module.modulemap -o %t/b12.pcm -fmodule-file=%t/a11.pcm -fmodule-file=%t/b11.pcm 145 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a13 -x c++ -emit-module %t/module.modulemap -o %t/a13.pcm -fmodule-file=%t/a12.pcm -fmodule-file=%t/b12.pcm 146 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b13 -x c++ -emit-module %t/module.modulemap -o %t/b13.pcm -fmodule-file=%t/a12.pcm -fmodule-file=%t/b12.pcm 147 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a14 -x c++ -emit-module %t/module.modulemap -o %t/a14.pcm -fmodule-file=%t/a13.pcm -fmodule-file=%t/b13.pcm 148 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b14 -x c++ -emit-module %t/module.modulemap -o %t/b14.pcm -fmodule-file=%t/a13.pcm -fmodule-file=%t/b13.pcm 149 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a15 -x c++ -emit-module %t/module.modulemap -o %t/a15.pcm -fmodule-file=%t/a14.pcm -fmodule-file=%t/b14.pcm 150 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b15 -x c++ -emit-module %t/module.modulemap -o %t/b15.pcm -fmodule-file=%t/a14.pcm -fmodule-file=%t/b14.pcm 151 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a16 -x c++ -emit-module %t/module.modulemap -o %t/a16.pcm -fmodule-file=%t/a15.pcm -fmodule-file=%t/b15.pcm 152 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b16 -x c++ -emit-module %t/module.modulemap -o %t/b16.pcm -fmodule-file=%t/a15.pcm -fmodule-file=%t/b15.pcm 153 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a17 -x c++ -emit-module %t/module.modulemap -o %t/a17.pcm -fmodule-file=%t/a16.pcm -fmodule-file=%t/b16.pcm 154 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b17 -x c++ -emit-module %t/module.modulemap -o %t/b17.pcm -fmodule-file=%t/a16.pcm -fmodule-file=%t/b16.pcm 155 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a18 -x c++ -emit-module %t/module.modulemap -o %t/a18.pcm -fmodule-file=%t/a17.pcm -fmodule-file=%t/b17.pcm 156 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b18 -x c++ -emit-module %t/module.modulemap -o %t/b18.pcm -fmodule-file=%t/a17.pcm -fmodule-file=%t/b17.pcm 157 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a19 -x c++ -emit-module %t/module.modulemap -o %t/a19.pcm -fmodule-file=%t/a18.pcm -fmodule-file=%t/b18.pcm 158 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b19 -x c++ -emit-module %t/module.modulemap -o %t/b19.pcm -fmodule-file=%t/a18.pcm -fmodule-file=%t/b18.pcm 159 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=a20 -x c++ -emit-module %t/module.modulemap -o %t/a20.pcm -fmodule-file=%t/a19.pcm -fmodule-file=%t/b19.pcm 160 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fmodule-name=b20 -x c++ -emit-module %t/module.modulemap -o %t/b20.pcm -fmodule-file=%t/a19.pcm -fmodule-file=%t/b19.pcm 161 // 162 // Build, using all the modules. 163 // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%t -fsyntax-only %s \ 164 // RUN: -fmodule-file=%t/a0.pcm -fmodule-file=%t/b0.pcm \ 165 // RUN: -fmodule-file=%t/a1.pcm -fmodule-file=%t/b1.pcm \ 166 // RUN: -fmodule-file=%t/a2.pcm -fmodule-file=%t/b2.pcm \ 167 // RUN: -fmodule-file=%t/a3.pcm -fmodule-file=%t/b3.pcm \ 168 // RUN: -fmodule-file=%t/a4.pcm -fmodule-file=%t/b4.pcm \ 169 // RUN: -fmodule-file=%t/a5.pcm -fmodule-file=%t/b5.pcm \ 170 // RUN: -fmodule-file=%t/a6.pcm -fmodule-file=%t/b6.pcm \ 171 // RUN: -fmodule-file=%t/a7.pcm -fmodule-file=%t/b7.pcm \ 172 // RUN: -fmodule-file=%t/a8.pcm -fmodule-file=%t/b8.pcm \ 173 // RUN: -fmodule-file=%t/a9.pcm -fmodule-file=%t/b9.pcm \ 174 // RUN: -fmodule-file=%t/a10.pcm -fmodule-file=%t/b10.pcm \ 175 // RUN: -fmodule-file=%t/a11.pcm -fmodule-file=%t/b11.pcm \ 176 // RUN: -fmodule-file=%t/a12.pcm -fmodule-file=%t/b12.pcm \ 177 // RUN: -fmodule-file=%t/a13.pcm -fmodule-file=%t/b13.pcm \ 178 // RUN: -fmodule-file=%t/a14.pcm -fmodule-file=%t/b14.pcm \ 179 // RUN: -fmodule-file=%t/a15.pcm -fmodule-file=%t/b15.pcm \ 180 // RUN: -fmodule-file=%t/a16.pcm -fmodule-file=%t/b16.pcm \ 181 // RUN: -fmodule-file=%t/a17.pcm -fmodule-file=%t/b17.pcm \ 182 // RUN: -fmodule-file=%t/a18.pcm -fmodule-file=%t/b18.pcm \ 183 // RUN: -fmodule-file=%t/a19.pcm -fmodule-file=%t/b19.pcm \ 184 // RUN: -fmodule-file=%t/a20.pcm -fmodule-file=%t/b20.pcm 185 186 #include "a20.h" 187 #include "b20.h" 188 int k = n; 189