10b57cec5SDimitry Andric //===--- AlignedAllocation.h - Aligned Allocation ---------------*- C++ -*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric /// 90b57cec5SDimitry Andric /// \file 100b57cec5SDimitry Andric /// Defines a function that returns the minimum OS versions supporting 110b57cec5SDimitry Andric /// C++17's aligned allocation functions. 120b57cec5SDimitry Andric /// 130b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 140b57cec5SDimitry Andric 1504eeddc0SDimitry Andric #ifndef LLVM_CLANG_BASIC_ALIGNEDALLOCATION_H 1604eeddc0SDimitry Andric #define LLVM_CLANG_BASIC_ALIGNEDALLOCATION_H 170b57cec5SDimitry Andric 180b57cec5SDimitry Andric #include "llvm/Support/ErrorHandling.h" 190b57cec5SDimitry Andric #include "llvm/Support/VersionTuple.h" 2006c3fb27SDimitry Andric #include "llvm/TargetParser/Triple.h" 210b57cec5SDimitry Andric 220b57cec5SDimitry Andric namespace clang { 230b57cec5SDimitry Andric alignedAllocMinVersion(llvm::Triple::OSType OS)240b57cec5SDimitry Andricinline llvm::VersionTuple alignedAllocMinVersion(llvm::Triple::OSType OS) { 250b57cec5SDimitry Andric switch (OS) { 260b57cec5SDimitry Andric default: 270b57cec5SDimitry Andric break; 280b57cec5SDimitry Andric case llvm::Triple::Darwin: 29753f127fSDimitry Andric case llvm::Triple::MacOSX: // Earliest supporting version is 10.13. 30753f127fSDimitry Andric return llvm::VersionTuple(10U, 13U); 310b57cec5SDimitry Andric case llvm::Triple::IOS: 320b57cec5SDimitry Andric case llvm::Triple::TvOS: // Earliest supporting version is 11.0.0. 330b57cec5SDimitry Andric return llvm::VersionTuple(11U); 340b57cec5SDimitry Andric case llvm::Triple::WatchOS: // Earliest supporting version is 4.0.0. 350b57cec5SDimitry Andric return llvm::VersionTuple(4U); 36e8d8bef9SDimitry Andric case llvm::Triple::ZOS: 37e8d8bef9SDimitry Andric return llvm::VersionTuple(); // All z/OS versions have no support. 380b57cec5SDimitry Andric } 390b57cec5SDimitry Andric 400b57cec5SDimitry Andric llvm_unreachable("Unexpected OS"); 410b57cec5SDimitry Andric } 420b57cec5SDimitry Andric 430b57cec5SDimitry Andric } // end namespace clang 440b57cec5SDimitry Andric 4504eeddc0SDimitry Andric #endif // LLVM_CLANG_BASIC_ALIGNEDALLOCATION_H 46