[compiler-rt] [scudo] Refactor allocator config to support optional flags (PR #81805)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 28 15:25:59 PST 2024
================
@@ -0,0 +1,129 @@
+//===-- allocator_config_wrapper.h ------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SCUDO_ALLOCATOR_CONFIG_WRAPPER_H_
+#define SCUDO_ALLOCATOR_CONFIG_WRAPPER_H_
+
+#include "condition_variable.h"
+#include "internal_defs.h"
+#include "secondary.h"
+
+namespace {
+
+template <typename T> struct removeConst {
+ using type = T;
+};
+template <typename T> struct removeConst<const T> {
+ using type = T;
+};
+
+} // namespace
+
+namespace scudo {
+
+#define OPTIONAL_TEMPLATE(TYPE, NAME, DEFAULT, MEMBER) \
+ template <typename Config, typename = TYPE> struct NAME##State { \
+ static constexpr removeConst<TYPE>::type getValue() { return DEFAULT; } \
+ }; \
+ template <typename Config> \
+ struct NAME##State<Config, decltype(Config::MEMBER)> { \
+ static constexpr removeConst<TYPE>::type getValue() { \
+ return Config::MEMBER; \
+ } \
+ };
+
+#define OPTIONAL_TYPE_TEMPLATE(NAME, DEFAULT, MEMBER) \
+ template <typename Config, typename Void = Config> struct NAME##Type { \
+ static constexpr bool enabled() { return false; } \
+ using NAME = DEFAULT; \
+ }; \
+ template <typename Config> \
+ struct NAME##Type<Config, typename Config::MEMBER> { \
+ static constexpr bool enabled() { return true; } \
+ using NAME = typename Config::MEMBER; \
+ };
----------------
ChiaHungDuan wrote:
Fixed and tests added
https://github.com/llvm/llvm-project/pull/81805
More information about the llvm-commits
mailing list