Introduce selftest::locate_file

gcc/ChangeLog:
	* Makefile.in (SELFTEST_FLAGS): Add path argument to -fself-test.
	(s-selftest): Add dependency on the selftests data directory.
	* common.opt (fself-test): Rename to...
	(fself-test=): ...this, documenting the meaning of the argument.
	* selftest-run-tests.c (along): Likewise.
	* selftest-run-tests.c: Include "options.h".
	(selftest::run_tests): Initialize selftest::path_to_selftest_files
	from flag_self_test.
	* selftest.c (selftest::path_to_selftest_files): New global.
	(selftest::locate_file): New function.
	(selftest::test_locate_file): New function.
	(selftest_c_tests): Likewise.
	(selftest::selftest_c_tests): Call test_locate_file.
	* selftest.h (selftest::locate_file): New decl.
	(selftest::path_to_selftest_files): New decl.

gcc/testsuite/ChangeLog:
	PR target/78213
	* gcc.dg/cpp/pr71591.c: Add a fake value for the argument of
	-fself-test.
	* gcc.dg/pr78213.c: Disable this test.
	* selftests/example.txt: New file.

From-SVN: r243681
This commit is contained in:
David Malcolm 2016-12-15 01:47:48 +00:00 committed by David Malcolm
parent e98ac2584c
commit ecfc21ff34
10 changed files with 91 additions and 7 deletions

View File

@ -1,3 +1,21 @@
2016-12-14 David Malcolm <dmalcolm@redhat.com>
* Makefile.in (SELFTEST_FLAGS): Add path argument to -fself-test.
(s-selftest): Add dependency on the selftests data directory.
* common.opt (fself-test): Rename to...
(fself-test=): ...this, documenting the meaning of the argument.
* selftest-run-tests.c (along): Likewise.
* selftest-run-tests.c: Include "options.h".
(selftest::run_tests): Initialize selftest::path_to_selftest_files
from flag_self_test.
* selftest.c (selftest::path_to_selftest_files): New global.
(selftest::locate_file): New function.
(selftest::test_locate_file): New function.
(selftest_c_tests): Likewise.
(selftest::selftest_c_tests): Call test_locate_file.
* selftest.h (selftest::locate_file): New decl.
(selftest::path_to_selftest_files): New decl.
2016-12-14 Andrew Pinski <apinski@cavium.com>
* config/aarch64/aarch64-cores.def: Add -1 as the variant to all

View File

@ -1896,15 +1896,19 @@ rest.cross: specs
# Specify -o /dev/null so the output of -S is discarded. More importantly
# It does not try to create a file with the name "null.s" on POSIX and
# "nul.s" on Windows. Because on Windows "nul" is a reserved file name.
SELFTEST_FLAGS = -nostdinc -x c /dev/null -S -fself-test -o /dev/null
# Specify the path to gcc/testsuite/selftests within the srcdir
# as an argument to -fself-test.
SELFTEST_FLAGS = -nostdinc -x c /dev/null -S -o /dev/null \
-fself-test=$(srcdir)/testsuite/selftests
# Run the selftests during the build once we have a driver and a cc1,
# so that self-test failures are caught as early as possible.
# Use "s-selftest" to ensure that we only run the selftests if the
# driver or cc1 change.
# driver, cc1, or selftest data change.
.PHONY: selftest
selftest: s-selftest
s-selftest: $(GCC_PASSES) cc1$(exeext) stmp-int-hdrs
s-selftest: $(GCC_PASSES) cc1$(exeext) stmp-int-hdrs \
$(srcdir)/testsuite/selftests
$(GCC_FOR_TARGET) $(SELFTEST_FLAGS)
$(STAMP) $@

View File

@ -2152,9 +2152,9 @@ fselective-scheduling2
Common Report Var(flag_selective_scheduling2) Optimization
Run selective scheduling after reload.
fself-test
Common Undocumented Var(flag_self_test)
Run self-tests.
fself-test=
Common Undocumented Joined Var(flag_self_test)
Run self-tests, using the given path to locate test files.
fsel-sched-pipelining
Common Report Var(flag_sel_sched_pipelining) Init(0) Optimization

