Coverage Report

Created: 2021-01-23 06:44

/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
9.51M
  explicit OptionalDiagnostic(PartialDiagnostic *Diag = nullptr) : Diag(Diag) {}
33
34
4.55M
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
4.55M
    if (Diag)
36
878k
      *Diag << v;
37
4.55M
    return *this;
38
4.55M
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::AccessKinds>(clang::AccessKinds const&)
Line
Count
Source
34
4.12k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
4.12k
    if (Diag)
36
1.61k
      *Diag << v;
37
4.12k
    return *this;
38
4.12k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<bool>(bool const&)
Line
Count
Source
34
333k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
333k
    if (Diag)
36
168k
      *Diag << v;
37
333k
    return *this;
38
333k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::QualType>(clang::QualType const&)
Line
Count
Source
34
288k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
288k
    if (Diag)
36
37.3k
      *Diag << v;
37
288k
    return *this;
38
288k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::VarDecl const*>(clang::VarDecl const* const&)
Line
Count
Source
34
3.76M
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
3.76M
    if (Diag)
36
604k
      *Diag << v;
37
3.76M
    return *this;
38
3.76M
  }
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.74k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
1.74k
    if (Diag)
36
1.08k
      *Diag << v;
37
1.74k
    return *this;
38
1.74k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<int>(int const&)
Line
Count
Source
34
47.7k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
47.7k
    if (Diag)
36
5.20k
      *Diag << v;
37
47.7k
    return *this;
38
47.7k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::NamedDecl const*>(clang::NamedDecl const* const&)
Line
Count
Source
34
12
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
12
    if (Diag)
36
11
      *Diag << v;
37
12
    return *this;
38
12
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::FieldDecl*>(clang::FieldDecl* const&)
Line
Count
Source
34
5
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
5
    if (Diag)
36
5
      *Diag << v;
37
5
    return *this;
38
5
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::FieldDecl const*>(clang::FieldDecl const* const&)
Line
Count
Source
34
551
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
551
    if (Diag)
36
392
      *Diag << v;
37
551
    return *this;
38
551
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::CheckSubobjectKind>(clang::CheckSubobjectKind const&)
Line
Count
Source
34
607
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
607
    if (Diag)
36
166
      *Diag << v;
37
607
    return *this;
38
607
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<unsigned int>(unsigned int const&)
Line
Count
Source
34
357
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
357
    if (Diag)
36
150
      *Diag << v;
37
357
    return *this;
38
357
  }
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
5
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
5
    if (Diag)
36
4
      *Diag << v;
37
5
    return *this;
38
5
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::CXXRecordDecl*>(clang::CXXRecordDecl* 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::FunctionDecl const*>(clang::FunctionDecl const* const&)
Line
Count
Source
34
61.4k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
61.4k
    if (Diag)
36
31.2k
      *Diag << v;
37
61.4k
    return *this;
38
61.4k
  }
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
211
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
211
    if (Diag)
36
10
      *Diag << v;
37
211
    return *this;
38
211
  }
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.20k
      *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
32.1k
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
32.1k
    if (Diag)
36
27.7k
      *Diag << v;
37
32.1k
    return *this;
38
32.1k
  }
clang::OptionalDiagnostic& clang::OptionalDiagnostic::operator<<<clang::FixItHint>(clang::FixItHint const&)
Line
Count
Source
34
38
  template <typename T> OptionalDiagnostic &operator<<(const T &v) {
35
38
    if (Diag)
36
36
      *Diag << v;
37
38
    return *this;
38
38
  }
39
40
768
  OptionalDiagnostic &operator<<(const llvm::APSInt &I) {
41
768
    if (Diag) {
42
190
      SmallVector<char, 32> Buffer;
43
190
      I.toString(Buffer);
44
190
      *Diag << StringRef(Buffer.data(), Buffer.size());
45
190
    }
46
768
    return *this;
47
768
  }
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
43
  OptionalDiagnostic &operator<<(const llvm::APFixedPoint &FX) {
67
43
    if (Diag) {
68
8
      SmallVector<char, 32> Buffer;
69
8
      FX.toString(Buffer);
70
8
      *Diag << StringRef(Buffer.data(), Buffer.size());
71
8
    }
72
43
    return *this;
73
43
  }
74
};
75
76
} // namespace clang
77
78
#endif