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
This commit is contained in:
David Malcolm 2017-11-02 20:09:18 +00:00 committed by David Malcolm
parent 7c42a3675c
commit ba7bfd9f04
5 changed files with 121 additions and 29 deletions

View File

@ -1,3 +1,11 @@
2017-11-02 David Malcolm <dmalcolm@redhat.com>
* 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 <james.bowman@ftdichip.com>
* config/ft32/ft32.c (ft32_addr_space_legitimate_address_p): increase

View File

@ -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.

View File

@ -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 <termios.h>
@ -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

62
gcc/selftest-diagnostic.c Normal file
View File

@ -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
<http://www.gnu.org/licenses/>. */
#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 */

49
gcc/selftest-diagnostic.h Normal file
View File

@ -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
<http://www.gnu.org/licenses/>. */
#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 */