106f32e7eSjoerg/*===------- llvm/Config/abi-breaking.h - llvm configuration -------*- C -*-===*/ 206f32e7eSjoerg/* */ 306f32e7eSjoerg/* Part of the LLVM Project, under the Apache License v2.0 with LLVM */ 406f32e7eSjoerg/* Exceptions. */ 506f32e7eSjoerg/* See https://llvm.org/LICENSE.txt for license information. */ 606f32e7eSjoerg/* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */ 706f32e7eSjoerg/* */ 806f32e7eSjoerg/*===----------------------------------------------------------------------===*/ 906f32e7eSjoerg 1006f32e7eSjoerg/* This file controls the C++ ABI break introduced in LLVM public header. */ 1106f32e7eSjoerg 1206f32e7eSjoerg#ifndef LLVM_ABI_BREAKING_CHECKS_H 1306f32e7eSjoerg#define LLVM_ABI_BREAKING_CHECKS_H 1406f32e7eSjoerg 1506f32e7eSjoerg/* Define to enable checks that alter the LLVM C++ ABI */ 1606f32e7eSjoerg#cmakedefine01 LLVM_ENABLE_ABI_BREAKING_CHECKS 1706f32e7eSjoerg 1806f32e7eSjoerg/* Define to enable reverse iteration of unordered llvm containers */ 1906f32e7eSjoerg#cmakedefine01 LLVM_ENABLE_REVERSE_ITERATION 2006f32e7eSjoerg 2106f32e7eSjoerg/* Allow selectively disabling link-time mismatch checking so that header-only 2206f32e7eSjoerg ADT content from LLVM can be used without linking libSupport. */ 23*da58b97aSjoerg#if !defined(LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING) || !LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING 2406f32e7eSjoerg 2506f32e7eSjoerg// ABI_BREAKING_CHECKS protection: provides link-time failure when clients build 2606f32e7eSjoerg// mismatch with LLVM 2706f32e7eSjoerg#if defined(_MSC_VER) 2806f32e7eSjoerg// Use pragma with MSVC 2906f32e7eSjoerg#define LLVM_XSTR(s) LLVM_STR(s) 3006f32e7eSjoerg#define LLVM_STR(s) #s 3106f32e7eSjoerg#pragma detect_mismatch("LLVM_ENABLE_ABI_BREAKING_CHECKS", LLVM_XSTR(LLVM_ENABLE_ABI_BREAKING_CHECKS)) 3206f32e7eSjoerg#undef LLVM_XSTR 3306f32e7eSjoerg#undef LLVM_STR 3406f32e7eSjoerg#elif defined(_WIN32) || defined(__CYGWIN__) // Win32 w/o #pragma detect_mismatch 3506f32e7eSjoerg// FIXME: Implement checks without weak. 3606f32e7eSjoerg#elif defined(__cplusplus) 3706f32e7eSjoerg#if !(defined(_AIX) && defined(__GNUC__) && !defined(__clang__)) 3806f32e7eSjoerg#define LLVM_HIDDEN_VISIBILITY __attribute__ ((visibility("hidden"))) 3906f32e7eSjoerg#else 4006f32e7eSjoerg// GCC on AIX does not support visibility attributes. Symbols are not 4106f32e7eSjoerg// exported by default on AIX. 4206f32e7eSjoerg#define LLVM_HIDDEN_VISIBILITY 4306f32e7eSjoerg#endif 4406f32e7eSjoergnamespace llvm { 4506f32e7eSjoerg#if LLVM_ENABLE_ABI_BREAKING_CHECKS 4606f32e7eSjoergextern int EnableABIBreakingChecks; 4706f32e7eSjoergLLVM_HIDDEN_VISIBILITY 4806f32e7eSjoerg__attribute__((weak)) int *VerifyEnableABIBreakingChecks = 4906f32e7eSjoerg &EnableABIBreakingChecks; 5006f32e7eSjoerg#else 5106f32e7eSjoergextern int DisableABIBreakingChecks; 5206f32e7eSjoergLLVM_HIDDEN_VISIBILITY 5306f32e7eSjoerg__attribute__((weak)) int *VerifyDisableABIBreakingChecks = 5406f32e7eSjoerg &DisableABIBreakingChecks; 5506f32e7eSjoerg#endif 5606f32e7eSjoerg} 5706f32e7eSjoerg#undef LLVM_HIDDEN_VISIBILITY 5806f32e7eSjoerg#endif // _MSC_VER 5906f32e7eSjoerg 6006f32e7eSjoerg#endif // LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING 6106f32e7eSjoerg 6206f32e7eSjoerg#endif 63