Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- DerivedUser.h - Base for non-IR Users --------------------*- 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
#ifndef LLVM_IR_DERIVEDUSER_H
10
#define LLVM_IR_DERIVEDUSER_H
11
 
12
#include "llvm/IR/User.h"
13
 
14
namespace llvm {
15
 
16
class Type;
17
class Use;
18
 
19
/// Extension point for the Value hierarchy. All classes outside of lib/IR
20
/// that wish to inherit from User should instead inherit from DerivedUser
21
/// instead. Inheriting from this class is discouraged.
22
///
23
/// Generally speaking, Value is the base of a closed class hierarchy
24
/// that can't be extended by code outside of lib/IR. This class creates a
25
/// loophole that allows classes outside of lib/IR to extend User to leverage
26
/// its use/def list machinery.
27
class DerivedUser : public User {
28
protected:
29
  using  DeleteValueTy = void (*)(DerivedUser *);
30
 
31
private:
32
  friend class Value;
33
 
34
  DeleteValueTy DeleteValue;
35
 
36
public:
37
  DerivedUser(Type *Ty, unsigned VK, Use *U, unsigned NumOps,
38
              DeleteValueTy DeleteValue)
39
      : User(Ty, VK, U, NumOps), DeleteValue(DeleteValue) {}
40
};
41
 
42
} // end namespace llvm
43
 
44
#endif // LLVM_IR_DERIVEDUSER_H