1360c5fe5SChuanqi Xu // Test the output from -module-file-info about C++20 Modules 2360c5fe5SChuanqi Xu // can reflect macros definitions correctly. 3360c5fe5SChuanqi Xu // RUN: rm -rf %t 4360c5fe5SChuanqi Xu // RUN: mkdir -p %t 5360c5fe5SChuanqi Xu // RUN: split-file %s %t 6360c5fe5SChuanqi Xu // 7360c5fe5SChuanqi Xu // RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/foo.h -o %t/foo.pcm 8360c5fe5SChuanqi Xu // RUN: %clang_cc1 -module-file-info %t/foo.pcm | FileCheck %t/foo.h 9360c5fe5SChuanqi Xu // 10360c5fe5SChuanqi Xu // RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header %t/include_foo.h -o %t/include_foo.pcm 11360c5fe5SChuanqi Xu // RUN: %clang_cc1 -module-file-info %t/include_foo.pcm | FileCheck %t/include_foo.h 12360c5fe5SChuanqi Xu 13360c5fe5SChuanqi Xu // RUN: %clang_cc1 -std=c++20 -emit-header-unit -xc++-user-header -fmodule-file=%t/foo.pcm \ 14360c5fe5SChuanqi Xu // RUN: %t/import_foo.h -o %t/import_foo.pcm 15360c5fe5SChuanqi Xu // RUN: %clang_cc1 -module-file-info %t/import_foo.pcm | FileCheck %t/import_foo.h 16360c5fe5SChuanqi Xu // 17360c5fe5SChuanqi Xu // RUN: %clang_cc1 -std=c++20 %t/named_module.cppm -emit-module-interface -o %t/M.pcm 18360c5fe5SChuanqi Xu // RUN: %clang_cc1 -module-file-info %t/M.pcm | FileCheck %t/named_module.cppm 19360c5fe5SChuanqi Xu 20*da00c60dSChuanqi Xu // RUN: %clang_cc1 -std=c++20 %t/named_module.cppm -emit-reduced-module-interface -o %t/M.pcm 21*da00c60dSChuanqi Xu // RUN: %clang_cc1 -module-file-info %t/M.pcm | FileCheck %t/named_module.cppm 22*da00c60dSChuanqi Xu 23360c5fe5SChuanqi Xu //--- foo.h 24360c5fe5SChuanqi Xu #pragma once 25360c5fe5SChuanqi Xu #define FOO 26360c5fe5SChuanqi Xu #define CONSTANT 43 27360c5fe5SChuanqi Xu #define FUNC_Macro(X) (X+1) 28360c5fe5SChuanqi Xu #define TO_BE_UNDEF 29360c5fe5SChuanqi Xu #undef TO_BE_UNDEF 30360c5fe5SChuanqi Xu 31360c5fe5SChuanqi Xu #ifndef FOO 32360c5fe5SChuanqi Xu #define CONDITIONAL_DEF 33360c5fe5SChuanqi Xu #endif 34360c5fe5SChuanqi Xu 35360c5fe5SChuanqi Xu #define REDEFINE 36360c5fe5SChuanqi Xu #define REDEFINE 37360c5fe5SChuanqi Xu 38360c5fe5SChuanqi Xu // CHECK: Macro Definitions: 39360c5fe5SChuanqi Xu // CHECK-DAG: REDEFINE 40360c5fe5SChuanqi Xu // CHECK-DAG: FUNC_Macro 41360c5fe5SChuanqi Xu // CHECK-DAG: CONSTANT 42360c5fe5SChuanqi Xu // CHECK-DAG: FOO 43360c5fe5SChuanqi Xu // CHECK-NEXT: === 44360c5fe5SChuanqi Xu 45360c5fe5SChuanqi Xu //--- include_foo.h 46360c5fe5SChuanqi Xu #include "foo.h" 47360c5fe5SChuanqi Xu #undef REDEFINE 48360c5fe5SChuanqi Xu // CHECK: Macro Definitions: 49360c5fe5SChuanqi Xu // CHECK-DAG: CONSTANT 50360c5fe5SChuanqi Xu // CHECK-DAG: FUNC_Macro 51360c5fe5SChuanqi Xu // CHECK-DAG: FOO 52360c5fe5SChuanqi Xu // CHECK-NEXT: === 53360c5fe5SChuanqi Xu 54360c5fe5SChuanqi Xu //--- import_foo.h 55360c5fe5SChuanqi Xu import "foo.h"; 56360c5fe5SChuanqi Xu #undef REDEFINE 57360c5fe5SChuanqi Xu // CHECK: Macro Definitions: 58360c5fe5SChuanqi Xu // CHECK-DAG: CONSTANT 59360c5fe5SChuanqi Xu // CHECK-DAG: FUNC_Macro 60360c5fe5SChuanqi Xu // CHECK-DAG: FOO 61360c5fe5SChuanqi Xu // CHECK-NEXT: === 62360c5fe5SChuanqi Xu 63360c5fe5SChuanqi Xu //--- named_module.cppm 64360c5fe5SChuanqi Xu module; 65360c5fe5SChuanqi Xu #include "foo.h" 66360c5fe5SChuanqi Xu export module M; 67360c5fe5SChuanqi Xu #define M_Module 43 68d5844685SChuanqi Xu // CHECK-NOT: Macro Definitions: 69