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-2024 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
26/* A bundle of additional metadata that can be associated with a
27 diagnostic.
28
29 This supports an optional CWE identifier, and zero or more
30 "rules". */
31
33{
34 public:
35 /* Abstract base class for referencing a rule that has been violated,
36 such as within a coding standard, or within a specification. */
37 class rule
38 {
39 public:
40 virtual char *make_description () const = 0;
41 virtual char *make_url () const = 0;
42 };
43
44 /* Concrete subclass. */
45 class precanned_rule : public rule
46 {
47 public:
48 precanned_rule (const char *desc, const char *url)
49 : m_desc (desc), m_url (url)
50 {}
51
52 char *make_description () const final override
53 {
54 return m_desc ? xstrdup (m_desc) : NULL;
55 }
56
57 char *make_url () const final override
58 {
59 return m_url ? xstrdup (m_url) : NULL;
60 }
61
62 private:
63 const char *m_desc;
64 const char *m_url;
65 };
66
69
70 /* Hook for SARIF output to allow for adding diagnostic-specific
71 properties to the result object's property bag. */
72 virtual void
74 {
75 }
76
77 void add_cwe (int cwe) { m_cwe = cwe; }
78 int get_cwe () const { return m_cwe; }
79
80 /* Associate R with the diagnostic. R must outlive
81 the metadata. */
82 void add_rule (const rule &r)
83 {
84 m_rules.safe_push (&r);
85 }
86
87 unsigned get_num_rules () const { return m_rules.length (); }
88 const rule &get_rule (unsigned idx) const { return *(m_rules[idx]); }
89
90 private:
91 int m_cwe;
93};
94
95#endif /* ! GCC_DIAGNOSTIC_METADATA_H */
Definition vec.h:1656
Definition diagnostic-metadata.h:46
char * make_url() const final override
Definition diagnostic-metadata.h:57
const char * m_desc
Definition diagnostic-metadata.h:63
const char * m_url
Definition diagnostic-metadata.h:64
precanned_rule(const char *desc, const char *url)
Definition diagnostic-metadata.h:48
char * make_description() const final override
Definition diagnostic-metadata.h:52
Definition diagnostic-metadata.h:38
virtual char * make_description() const =0
virtual char * make_url() const =0
Definition diagnostic-metadata.h:33
virtual void maybe_add_sarif_properties(sarif_object &) const
Definition diagnostic-metadata.h:73
void add_rule(const rule &r)
Definition diagnostic-metadata.h:82
diagnostic_metadata()
Definition diagnostic-metadata.h:67
virtual ~diagnostic_metadata()
Definition diagnostic-metadata.h:68
int get_cwe() const
Definition diagnostic-metadata.h:78
unsigned get_num_rules() const
Definition diagnostic-metadata.h:87
int m_cwe
Definition diagnostic-metadata.h:91
auto_vec< const rule * > m_rules
Definition diagnostic-metadata.h:92
const rule & get_rule(unsigned idx) const
Definition diagnostic-metadata.h:88
void add_cwe(int cwe)
Definition diagnostic-metadata.h:77
Definition diagnostic-format-sarif.h:42
void final(rtx_insn *first, FILE *file, int optimize_p)
Definition final.cc:2002
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
poly_int< N, C > r
Definition poly-int.h:770
#define NULL
Definition system.h:50