v8 12.4.254 (node 22.4.1)
V8 is Google's open source JavaScript engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
macros.h
Go to the documentation of this file.
1// Copyright 2020 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef INCLUDE_CPPGC_MACROS_H_
6#define INCLUDE_CPPGC_MACROS_H_
7
8#include <cstddef>
9
11
12namespace cppgc {
13
14// Use CPPGC_STACK_ALLOCATED if the object is only stack allocated.
15// Add the CPPGC_STACK_ALLOCATED_IGNORE annotation on a case-by-case basis when
16// enforcement of CPPGC_STACK_ALLOCATED should be suppressed.
17#if defined(__clang__)
18#define CPPGC_STACK_ALLOCATED() \
19 public: \
20 using IsStackAllocatedTypeMarker CPPGC_UNUSED = int; \
21 \
22 private: \
23 void* operator new(size_t) = delete; \
24 void* operator new(size_t, void*) = delete; \
25 static_assert(true, "Force semicolon.")
26#define CPPGC_STACK_ALLOCATED_IGNORE(bug_or_reason) \
27 __attribute__((annotate("stack_allocated_ignore")))
28#else // !defined(__clang__)
29#define CPPGC_STACK_ALLOCATED() static_assert(true, "Force semicolon.")
30#define CPPGC_STACK_ALLOCATED_IGNORE(bug_or_reason)
31#endif // !defined(__clang__)
32
33} // namespace cppgc
34
35#endif // INCLUDE_CPPGC_MACROS_H_