Coverage Report

Created: 2021-08-24 07:12

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/AST/OptionalDiagnostic.h
Line
Count
Source
1
//===- OptionalDiagnostic.h - An optional diagnostic ------------*- 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
/// \file
10
/// Implements a partial diagnostic which may not be emitted.
11
//
12
//===----------------------------------------------------------------------===//
13
14
#ifndef LLVM_CLANG_AST_OPTIONALDIAGNOSTIC_H
15
#define LLVM_CLANG_AST_OPTIONALDIAGNOSTIC_H
16
17
#include "clang/AST/APValue.h"
18
#include "clang/Basic/PartialDiagnostic.h"
19
#include "llvm/ADT/APFloat.h"
20
#include "llvm/ADT/APSInt.h"
21
#include "llvm/ADT/SmallVector.h"
22
#include "llvm/ADT/StringRef.h"
23
24
namespace clang {
25
26
/// A partial diagnostic which we might know in advance that we are not going
27
/// to emit.
28
class OptionalDiagnostic {
29
  PartialDiagnostic *Diag;
30
31
public:
32
10.7M
  explicit OptionalDiagnostic(PartialDiagnostic *Diag = nullptr) : Diag(Diag) {}
33
34
5.13M
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
5.13M
    if (Diag)
36
952k
      *Diag << v;
37
5.13M
    return *this;
38
5.13M
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::AccessKinds>(clang::AccessKinds const&)
Line
Count
Source
34
4.50k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
4.50k
    if (Diag)
36
1.88k
      *Diag << v;
37
4.50k
    return *this;
38
4.50k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<bool>(bool const&)
Line
Count
Source
34
354k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
354k
    if (Diag)
36
178k
      *Diag << v;
37
354k
    return *this;
38
354k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::QualType>(clang::QualType const&)
Line
Count
Source
34
419k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
419k
    if (Diag)
36
49.0k
      *Diag << v;
37
419k
    return *this;
38
419k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::VarDecl const*>(clang::VarDecl const* const&)
Line
Count
Source
34
4.19M
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
4.19M
    if (Diag)
36
651k
      *Diag << v;
37
4.19M
    return *this;
38
4.19M
  }
Unexecuted instantiation: clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<char [31]>(char const (&) [31])
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
34
1.77k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
1.77k
    if (Diag)
36
1.10k
      *Diag << v;
37
1.77k
    return *this;
38
1.77k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<int>(int const&)
Line
Count
Source
34
46.8k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
46.8k
    if (Diag)
36
5.49k
      *Diag << v;
37
46.8k
    return *this;
38
46.8k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::NamedDecl const*>(clang::NamedDecl const* const&)
Line
Count
Source
34
24
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
24
    if (Diag)
36
21
      *Diag << v;
37
24
    return *this;
38
24
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::FieldDecl*>(clang::FieldDecl* const&)
Line
Count
Source
34
13
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
13
    if (Diag)
36
13
      *Diag << v;
37
13
    return *this;
38
13
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::FieldDecl const*>(clang::FieldDecl const* const&)
Line
Count
Source
34
689
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
689
    if (Diag)
36
498
      *Diag << v;
37
689
    return *this;
38
689
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::CheckSubobjectKind>(clang::CheckSubobjectKind const&)
Line
Count
Source
34
626
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
626
    if (Diag)
36
182
      *Diag << v;
37
626
    return *this;
38
626
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<unsigned int>(unsigned int const&)
Line
Count
Source
34
450
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
450
    if (Diag)
36
211
      *Diag << v;
37
450
    return *this;
38
450
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::CXXRecordDecl const*>(clang::CXXRecordDecl const* const&)
Line
Count
Source
34
10
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
10
    if (Diag)
36
10
      *Diag << v;
37
10
    return *this;
38
10
  }
ExprConstant.cpp:clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<(anonymous namespace)::DynAlloc::Kind>((anonymous namespace)::DynAlloc::Kind const&)
Line
Count
Source
34
38
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
38
    if (Diag)
36
34
      *Diag << v;