View File

@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree.h"
#include "target.h"
#include "langhooks.h"
#include "options.h"
/* This function needed to be split out from selftest.c as it references
tests from the whole source tree, and so is within
@ -38,6 +39,13 @@ along with GCC; see the file COPYING3. If not see
void
selftest::run_tests ()
{
/* Makefile.in has -fself-test=$(srcdir)/testsuite/selftests, so that
flag_self_test contains the path to the selftest subdirectory of the
source tree (without a trailing slash). Copy it up to
path_to_selftest_files, to avoid selftest.c depending on
option-handling. */
path_to_selftest_files = flag_self_test;
long start_time = get_run_time ();
/* Run all the tests, in hand-coded order of (approximate) dependencies:

View File

@ -198,6 +198,21 @@ read_file (const location &loc, const char *path)
return result;
}
/* The path of SRCDIR/testsuite/selftests. */
const char *path_to_selftest_files = NULL;
/* Convert a path relative to SRCDIR/testsuite/selftests
to a real path (either absolute, or relative to pwd).
The result should be freed by the caller. */
char *
locate_file (const char *name)
{
ASSERT_NE (NULL, path_to_selftest_files);
return concat (path_to_selftest_files, "/", name, NULL);
}
/* Selftests for libiberty. */
/* Verify that xstrndup generates EXPECTED when called on SRC and N. */
@ -281,6 +296,18 @@ test_read_file ()
free (buf);
}
/* Verify locate_file (and read_file). */
static void
test_locate_file ()
{
char *path = locate_file ("example.txt");
char *buf = read_file (SELFTEST_LOCATION, path);
ASSERT_STREQ ("example of a selftest file\n", buf);
free (buf);
free (path);
}
/* Run all of the selftests within this file. */
void
@ -290,6 +317,7 @@ selftest_c_tests ()
test_assertions ();
test_named_temp_file ();
test_read_file ();
test_locate_file ();
}
} // namespace selftest

View File

@ -158,6 +158,16 @@ extern char *read_file (const location &loc, const char *path);
extern void forcibly_ggc_collect ();
/* Convert a path relative to SRCDIR/gcc/testsuite/selftests
to a real path (either absolute, or relative to pwd).
The result should be freed by the caller. */
extern char *locate_file (const char *path);
/* The path of SRCDIR/testsuite/selftests. */
extern const char *path_to_selftest_files;
/* Declarations for specific families of tests (by source file), in
alphabetical order. */
extern void bitmap_c_tests ();

View File

@ -1,3 +1,11 @@
2016-12-14 David Malcolm <dmalcolm@redhat.com>
PR target/78213
* gcc.dg/cpp/pr71591.c: Add a fake value for the argument of
-fself-test.
* gcc.dg/pr78213.c: Disable this test.
* selftests/example.txt: New file.
2016-12-14 Martin Sebor <msebor@redhat.com>
PR middle-end/78786

View File

@ -1,5 +1,5 @@
/* PR rtl-optimization/71591 */
/* { dg-do preprocess } */
/* { dg-options "-fself-test" } */
/* { dg-options "-fself-test=fake-value" } */
/* { dg-message "self-tests incompatible with -E" "" { target *-*-* } 0 } */

View File

@ -1,6 +1,13 @@
/* { dg-do compile } */
/* { dg-options "-fself-test" } */
/* When this test was written -fself-test took no argument, but it
has subsequently gained a mandatory argument, giving the path
to selftest support files (within the srcdir).
It's not clear how to provide this path sanely from
within DejaGnu, so for now, this test is disabled. */
/* { dg-skip-if "" { *-*-* } } */
/* Verify that -fself-test does not fail on a non empty source. */
int i; void bar(); void foo()

View File

@ -0,0 +1 @@
example of a selftest file