| //===--- Compiler.h - Compiler specific definitions -------------*- C++ -*-===// |
| // |
| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See https://swift.org/LICENSE.txt for license information |
| // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef SWIFT_BASIC_COMPILER_H |
| #define SWIFT_BASIC_COMPILER_H |
| |
| #if defined(_MSC_VER) && !defined(__clang__) |
| #define SWIFT_COMPILER_IS_MSVC 1 |
| #else |
| #define SWIFT_COMPILER_IS_MSVC 0 |
| #endif |
| |
| // Workaround non-clang compilers |
| #ifndef __has_builtin |
| #define __has_builtin(x) 0 |
| #endif |
| #ifndef __has_attribute |
| #define __has_attribute(x) 0 |
| #endif |
| |
| #if SWIFT_COMPILER_IS_MSVC && _MSC_VER < 1910 |
| // Work around MSVC bug: attempting to reference a deleted function |
| // https://connect.microsoft.com/VisualStudio/feedback/details/3116505 |
| #define SWIFT_DELETE_OPERATOR_DELETED \ |
| { llvm_unreachable("Delete operator should not be called."); } |
| #else |
| #define SWIFT_DELETE_OPERATOR_DELETED = delete; |
| #endif |
| |
| // __builtin_assume() is an optimization hint. |
| #if __has_builtin(__builtin_assume) |
| #define SWIFT_ASSUME(x) __builtin_assume(x) |
| #else |
| #define SWIFT_ASSUME(x) |
| #endif |
| |
| #if __has_attribute(constructor) |
| #define SWIFT_CONSTRUCTOR __attribute__((constructor)) |
| #else |
| #define SWIFT_CONSTRUCTOR |
| #endif |
| |
| #endif // SWIFT_BASIC_COMPILER_H |