37
38
    return *this;
38
38
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::CXXMethodDecl const*>(clang::CXXMethodDecl const* const&)
Line
Count
Source
34
11
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
11
    if (Diag)
36
8
      *Diag << v;
37
11
    return *this;
38
11
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::CXXRecordDecl*>(clang::CXXRecordDecl* const&)
Line
Count
Source
34
17
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
17
    if (Diag)
36
17
      *Diag << v;
37
17
    return *this;
38
17
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::FunctionDecl const*>(clang::FunctionDecl const* const&)
Line
Count
Source
34
62.9k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
62.9k
    if (Diag)
36
31.8k
      *Diag << v;
37
62.9k
    return *this;
38
62.9k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::RecordDecl const*>(clang::RecordDecl const* const&)
Line
Count
Source
34
8
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
8
    if (Diag)
36
8
      *Diag << v;
37
8
    return *this;
38
8
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::AccessSpecifier>(clang::AccessSpecifier const&)
Line
Count
Source
34
8
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
8
    if (Diag)
36
8
      *Diag << v;
37
8
    return *this;
38
8
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::FunctionDecl*>(clang::FunctionDecl* const&)
Line
Count
Source
34
213
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
213
    if (Diag)
36
10
      *Diag << v;
37
213
    return *this;
38
213
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::SourceRange>(clang::SourceRange const&)
Line
Count
Source
34
40
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
40
    if (Diag)
36
32
      *Diag << v;
37
40
    return *this;
38
40
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::CXXConstructorDecl const*>(clang::CXXConstructorDecl const* const&)
Line
Count
Source
34
15.2k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
15.2k
    if (Diag)
36
1.28k
      *Diag << v;
37
15.2k
    return *this;
38
15.2k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<llvm::StringRef>(llvm::StringRef const&)
Line
Count
Source
34
41
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
41
    if (Diag)
36
41
      *Diag << v;
37
41
    return *this;
38
41
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::ValueDecl const*>(clang::ValueDecl const* const&)
Line
Count
Source
34
34.3k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
34.3k
    if (Diag)
36
29.8k
      *Diag << v;
37
34.3k
    return *this;
38
34.3k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::FixItHint>(clang::FixItHint const&)
Line
Count
Source
34
42
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
42
    if (Diag)
36
40
      *Diag << v;
37
42
    return *this;
38
42
  }
39
40
1.10k
  OptionalDiagnostic &operator<<(const llvm::APSInt &I) {
41
1.10k
    if (Diag) {
42
285
      SmallVector<char, 32> Buffer;
43
285
      I.toString(Buffer);
44
285
      *Diag << StringRef(Buffer.data(), Buffer.size());
45
285
    }
46
1.10k
    return *this;
47
1.10k
  }
48
49
28
  OptionalDiagnostic &operator<<(const llvm::APFloat &F) {
50
28
    if (Diag) {
51
      // FIXME: Force the precision of the source value down so we don't
52
      // print digits which are usually useless (we don't really care here if
53
      // we truncate a digit by accident in edge cases).  Ideally,
54
      // APFloat::toString would automatically print the shortest
55
      // representation which rounds to the correct value, but it's a bit
56
      // tricky to implement. Could use std::to_chars.
57
17
      unsigned precision = llvm::APFloat::semanticsPrecision(F.getSemantics());
58
17
      precision = (precision * 59 + 195) / 196;
59
17
      SmallVector<char, 32> Buffer;
60
17
      F.toString(Buffer, precision);
61
17
      *Diag << StringRef(Buffer.data(), Buffer.size());
62
17
    }
63
28
    return *this;
64
28
  }
65
66
58
  OptionalDiagnostic &operator<<(const llvm::APFixedPoint &FX) {
67
58
    if (Diag) {
68
8
      SmallVector<char, 32> Buffer;
69
8
      FX.toString(Buffer);
70
8
      *Diag << StringRef(Buffer.data(), Buffer.size());
71
8
    }
72
58
    return *this;
73
58
  }
74
};
75
76
} // namespace clang
77
78
#endif