1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // Test that headers are not tripped up by the surrounding code defining various 10 // alphabetic macros. 11 12 // The system-provided <uchar.h> seems to be broken on AIX 13 // XFAIL: LIBCXX-AIX-FIXME 14 15 // Prevent <ext/hash_map> from generating deprecated warnings for this test. 16 #if defined(__DEPRECATED) 17 # undef __DEPRECATED 18 #endif 19 20 #define NASTY_MACRO This should not be expanded!!! 21 22 // libc++ does not use single-letter names as a matter of principle. 23 // But Windows' own <wchar.h>, <math.h>, and <exception> use many of these 24 // (at least C,E,F,I,M,N,P,S,X,Y,Z) as uglified function parameter names, 25 // so don't define these on Windows. 26 // 27 #ifndef _WIN32 28 #define _A NASTY_MACRO 29 #define _B NASTY_MACRO 30 #define _C NASTY_MACRO 31 #define _D NASTY_MACRO 32 #define _E NASTY_MACRO 33 #define _F NASTY_MACRO 34 #define _G NASTY_MACRO 35 #define _H NASTY_MACRO 36 #define _I NASTY_MACRO 37 #define _J NASTY_MACRO 38 #define _K NASTY_MACRO 39 #define _L NASTY_MACRO 40 #define _M NASTY_MACRO 41 #define _N NASTY_MACRO 42 #define _O NASTY_MACRO 43 #define _P NASTY_MACRO 44 #define _Q NASTY_MACRO 45 #define _R NASTY_MACRO 46 #define _S NASTY_MACRO 47 #define _T NASTY_MACRO 48 #define _U NASTY_MACRO 49 #define _V NASTY_MACRO 50 #define _W NASTY_MACRO 51 #define _X NASTY_MACRO 52 #define _Y NASTY_MACRO 53 #define _Z NASTY_MACRO 54 #endif 55 56 // FreeBSD's <sys/types.h> uses _M 57 // 58 #ifdef __FreeBSD__ 59 # undef _M 60 #endif 61 62 // tchar.h defines these macros on Windows 63 #ifndef _WIN32 64 # define _UI NASTY_MACRO 65 # define _PUC NASTY_MACRO 66 # define _CPUC NASTY_MACRO 67 # define _PC NASTY_MACRO 68 # define _CRPC NASTY_MACRO 69 # define _CPC NASTY_MACRO 70 #endif 71 72 // yvals.h on MINGW defines this macro 73 #ifndef _WIN32 74 # define _C2 NASTY_MACRO 75 #endif 76 77 // Test that libc++ doesn't use names that collide with Win32 API macros. 78 // Obviously we can only define these on non-Windows platforms. 79 #ifndef _WIN32 80 # define __allocator NASTY_MACRO 81 # define __bound NASTY_MACRO 82 # define __deallocate NASTY_MACRO 83 # define __deref NASTY_MACRO 84 # define __format_string NASTY_MACRO 85 # define __full NASTY_MACRO 86 # define __in NASTY_MACRO 87 # define __inout NASTY_MACRO 88 # define __nz NASTY_MACRO 89 # define __out NASTY_MACRO 90 # define __part NASTY_MACRO 91 # define __post NASTY_MACRO 92 # define __pre NASTY_MACRO 93 #endif 94 95 #define __input NASTY_MACRO 96 #define __output NASTY_MACRO 97 98 #define __acquire NASTY_MACRO 99 #define __release NASTY_MACRO 100 101 // These names are not reserved, so the user can macro-define them. 102 // These are intended to find improperly _Uglified template parameters. 103 #define A NASTY_MACRO 104 #define Arg NASTY_MACRO 105 #define Args NASTY_MACRO 106 #define As NASTY_MACRO 107 #define B NASTY_MACRO 108 #define Bs NASTY_MACRO 109 #define C NASTY_MACRO 110 #define Cp NASTY_MACRO 111 #define Cs NASTY_MACRO 112 // Windows setjmp.h contains a struct member named 'D' on ARM/AArch64. 113 #ifndef _WIN32 114 # define D NASTY_MACRO 115 #endif 116 #define Dp NASTY_MACRO 117 #define Ds NASTY_MACRO 118 #define E NASTY_MACRO 119 #define Ep NASTY_MACRO 120 #define Es NASTY_MACRO 121 #define R NASTY_MACRO 122 #define Rp NASTY_MACRO 123 #define Rs NASTY_MACRO 124 #define T NASTY_MACRO 125 #define Tp NASTY_MACRO 126 #define Ts NASTY_MACRO 127 #define Type NASTY_MACRO 128 #define Types NASTY_MACRO 129 #define U NASTY_MACRO 130 #define Up NASTY_MACRO 131 #define Us NASTY_MACRO 132 #define V NASTY_MACRO 133 #define Vp NASTY_MACRO 134 #define Vs NASTY_MACRO 135 #define X NASTY_MACRO 136 #define Xp NASTY_MACRO 137 #define Xs NASTY_MACRO 138 139 // The classic Windows min/max macros 140 #define min NASTY_MACRO 141 #define max NASTY_MACRO 142 143 /* 144 BEGIN-SCRIPT 145 146 for header in public_headers: 147 print("{}#{}include <{}>{}".format( 148 '#if ' + header_restrictions[header] + '\n' if header in header_restrictions else '', 149 3 * ' ' if header in header_restrictions else '', 150 header, 151 '\n#endif' if header in header_restrictions else '' 152 )) 153 154 END-SCRIPT 155 */ 156 157 // DO NOT MANUALLY EDIT ANYTHING BETWEEN THE MARKERS BELOW 158 // GENERATED-MARKER 159 #include <algorithm> 160 #include <any> 161 #include <array> 162 #include <atomic> 163 #if !defined(_LIBCPP_HAS_NO_THREADS) 164 # include <barrier> 165 #endif 166 #include <bit> 167 #include <bitset> 168 #include <cassert> 169 #include <ccomplex> 170 #include <cctype> 171 #include <cerrno> 172 #include <cfenv> 173 #include <cfloat> 174 #include <charconv> 175 #include <chrono> 176 #include <cinttypes> 177 #include <ciso646> 178 #include <climits> 179 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 180 # include <clocale> 181 #endif 182 #include <cmath> 183 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 184 # include <codecvt> 185 #endif 186 #include <compare> 187 #include <complex> 188 #include <complex.h> 189 #include <concepts> 190 #include <condition_variable> 191 #include <coroutine> 192 #include <csetjmp> 193 #include <csignal> 194 #include <cstdarg> 195 #include <cstdbool> 196 #include <cstddef> 197 #include <cstdint> 198 #include <cstdio> 199 #include <cstdlib> 200 #include <cstring> 201 #include <ctgmath> 202 #include <ctime> 203 #include <ctype.h> 204 #include <cuchar> 205 #if !defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS) 206 # include <cwchar> 207 #endif 208 #if !defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS) 209 # include <cwctype> 210 #endif 211 #include <deque> 212 #include <errno.h> 213 #include <exception> 214 #include <execution> 215 #include <fenv.h> 216 #if !defined(_LIBCPP_HAS_NO_FILESYSTEM_LIBRARY) 217 # include <filesystem> 218 #endif 219 #include <float.h> 220 #include <format> 221 #include <forward_list> 222 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 223 # include <fstream> 224 #endif 225 #include <functional> 226 #if !defined(_LIBCPP_HAS_NO_THREADS) 227 # include <future> 228 #endif 229 #include <initializer_list> 230 #include <inttypes.h> 231 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 232 # include <iomanip> 233 #endif 234 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 235 # include <ios> 236 #endif 237 #include <iosfwd> 238 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 239 # include <iostream> 240 #endif 241 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 242 # include <istream> 243 #endif 244 #include <iterator> 245 #if !defined(_LIBCPP_HAS_NO_THREADS) 246 # include <latch> 247 #endif 248 #include <limits> 249 #include <limits.h> 250 #include <list> 251 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 252 # include <locale> 253 #endif 254 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 255 # include <locale.h> 256 #endif 257 #include <map> 258 #include <math.h> 259 #include <memory> 260 #if !defined(_LIBCPP_HAS_NO_THREADS) 261 # include <mutex> 262 #endif 263 #include <new> 264 #include <numbers> 265 #include <numeric> 266 #include <optional> 267 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 268 # include <ostream> 269 #endif 270 #include <queue> 271 #include <random> 272 #include <ranges> 273 #include <ratio> 274 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 275 # include <regex> 276 #endif 277 #include <scoped_allocator> 278 #if !defined(_LIBCPP_HAS_NO_THREADS) 279 # include <semaphore> 280 #endif 281 #include <set> 282 #include <setjmp.h> 283 #if !defined(_LIBCPP_HAS_NO_THREADS) 284 # include <shared_mutex> 285 #endif 286 #include <span> 287 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 288 # include <sstream> 289 #endif 290 #include <stack> 291 #if __cplusplus > 202002L && !defined(_LIBCPP_HAS_NO_THREADS) 292 # include <stdatomic.h> 293 #endif 294 #include <stdbool.h> 295 #include <stddef.h> 296 #include <stdexcept> 297 #include <stdint.h> 298 #include <stdio.h> 299 #include <stdlib.h> 300 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 301 # include <streambuf> 302 #endif 303 #include <string> 304 #include <string.h> 305 #include <string_view> 306 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) 307 # include <strstream> 308 #endif 309 #include <system_error> 310 #include <tgmath.h> 311 #if !defined(_LIBCPP_HAS_NO_THREADS) 312 # include <thread> 313 #endif 314 #include <tuple> 315 #include <type_traits> 316 #include <typeindex> 317 #include <typeinfo> 318 #include <uchar.h> 319 #include <unordered_map> 320 #include <unordered_set> 321 #include <utility> 322 #include <valarray> 323 #include <variant> 324 #include <vector> 325 #include <version> 326 #if !defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS) 327 # include <wchar.h> 328 #endif 329 #if !defined(_LIBCPP_HAS_NO_WIDE_CHARACTERS) 330 # include <wctype.h> 331 #endif 332 #if __cplusplus >= 201103L 333 # include <experimental/algorithm> 334 #endif 335 #if __cplusplus >= 201103L && !defined(_LIBCPP_HAS_NO_EXPERIMENTAL_COROUTINES) 336 # include <experimental/coroutine> 337 #endif 338 #if __cplusplus >= 201103L 339 # include <experimental/deque> 340 #endif 341 #if __cplusplus >= 201103L 342 # include <experimental/forward_list> 343 #endif 344 #if __cplusplus >= 201103L 345 # include <experimental/functional> 346 #endif 347 #if __cplusplus >= 201103L 348 # include <experimental/iterator> 349 #endif 350 #if __cplusplus >= 201103L 351 # include <experimental/list> 352 #endif 353 #if __cplusplus >= 201103L 354 # include <experimental/map> 355 #endif 356 #if __cplusplus >= 201103L 357 # include <experimental/memory_resource> 358 #endif 359 #if __cplusplus >= 201103L 360 # include <experimental/propagate_const> 361 #endif 362 #if !defined(_LIBCPP_HAS_NO_LOCALIZATION) && __cplusplus >= 201103L 363 # include <experimental/regex> 364 #endif 365 #if __cplusplus >= 201103L 366 # include <experimental/set> 367 #endif 368 #if __cplusplus >= 201103L 369 # include <experimental/simd> 370 #endif 371 #if __cplusplus >= 201103L 372 # include <experimental/string> 373 #endif 374 #if __cplusplus >= 201103L 375 # include <experimental/type_traits> 376 #endif 377 #if __cplusplus >= 201103L 378 # include <experimental/unordered_map> 379 #endif 380 #if __cplusplus >= 201103L 381 # include <experimental/unordered_set> 382 #endif 383 #if __cplusplus >= 201103L 384 # include <experimental/utility> 385 #endif 386 #if __cplusplus >= 201103L 387 # include <experimental/vector> 388 #endif 389 #include <ext/hash_map> 390 #include <ext/hash_set> 391 // GENERATED-MARKER 392