1/* Classes for analyzer diagnostics. 2 Copyright (C) 2019-2020 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 8under the terms of the GNU General Public License as published by 9the Free Software Foundation; either version 3, or (at your option) 10any later version. 11 12GCC is distributed in the hope that it will be useful, but 13WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15General Public License for 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#include "config.h" 22#include "system.h" 23#include "coretypes.h" 24#include "tree.h" 25#include "intl.h" 26#include "diagnostic.h" 27#include "function.h" 28#include "analyzer/analyzer.h" 29#include "diagnostic-event-id.h" 30#include "analyzer/analyzer-logging.h" 31#include "analyzer/sm.h" 32#include "diagnostic-event-id.h" 33#include "analyzer/sm.h" 34#include "analyzer/pending-diagnostic.h" 35 36#if ENABLE_ANALYZER 37 38namespace ana { 39 40/* Generate a label_text by printing FMT. 41 42 Use a clone of the global_dc for formatting callbacks. 43 44 Use this evdesc::event_desc's m_colorize flag to control colorization 45 (so that e.g. we can disable it for JSON output). */ 46 47label_text 48evdesc::event_desc::formatted_print (const char *fmt, ...) const 49{ 50 pretty_printer *pp = global_dc->printer->clone (); 51 52 pp_show_color (pp) = m_colorize; 53 54 text_info ti; 55 rich_location rich_loc (line_table, UNKNOWN_LOCATION); 56 va_list ap; 57 va_start (ap, fmt); 58 ti.format_spec = _(fmt); 59 ti.args_ptr = ≈ 60 ti.err_no = 0; 61 ti.x_data = NULL; 62 ti.m_richloc = &rich_loc; 63 pp_format (pp, &ti); 64 pp_output_formatted_text (pp); 65 va_end (ap); 66 67 label_text result = label_text::take (xstrdup (pp_formatted_text (pp))); 68 delete pp; 69 return result; 70} 71 72/* Return true if T1 and T2 are "the same" for the purposes of 73 diagnostic deduplication. */ 74 75bool 76pending_diagnostic::same_tree_p (tree t1, tree t2) 77{ 78 return simple_cst_equal (t1, t2) == 1; 79} 80 81} // namespace ana 82 83#endif /* #if ENABLE_ANALYZER */ 84