Coverage Report

Created: 2023-03-01 07:18

/src/spirv-tools/source/diagnostic.h
Line
Count
Source
1
// Copyright (c) 2015-2016 The Khronos Group Inc.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#ifndef SOURCE_DIAGNOSTIC_H_
16
#define SOURCE_DIAGNOSTIC_H_
17
18
#include <sstream>
19
#include <string>
20
21
#include "spirv-tools/libspirv.hpp"
22
23
namespace spvtools {
24
25
// A DiagnosticStream remembers the current position of the input and an error
26
// code, and captures diagnostic messages via the left-shift operator.
27
// If the error code is not SPV_FAILED_MATCH, then captured messages are
28
// emitted during the destructor.
29
class DiagnosticStream {
30
 public:
31
  DiagnosticStream(spv_position_t position, const MessageConsumer& consumer,
32
                   const std::string& disassembled_instruction,
33
                   spv_result_t error)
34
      : position_(position),
35
        consumer_(consumer),
36
        disassembled_instruction_(disassembled_instruction),
37
444k
        error_(error) {}
38
39
  // Creates a DiagnosticStream from an expiring DiagnosticStream.
40
  // The new object takes the contents of the other, and prevents the
41
  // other from emitting anything during destruction.
42
  DiagnosticStream(DiagnosticStream&& other);
43
44
  // Destroys a DiagnosticStream.
45
  // If its status code is something other than SPV_FAILED_MATCH
46
  // then emit the accumulated message to the consumer.
47
  ~DiagnosticStream();
48
49
  // Adds the given value to the diagnostic message to be written.
50
  template <typename T>
51
777k
  DiagnosticStream& operator<<(const T& val) {
52
777k
    stream_ << val;
53
777k
    return *this;
54
777k
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [16]>(char const (&) [16])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [36]>(char const (&) [36])
Line
Count
Source
51
2.50k
  DiagnosticStream& operator<<(const T& val) {
52
2.50k
    stream_ << val;
53
2.50k
    return *this;
54
2.50k
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <unsigned long>(unsigned long const&)
Line
Count
Source
51
6
  DiagnosticStream& operator<<(const T& val) {
52
6
    stream_ << val;
53
6
    return *this;
54
6
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [19]>(char const (&) [19])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <unsigned int>(unsigned int const&)
Line
Count
Source
51
90
  DiagnosticStream& operator<<(const T& val) {
52
90
    stream_ << val;
53
90
    return *this;
54
90
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [30]>(char const (&) [30])
Line
Count
Source
51
118
  DiagnosticStream& operator<<(const T& val) {
52
118
    stream_ << val;
53
118
    return *this;
54
118
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <std::__1::ios_base& (std::__1::ios_base&)>(std::__1::ios_base& ( const&)(std::__1::ios_base&))
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [3]>(char const (&) [3])
Line
Count
Source
51
162k
  DiagnosticStream& operator<<(const T& val) {
52
162k
    stream_ << val;
53
162k
    return *this;
54
162k
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [47]>(char const (&) [47])
Line
Count
Source
51
212
  DiagnosticStream& operator<<(const T& val) {
52
212
    stream_ << val;
53
212
    return *this;
54
212
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [33]>(char const (&) [33])
Line
Count
Source
51
12
  DiagnosticStream& operator<<(const T& val) {
52
12
    stream_ << val;
53
12
    return *this;
54
12
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <unsigned short>(unsigned short const&)
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [17]>(char const (&) [17])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [23]>(char const (&) [23])
Line
Count
Source
51
30
  DiagnosticStream& operator<<(const T& val) {
52
30
    stream_ << val;
53
30
    return *this;
54
30
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char const*>(char const* const&)
Line
Count
Source
51
165k
  DiagnosticStream& operator<<(const T& val) {
52
165k
    stream_ << val;
53
165k
    return *this;
54
165k
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [35]>(char const (&) [35])
Line
Count
Source
51
42
  DiagnosticStream& operator<<(const T& val) {
52
42
    stream_ << val;
53
42
    return *this;
54
42
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [34]>(char const (&) [34])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [2]>(char const (&) [2])
Line
Count
Source
51
1.65k
  DiagnosticStream& operator<<(const T& val) {
52
1.65k
    stream_ << val;
53
1.65k
    return *this;
54
1.65k
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [20]>(char const (&) [20])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [22]>(char const (&) [22])
Line
Count
Source
51
624
  DiagnosticStream& operator<<(const T& val) {
52
624
    stream_ << val;
53
624
    return *this;
54
624
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [4]>(char const (&) [4])
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [27]>(char const (&) [27])
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [18]>(char const (&) [18])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [49]>(char const (&) [49])
Line
Count
Source
51
60
  DiagnosticStream& operator<<(const T& val) {
52
60
    stream_ << val;
53
60
    return *this;
54
60
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [6]>(char const (&) [6])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [38]>(char const (&) [38])
Line
Count
Source
51
1.26k
  DiagnosticStream& operator<<(const T& val) {
52
1.26k
    stream_ << val;
53
1.26k
    return *this;
54
1.26k
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [9]>(char const (&) [9])
Line
Count
Source
51
590
  DiagnosticStream& operator<<(const T& val) {
52
590
    stream_ << val;
53
590
    return *this;
54
590
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [40]>(char const (&) [40])
Line
Count
Source
51
34
  DiagnosticStream& operator<<(const T& val) {
52
34
    stream_ << val;
53
34
    return *this;
54
34
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [31]>(char const (&) [31])
Line
Count
Source
51
16
  DiagnosticStream& operator<<(const T& val) {
52
16
    stream_ << val;
53
16
    return *this;
54
16
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [13]>(char const (&) [13])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [24]>(char const (&) [24])
Line
Count
Source
51
18
  DiagnosticStream& operator<<(const T& val) {
52
18
    stream_ << val;
53
18
    return *this;
54
18
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [15]>(char const (&) [15])
Line
Count
Source
51
16
  DiagnosticStream& operator<<(const T& val) {
52
16
    stream_ << val;
53
16
    return *this;
54
16
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [25]>(char const (&) [25])
Line
Count
Source
51
160k
  DiagnosticStream& operator<<(const T& val) {
52
160k
    stream_ << val;
53
160k
    return *this;
54
160k
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [12]>(char const (&) [12])
Line
Count
Source
51
324
  DiagnosticStream& operator<<(const T& val) {
52
324
    stream_ << val;
53
324
    return *this;
54
324
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::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
51
206k
  DiagnosticStream& operator<<(const T& val) {
52
206k
    stream_ << val;
53
206k
    return *this;
54
206k
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [11]>(char const (&) [11])
Line
Count
Source
51
100
  DiagnosticStream& operator<<(const T& val) {
52
100
    stream_ << val;
53
100
    return *this;
54
100
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [29]>(char const (&) [29])
Line
Count
Source
51
1.73k
  DiagnosticStream& operator<<(const T& val) {
52
1.73k
    stream_ << val;
53
1.73k
    return *this;
54
1.73k
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [41]>(char const (&) [41])
Line
Count
Source
51
35
  DiagnosticStream& operator<<(const T& val) {
52
35
    stream_ << val;
53
35
    return *this;
54
35
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <spv_operand_type_t>(spv_operand_type_t const&)
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [39]>(char const (&) [39])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [32]>(char const (&) [32])
Line
Count
Source
51
22
  DiagnosticStream& operator<<(const T& val) {
52
22
    stream_ << val;
53
22
    return *this;
54
22
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [8]>(char const (&) [8])
Line
Count
Source
51
12
  DiagnosticStream& operator<<(const T& val) {
52
12
    stream_ << val;
53
12
    return *this;
54
12
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [14]>(char const (&) [14])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [77]>(char const (&) [77])
Line
Count
Source
51
348
  DiagnosticStream& operator<<(const T& val) {
52
348
    stream_ << val;
53
348
    return *this;
54
348
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [65]>(char const (&) [65])
Line
Count
Source
51
42
  DiagnosticStream& operator<<(const T& val) {
52
42
    stream_ << val;
53
42
    return *this;
54
42
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [54]>(char const (&) [54])
Line
Count
Source
51
14
  DiagnosticStream& operator<<(const T& val) {
52
14
    stream_ << val;
53
14
    return *this;
54
14
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [26]>(char const (&) [26])
Line
Count
Source
51
6
  DiagnosticStream& operator<<(const T& val) {
52
6
    stream_ << val;
53
6
    return *this;
54
6
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <int>(int const&)
Line
Count
Source
51
18
  DiagnosticStream& operator<<(const T& val) {
52
18
    stream_ << val;
53
18
    return *this;
54
18
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [55]>(char const (&) [55])
Line
Count
Source
51
16
  DiagnosticStream& operator<<(const T& val) {
52
16
    stream_ << val;
53
16
    return *this;
54
16
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [10]>(char const (&) [10])
Line
Count
Source
51
76
  DiagnosticStream& operator<<(const T& val) {
52
76
    stream_ << val;
53
76
    return *this;
54
76
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [104]>(char const (&) [104])
Line
Count
Source
51
344
  DiagnosticStream& operator<<(const T& val) {
52
344
    stream_ << val;
53
344
    return *this;
54
344
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [48]>(char const (&) [48])
Line
Count
Source
51
550
  DiagnosticStream& operator<<(const T& val) {
52
550
    stream_ << val;
53
550
    return *this;
54
550
  }
Unexecuted instantiation: spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [51]>(char const (&) [51])
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [7]>(char const (&) [7])
Line
Count
Source
51
56
  DiagnosticStream& operator<<(const T& val) {
52
56
    stream_ << val;
53
56
    return *this;
54
56
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [42]>(char const (&) [42])
Line
Count
Source
51
56
  DiagnosticStream& operator<<(const T& val) {
52
56
    stream_ << val;
53
56
    return *this;
54
56
  }
spvtools::DiagnosticStream& spvtools::DiagnosticStream::operator<< <char [37]>(char const (&) [37])
Line
Count
Source
51
70.8k
  DiagnosticStream& operator<<(const T& val) {
52
70.8k
    stream_ << val;
53
70.8k
    return *this;
54
70.8k
  }
55
56
  // Conversion operator to spv_result, returning the error code.
57
444k
  operator spv_result_t() { return error_; }
58
59
 private:
60
  std::ostringstream stream_;
61
  spv_position_t position_;
62
  MessageConsumer consumer_;  // Message consumer callback.
63
  std::string disassembled_instruction_;
64
  spv_result_t error_;
65
};
66
67
// Changes the MessageConsumer in |context| to one that updates |diagnostic|
68
// with the last message received.
69
//
70
// This function expects that |diagnostic| is not nullptr and its content is a
71
// nullptr.
72
void UseDiagnosticAsMessageConsumer(spv_context context,
73
                                    spv_diagnostic* diagnostic);
74
75
std::string spvResultToString(spv_result_t res);
76
77
}  // namespace spvtools
78
79
#endif  // SOURCE_DIAGNOSTIC_H_