1 // RUN: rm -rf %t 2 3 // RUN: not %clang_cc1 -fmodules -fmodule-name=file -I%S/Inputs/preprocess -x c++-module-map %S/Inputs/preprocess/module.modulemap -E 2>&1 | FileCheck %s --check-prefix=MISSING-FWD 4 // MISSING-FWD: module 'fwd' is needed 5 6 // RUN: %clang_cc1 -fmodules -fmodule-name=file -fmodules-cache-path=%t -I%S/Inputs/preprocess -x c++-module-map %S/Inputs/preprocess/module.modulemap -E | FileCheck %s --check-prefix=CHECK --check-prefix=NO-REWRITE 7 // RUN: %clang_cc1 -fmodules -fmodule-name=file -fmodules-cache-path=%t -I%S/Inputs/preprocess -x c++-module-map %S/Inputs/preprocess/module.modulemap -E -frewrite-includes | FileCheck %s --check-prefix=CHECK --check-prefix=REWRITE 8 9 // == file.h 10 // CHECK: # 1 "<module-includes>" 11 // REWRITE: #if 0 12 // REWRITE: #include "file.h" 13 // REWRITE: #endif 14 // 15 // FIXME: It would be preferable to consistently put the module begin/end in 16 // the same file, but the relative ordering of PP callbacks and module 17 // begin/end tokens makes that difficult. 18 // 19 // REWRITE: #pragma clang module begin file 20 // CHECK: # 1 "{{.*}}file.h" 1 21 // NO-REWRITE: #pragma clang module begin file 22 // NO-REWRITE: # 1 "{{.*}}file.h"{{$}} 23 // 24 // CHECK: struct __FILE; 25 // CHECK: #pragma clang module import fwd /* clang {{-E|-frewrite-includes}}: implicit import 26 // CHECK: typedef struct __FILE FILE; 27 // 28 // REWRITE: #pragma clang module end 29 // CHECK: # 2 "<module-includes>" 2 30 // NO-REWRITE: #pragma clang module end 31 32 // == file2.h 33 // REWRITE: #if 0 34 // REWRITE: #include "file2.h" 35 // REWRITE: #endif 36 // 37 // REWRITE: #pragma clang module begin file 38 // CHECK: # 1 "{{.*}}file2.h" 1 39 // NO-REWRITE: #pragma clang module begin file 40 // 41 // ==== recursively re-enter file.h 42 // REWRITE: #if 0 43 // REWRITE: #include "file.h" 44 // REWRITE: #endif 45 // 46 // REWRITE: #pragma clang module begin file 47 // CHECK: # 1 "{{.*}}file.h" 1 48 // NO-REWRITE: #pragma clang module begin file 49 // NO-REWRITE: # 1 "{{.*}}file.h"{{$}} 50 // 51 // CHECK: struct __FILE; 52 // CHECK: #pragma clang module import fwd /* clang {{-E|-frewrite-includes}}: implicit import 53 // CHECK: typedef struct __FILE FILE; 54 // 55 // REWRITE: #pragma clang module end 56 // CHECK: # 2 "{{.*}}file2.h" 2 57 // NO-REWRITE: #pragma clang module end 58 // NO-REWRITE: # 2 "{{.*}}file2.h"{{$}} 59 // ==== return to file2.h 60 // 61 // CHECK: extern int file2; 62 // 63 // REWRITE: #pragma clang module end 64 // CHECK: # 3 "<module-includes>" 2 65 // NO-REWRITE: #pragma clang module end 66