+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
# 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) $@
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
#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
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:
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. */
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
test_assertions ();
test_named_temp_file ();
test_read_file ();
+ test_locate_file ();
}
} // namespace selftest
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 ();
+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
/* 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 } */
/* { 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()
--- /dev/null
+example of a selftest file