blob: 5e5f1e82f9b7cd4f2de2d7f19dd86fc1c57488b4 [file] [log] [blame]
Reid Klecknerdbc390d2018-07-23 17:44:00 +00001// This test verifies that the correct macros are predefined.
2//
3// RUN: %clang_cc1 %s -x c++ -E -dM -triple x86_64-pc-win32 -fms-extensions -fms-compatibility \
4// RUN: -fms-compatibility-version=19.00 -std=c++14 -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS64
Nirav Dave90868bb2019-02-14 19:27:25 +00005// RUN: %clang_cc1 %s -x c++ -E -dM -triple x86_64-pc-win32 -fms-extensions -fms-compatibility \
6// RUN: -fms-compatibility-version=19.00 -std=c++14 -o - | grep GCC | count 1
Reid Klecknerdbc390d2018-07-23 17:44:00 +00007// CHECK-MS64: #define _INTEGRAL_MAX_BITS 64
8// CHECK-MS64: #define _MSC_EXTENSIONS 1
9// CHECK-MS64: #define _MSC_VER 1900
10// CHECK-MS64: #define _MSVC_LANG 201402L
11// CHECK-MS64: #define _M_AMD64 100
12// CHECK-MS64: #define _M_X64 100
13// CHECK-MS64: #define _WIN64 1
14// CHECK-MS64-NOT: #define __STRICT_ANSI__
Nirav Dave90868bb2019-02-14 19:27:25 +000015// CHECK-MS64-NOT: GNU
16// CHECK-MS64-NOT: GXX
17// CHECK-MS64: #define __GCC_ASM_FLAG_OUTPUTS__ 1
Reid Klecknerdbc390d2018-07-23 17:44:00 +000018// CHECK-MS64-NOT: GNU
19// CHECK-MS64-NOT: GXX
20
21// RUN: %clang_cc1 %s -x c++ -E -dM -triple i686-pc-win32 -fms-extensions -fms-compatibility \
22// RUN: -fms-compatibility-version=19.00 -std=c++17 -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS
Nirav Dave90868bb2019-02-14 19:27:25 +000023// RUN: %clang_cc1 %s -x c++ -E -dM -triple i686-pc-win32 -fms-extensions -fms-compatibility \
24// RUN: -fms-compatibility-version=19.00 -std=c++17 -o - | grep GCC | count 1
Reid Klecknerdbc390d2018-07-23 17:44:00 +000025// CHECK-MS: #define _INTEGRAL_MAX_BITS 64
26// CHECK-MS: #define _MSC_EXTENSIONS 1
27// CHECK-MS: #define _MSC_VER 1900
28// CHECK-MS: #define _MSVC_LANG 201703L
29// CHECK-MS: #define _M_IX86 600
30// CHECK-MS: #define _M_IX86_FP 0
31// CHECK-MS: #define _WIN32 1
32// CHECK-MS-NOT: #define __STRICT_ANSI__
Nirav Dave90868bb2019-02-14 19:27:25 +000033// CHECK-MS-NOT: GNU
34// CHECK-MS-NOT: GXX
35// CHECK-MS: #define __GCC_ASM_FLAG_OUTPUTS__ 1
Reid Klecknerdbc390d2018-07-23 17:44:00 +000036// CHECK-MS-NOT: GNU
37// CHECK-MS-NOT: GXX
38
39// RUN: %clang_cc1 %s -x c++ -E -dM -triple i686-pc-win32 -fms-extensions -fms-compatibility \
40// RUN: -fms-compatibility-version=19.00 -std=c++2a -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS-CPP2A
41// CHECK-MS-CPP2A: #define _MSC_VER 1900
42// CHECK-MS-CPP2A: #define _MSVC_LANG 201704L
43
44// RUN: %clang_cc1 -triple i386-windows %s -E -dM -o - \
45// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-X86-WIN
46
47// CHECK-X86-WIN-NOT: #define WIN32 1
48// CHECK-X86-WIN-NOT: #define WIN64 1
49// CHECK-X86-WIN-NOT: #define WINNT 1
50// CHECK-X86-WIN: #define _WIN32 1
51// CHECK-X86-WIN-NOT: #define _WIN64 1
52
53// RUN: %clang_cc1 -triple thumbv7-windows %s -E -dM -o - \
54// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-ARM-WIN
55
56// CHECK-ARM-WIN-NOT: #define WIN32 1
57// CHECK-ARM-WIN-NOT: #define WIN64 1
58// CHECK-ARM-WIN-NOT: #define WINNT 1
59// CHECK-ARM-WIN: #define _WIN32 1
60// CHECK-ARM-WIN-NOT: #define _WIN64 1
61
62// RUN: %clang_cc1 -triple x86_64-windows %s -E -dM -o - \
63// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-AMD64-WIN
64
65// CHECK-AMD64-WIN-NOT: #define WIN32 1
66// CHECK-AMD64-WIN-NOT: #define WIN64 1
67// CHECK-AMD64-WIN-NOT: #define WINNT 1
68// CHECK-AMD64-WIN: #define _WIN32 1
69// CHECK-AMD64-WIN: #define _WIN64 1
70
71// RUN: %clang_cc1 -triple aarch64-windows %s -E -dM -o - \
72// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-ARM64-WIN
73
74// CHECK-ARM64-WIN-NOT: #define WIN32 1
75// CHECK-ARM64-WIN-NOT: #define WIN64 1
76// CHECK-ARM64-WIN-NOT: #define WINNT 1
77// CHECK-ARM64-WIN: #define _M_ARM64 1
78// CHECK-ARM64-WIN: #define _WIN32 1
79// CHECK-ARM64-WIN: #define _WIN64 1
80
81// RUN: %clang_cc1 -triple i686-windows-gnu %s -E -dM -o - \
82// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-X86-MINGW
83
84// CHECK-X86-MINGW: #define WIN32 1
85// CHECK-X86-MINGW-NOT: #define WIN64 1
86// CHECK-X86-MINGW: #define WINNT 1
87// CHECK-X86-MINGW: #define _WIN32 1
88// CHECK-X86-MINGW-NOT: #define _WIN64 1
89
90// RUN: %clang_cc1 -triple thumbv7-windows-gnu %s -E -dM -o - \
91// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-ARM-MINGW
92
93// CHECK-ARM-MINGW: #define WIN32 1
94// CHECK-ARM-MINGW-NOT: #define WIN64 1
95// CHECK-ARM-MINGW: #define WINNT 1
96// CHECK-ARM-MINGW: #define _WIN32 1
97// CHECK-ARM-MINGW-NOT: #define _WIN64 1
98
99// RUN: %clang_cc1 -triple x86_64-windows-gnu %s -E -dM -o - \
100// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-AMD64-MINGW
101
102// CHECK-AMD64-MINGW: #define WIN32 1
103// CHECK-AMD64-MINGW: #define WIN64 1
104// CHECK-AMD64-MINGW: #define WINNT 1
105// CHECK-AMD64-MINGW: #define _WIN32 1
106// CHECK-AMD64-MINGW: #define _WIN64 1
107
108// RUN: %clang_cc1 -triple aarch64-windows-gnu %s -E -dM -o - \
109// RUN: | FileCheck -match-full-lines %s --check-prefix=CHECK-ARM64-MINGW
110
111// CHECK-ARM64-MINGW-NOT: #define _M_ARM64 1
112// CHECK-ARM64-MINGW: #define WIN32 1
113// CHECK-ARM64-MINGW: #define WIN64 1
114// CHECK-ARM64-MINGW: #define WINNT 1
115// CHECK-ARM64-MINGW: #define _WIN32 1
116// CHECK-ARM64-MINGW: #define _WIN64 1
117// CHECK-ARM64-MINGW: #define __aarch64__ 1