clang  15.0.0git
MangleNumberingContext.h
Go to the documentation of this file.
1 //=== MangleNumberingContext.h - Context for mangling numbers ---*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines the LambdaBlockMangleContext interface, which keeps track
10 // of the Itanium C++ ABI mangling numbers for lambda expressions and block
11 // literals.
12 //
13 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_CLANG_AST_MANGLENUMBERINGCONTEXT_H
15 #define LLVM_CLANG_AST_MANGLENUMBERINGCONTEXT_H
16 
17 #include "clang/Basic/LLVM.h"
18 #include "llvm/ADT/IntrusiveRefCntPtr.h"
19 
20 namespace clang {
21 
22 class BlockDecl;
23 class CXXMethodDecl;
24 class TagDecl;
25 class VarDecl;
26 
27 /// Keeps track of the mangled names of lambda expressions and block
28 /// literals within a particular context.
30 public:
32 
33  /// Retrieve the mangling number of a new lambda expression with the
34  /// given call operator within this context.
35  virtual unsigned getManglingNumber(const CXXMethodDecl *CallOperator) = 0;
36 
37  /// Retrieve the mangling number of a new block literal within this
38  /// context.
39  virtual unsigned getManglingNumber(const BlockDecl *BD) = 0;
40 
41  /// Static locals are numbered by source order.
42  virtual unsigned getStaticLocalNumber(const VarDecl *VD) = 0;
43 
44  /// Retrieve the mangling number of a static local variable within
45  /// this context.
46  virtual unsigned getManglingNumber(const VarDecl *VD,
47  unsigned MSLocalManglingNumber) = 0;
48 
49  /// Retrieve the mangling number of a static local variable within
50  /// this context.
51  virtual unsigned getManglingNumber(const TagDecl *TD,
52  unsigned MSLocalManglingNumber) = 0;
53 
54  /// Retrieve the mangling number of a new lambda expression with the
55  /// given call operator within the device context. No device number is
56  /// assigned if there's no device numbering context is associated.
57  virtual unsigned getDeviceManglingNumber(const CXXMethodDecl *) { return 0; }
58 };
59 
60 } // end namespace clang
61 #endif
clang::MangleNumberingContext::getManglingNumber
virtual unsigned getManglingNumber(const CXXMethodDecl *CallOperator)=0
Retrieve the mangling number of a new lambda expression with the given call operator within this cont...
clang::MangleNumberingContext::getDeviceManglingNumber
virtual unsigned getDeviceManglingNumber(const CXXMethodDecl *)
Retrieve the mangling number of a new lambda expression with the given call operator within the devic...
Definition: MangleNumberingContext.h:57
clang::BlockDecl
Represents a block literal declaration, which is like an unnamed FunctionDecl.
Definition: Decl.h:4208
clang::VarDecl
Represents a variable declaration or definition.
Definition: Decl.h:874
clang::TagDecl
Represents the declaration of a struct/union/class/enum.
Definition: Decl.h:3355
clang::MangleNumberingContext::~MangleNumberingContext
virtual ~MangleNumberingContext()
Definition: MangleNumberingContext.h:31
clang::MangleNumberingContext::getStaticLocalNumber
virtual unsigned getStaticLocalNumber(const VarDecl *VD)=0
Static locals are numbered by source order.
LLVM.h
clang::MangleNumberingContext
Keeps track of the mangled names of lambda expressions and block literals within a particular context...
Definition: MangleNumberingContext.h:29
clang
Definition: CalledOnceCheck.h:17
clang::CXXMethodDecl
Represents a static or instance method of a struct/union/class.
Definition: DeclCXX.h:1981