From ba7bfd9f049d00f41be1240adebf27e13bcac261 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Thu, 2 Nov 2017 20:09:18 +0000 Subject: [PATCH] Move selftest::test_diagnostic_context to its own header It's useful to not rely on global_dc in selftests, so this patch moves class selftest::test_diagnostic_context from diagnostic-show-locus.c to a new header and source file. gcc/ChangeLog: * Makefile.in (OBJS-libcommon): Add selftest-diagnostic.o. * diagnostic-show-locus.c: Include "selftest-diagnostic.h". (class selftest::test_diagnostic_context): Move to... * selftest-diagnostic.c: New file. * selftest-diagnostic.h: New file. From-SVN: r254354 --- gcc/ChangeLog | 8 ++++++ gcc/Makefile.in | 2 +- gcc/diagnostic-show-locus.c | 29 +-------------------- gcc/selftest-diagnostic.c | 62 +++++++++++++++++++++++++++++++++++++++++++++ gcc/selftest-diagnostic.h | 49 +++++++++++++++++++++++++++++++++++ 5 files changed, 121 insertions(+), 29 deletions(-) create mode 100644 gcc/selftest-diagnostic.c create mode 100644 gcc/selftest-diagnostic.h diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 574793e..ca51e71 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2017-11-02 David Malcolm + + * Makefile.in (OBJS-libcommon): Add selftest-diagnostic.o. + * diagnostic-show-locus.c: Include "selftest-diagnostic.h". + (class selftest::test_diagnostic_context): Move to... + * selftest-diagnostic.c: New file. + * selftest-diagnostic.h: New file. + 2017-11-02 James Bowman * config/ft32/ft32.c (ft32_addr_space_legitimate_address_p): increase diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 5f5f403..51968e4 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1591,7 +1591,7 @@ OBJS-libcommon = diagnostic.o diagnostic-color.o diagnostic-show-locus.o \ pretty-print.o intl.o \ sbitmap.o \ vec.o input.o version.o hash-table.o ggc-none.o memory-block.o \ - selftest.o + selftest.o selftest-diagnostic.o # Objects in libcommon-target.a, used by drivers and by the core # compiler and containing target-dependent code. diff --git a/gcc/diagnostic-show-locus.c b/gcc/diagnostic-show-locus.c index 3512111..a1ce682 100644 --- a/gcc/diagnostic-show-locus.c +++ b/gcc/diagnostic-show-locus.c @@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see #include "diagnostic-color.h" #include "gcc-rich-location.h" #include "selftest.h" +#include "selftest-diagnostic.h" #ifdef HAVE_TERMIOS_H # include @@ -1987,34 +1988,6 @@ namespace selftest { /* Selftests for diagnostic_show_locus. */ -/* Convenience subclass of diagnostic_context for testing - diagnostic_show_locus. */ - -class test_diagnostic_context : public diagnostic_context -{ - public: - test_diagnostic_context () - { - diagnostic_initialize (this, 0); - show_caret = true; - show_column = true; - start_span = start_span_cb; - } - ~test_diagnostic_context () - { - diagnostic_finish (this); - } - - /* Implementation of diagnostic_start_span_fn, hiding the - real filename (to avoid printing the names of tempfiles). */ - static void - start_span_cb (diagnostic_context *context, expanded_location exploc) - { - exploc.file = "FILENAME"; - default_diagnostic_start_span_fn (context, exploc); - } -}; - /* Verify that diagnostic_show_locus works sanely on UNKNOWN_LOCATION. */ static void diff --git a/gcc/selftest-diagnostic.c b/gcc/selftest-diagnostic.c new file mode 100644 index 0000000..2018062 --- /dev/null +++ b/gcc/selftest-diagnostic.c @@ -0,0 +1,62 @@ +/* Selftest support for diagnostics. + Copyright (C) 2016-2017 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include "diagnostic.h" +#include "selftest.h" +#include "selftest-diagnostic.h" + +/* The selftest code should entirely disappear in a production + configuration, hence we guard all of it with #if CHECKING_P. */ + +#if CHECKING_P + +namespace selftest { + +/* Implementation of class selftest::test_diagnostic_context. */ + +test_diagnostic_context::test_diagnostic_context () +{ + diagnostic_initialize (this, 0); + show_caret = true; + show_column = true; + start_span = start_span_cb; +} + +test_diagnostic_context::~test_diagnostic_context () +{ + diagnostic_finish (this); +} + +/* Implementation of diagnostic_start_span_fn, hiding the + real filename (to avoid printing the names of tempfiles). */ + +void +test_diagnostic_context::start_span_cb (diagnostic_context *context, + expanded_location exploc) +{ + exploc.file = "FILENAME"; + default_diagnostic_start_span_fn (context, exploc); +} + +} // namespace selftest + +#endif /* #if CHECKING_P */ diff --git a/gcc/selftest-diagnostic.h b/gcc/selftest-diagnostic.h new file mode 100644 index 0000000..61525dc --- /dev/null +++ b/gcc/selftest-diagnostic.h @@ -0,0 +1,49 @@ +/* Selftest support for diagnostics. + Copyright (C) 2016-2017 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +. */ + +#ifndef GCC_SELFTEST_DIAGNOSTIC_H +#define GCC_SELFTEST_DIAGNOSTIC_H + +/* The selftest code should entirely disappear in a production + configuration, hence we guard all of it with #if CHECKING_P. */ + +#if CHECKING_P + +namespace selftest { + +/* Convenience subclass of diagnostic_context for testing + the diagnostic subsystem. */ + +class test_diagnostic_context : public diagnostic_context +{ + public: + test_diagnostic_context (); + ~test_diagnostic_context (); + + /* Implementation of diagnostic_start_span_fn, hiding the + real filename (to avoid printing the names of tempfiles). */ + static void + start_span_cb (diagnostic_context *context, expanded_location exploc); +}; + +} // namespace selftest + +#endif /* #if CHECKING_P */ + +#endif /* GCC_SELFTEST_DIAGNOSTIC_H */ -- 2.7.4