xref: /llvm-project/clang/test/Modules/cxx20-module-file-info-macros.cpp (revision da00c60dae0040185dc45039c4397f6e746548e9)
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