Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/include/llvm/IR/DerivedUser.h
Line
Count
Source
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
10.5M
      : User(Ty, VK, U, NumOps), DeleteValue(DeleteValue) {}
40
};
41
42
} // end namespace llvm
43
44
#endif // LLVM_IR_DERIVEDUSER_H