10e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/*===------- llvm/Config/abi-breaking.h - llvm configuration -------*- C -*-===*/ 20e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* */ 30e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* The LLVM Compiler Infrastructure */ 40e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* */ 50e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* This file is distributed under the University of Illinois Open Source */ 60e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* License. See LICENSE.TXT for details. */ 70e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* */ 80e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/*===----------------------------------------------------------------------===*/ 90e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 100e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* This file controls the C++ ABI break introduced in LLVM public header. */ 110e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 120e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#ifndef LLVM_ABI_BREAKING_CHECKS_H 130e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define LLVM_ABI_BREAKING_CHECKS_H 140e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 150e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* Define to enable checks that alter the LLVM C++ ABI */ 16cefd0f7f7b923ef131d6d64f9cad7d2add41c63aNicolas Capens#define LLVM_ENABLE_ABI_BREAKING_CHECKS 1 170e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 180e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens/* Define to disable the link-time checking of mismatch for 190e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens LLVM_ENABLE_ABI_BREAKING_CHECKS */ 20cefd0f7f7b923ef131d6d64f9cad7d2add41c63aNicolas Capens#define LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING 1 210e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#if !LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING 220e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 230e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens// ABI_BREAKING_CHECKS protection: provides link-time failure when clients build 240e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens// mismatch with LLVM 250e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#if defined(_MSC_VER) 260e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens// Use pragma with MSVC 270e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define LLVM_XSTR(s) LLVM_STR(s) 280e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#define LLVM_STR(s) #s 290e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#pragma detect_mismatch("LLVM_ENABLE_ABI_BREAKING_CHECKS", LLVM_XSTR(LLVM_ENABLE_ABI_BREAKING_CHECKS)) 300e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#undef LLVM_XSTR 310e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#undef LLVM_STR 320e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#elif defined(_WIN32) || defined(__CYGWIN__) // Win32 w/o #pragma detect_mismatch 330e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens// FIXME: Implement checks without weak. 340e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#elif defined(__cplusplus) 350e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capensnamespace llvm { 360e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#if LLVM_ENABLE_ABI_BREAKING_CHECKS 370e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capensextern int EnableABIBreakingChecks; 380e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens__attribute__((weak, visibility ("hidden"))) int *VerifyEnableABIBreakingChecks = &EnableABIBreakingChecks; 390e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#else 400e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capensextern int DisableABIBreakingChecks; 410e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens__attribute__((weak, visibility ("hidden"))) int *VerifyDisableABIBreakingChecks = &DisableABIBreakingChecks; 420e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 430e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens} 440e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif // _MSC_VER 450e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 460e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif // LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING 470e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens 480e0f146bac6a500532f94b4ac8de31057e07ebd1Nicolas Capens#endif 49