GCC Middle and Back End API Reference
diagnostic-metadata.h
Go to the documentation of this file.
1/* Additional metadata for a diagnostic.
2 Copyright (C) 2019-2025 Free Software Foundation, Inc.
3 Contributed by David Malcolm <dmalcolm@redhat.com>
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 3, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
20
21#ifndef GCC_DIAGNOSTIC_METADATA_H
22#define GCC_DIAGNOSTIC_METADATA_H
23
24class sarif_object;
25
26namespace diagnostics {
27 namespace digraphs {
28 class lazy_digraphs;
29 } // namespace digraphs
30} // namespace diagnostics
31
32/* A bundle of additional metadata that can be associated with a
33 diagnostic.
34
35 This supports an optional CWE identifier, and zero or more
36 "rules".
37
38 Additionally, this provides a place to associate a diagnostic
39 with zero or more directed graphs. */
40
42{
43 public:
44 /* Abstract base class for referencing a rule that has been violated,
45 such as within a coding standard, or within a specification. */
46 class rule
47 {
48 public:
49 virtual char *make_description () const = 0;
50 virtual char *make_url () const = 0;
51 };
52
53 /* Concrete subclass. */
54 class precanned_rule : public rule
55 {
56 public:
57 precanned_rule (const char *desc, const char *url)
58 : m_desc (desc), m_url (url)
59 {}
60
61 char *make_description () const final override
62 {
63 return m_desc ? xstrdup (m_desc) : NULL;
64 }
65
66 char *make_url () const final override
67 {
68 return m_url ? xstrdup (m_url) : NULL;
69 }
70
71 private:
72 const char *m_desc;
73 const char *m_url;
74 };
75
78
79 /* Hook for SARIF output to allow for adding diagnostic-specific
80 properties to the result object's property bag. */
81 virtual void
83 {
84 }
85
86 void add_cwe (int cwe) { m_cwe = cwe; }
87 int get_cwe () const { return m_cwe; }
88
89 /* Associate R with the diagnostic. R must outlive
90 the metadata. */
91 void add_rule (const rule &r)
92 {
93 m_rules.safe_push (&r);
94 }
95
96 unsigned get_num_rules () const { return m_rules.length (); }
97 const rule &get_rule (unsigned idx) const { return *(m_rules[idx]); }
98
99 void
101 {
102 m_lazy_digraphs = lazy_digraphs;
103 }
104
107 {
108 return m_lazy_digraphs;
109 }
110
111 private:
112 int m_cwe;
114
115 /* An optional way to create directed graphs associated with the
116 diagnostic, for the sinks that support this (e.g. SARIF). */
118};
119
120#endif /* ! GCC_DIAGNOSTIC_METADATA_H */
Definition vec.h:1667
char * make_url() const final override
Definition diagnostic-metadata.h:66
const char * m_desc
Definition diagnostic-metadata.h:72
const char * m_url
Definition diagnostic-metadata.h:73
precanned_rule(const char *desc, const char *url)
Definition diagnostic-metadata.h:57
char * make_description() const final override
Definition diagnostic-metadata.h:61
Definition diagnostic-metadata.h:47
virtual char * make_description() const =0
virtual char * make_url() const =0
virtual void maybe_add_sarif_properties(sarif_object &) const
Definition diagnostic-metadata.h:82
const diagnostics::digraphs::lazy_digraphs * m_lazy_digraphs
Definition diagnostic-metadata.h:117
void set_lazy_digraphs(const diagnostics::digraphs::lazy_digraphs *lazy_digraphs)
Definition diagnostic-metadata.h:100
void add_rule(const rule &r)
Definition diagnostic-metadata.h:91
const diagnostics::digraphs::lazy_digraphs * get_lazy_digraphs() const
Definition diagnostic-metadata.h:106
diagnostic_metadata()
Definition diagnostic-metadata.h:76
virtual ~diagnostic_metadata()
Definition diagnostic-metadata.h:77
int get_cwe() const
Definition diagnostic-metadata.h:87
unsigned get_num_rules() const
Definition diagnostic-metadata.h:96
int m_cwe
Definition diagnostic-metadata.h:112
auto_vec< const rule * > m_rules
Definition diagnostic-metadata.h:113
const rule & get_rule(unsigned idx) const
Definition diagnostic-metadata.h:97
void add_cwe(int cwe)
Definition diagnostic-metadata.h:86
Definition diagnostic-digraphs.h:404
Definition diagnostic-format-sarif.h:146
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2008
Definition diagnostic-digraphs.h:36
Definition diagnostic-digraphs.h:35
poly_int< N, C > r
Definition poly-int.h:774
#define NULL
Definition system.h:50