Coverage Report

Created: 2019-03-22 08:08

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/include/clang/AST/DeclAccessPair.h
Line
Count
Source (jump to first uncovered line)
1
//===--- DeclAccessPair.h - A decl bundled with its path access -*- 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 DeclAccessPair class, which provides an
10
//  efficient representation of a pair of a NamedDecl* and an
11
//  AccessSpecifier.  Generally the access specifier gives the
12
//  natural access of a declaration when named in a class, as
13
//  defined in C++ [class.access.base]p1.
14
//
15
//===----------------------------------------------------------------------===//
16
17
#ifndef LLVM_CLANG_AST_DECLACCESSPAIR_H
18
#define LLVM_CLANG_AST_DECLACCESSPAIR_H
19
20
#include "clang/Basic/Specifiers.h"
21
#include "llvm/Support/DataTypes.h"
22
23
namespace clang {
24
25
class NamedDecl;
26
27
/// A POD class for pairing a NamedDecl* with an access specifier.
28
/// Can be put into unions.
29
0
class DeclAccessPair {
Unexecuted instantiation: clang::DeclAccessPair::operator=(clang::DeclAccessPair const&)
Unexecuted instantiation: clang::DeclAccessPair::operator=(clang::DeclAccessPair&&)
30
  uintptr_t Ptr; // we'd use llvm::PointerUnion, but it isn't trivial
31
32
  enum { Mask = 0x3 };
33
34
public:
35
112M
  static DeclAccessPair make(NamedDecl *D, AccessSpecifier AS) {
36
112M
    DeclAccessPair p;
37
112M
    p.set(D, AS);
38
112M
    return p;
39
112M
  }
40
41
350M
  NamedDecl *getDecl() const {
42
350M
    return reinterpret_cast<NamedDecl*>(~Mask & Ptr);
43
350M
  }
44
12.2M
  AccessSpecifier getAccess() const {
45
12.2M
    return AccessSpecifier(Mask & Ptr);
46
12.2M
  }
47
48
45
  void setDecl(NamedDecl *D) {
49
45
    set(D, getAccess());
50
45
  }
51
48.1k
  void setAccess(AccessSpecifier AS) {
52
48.1k
    set(getDecl(), AS);
53
48.1k
  }
54
112M
  void set(NamedDecl *D, AccessSpecifier AS) {
55
112M
    Ptr = uintptr_t(AS) | reinterpret_cast<uintptr_t>(D);
56
112M
  }
57
58
27.0M
  operator NamedDecl*() const { return getDecl(); }
59
63.4M
  NamedDecl *operator->() const { return getDecl(); }
60
};
61
}
62
63
#endif