input.c's selftest::test_reading_source_line attempted to read from __FILE__, which doesn't work if the binary is run from a different location than the build dir.
Fix it by rewriting the test to write out a tempfile, and read from that, rather than from __FILE__. I used make_temp_file to create the name for the temporary file, on the grounds that that's what the driver uses for that purpose. This is on top of the patch kit posted as: https://gcc.gnu.org/ml/gcc-patches/2016-06/msg00735.html Successfully bootstrapped®retested on x86_64-pc-linux-gnu Successful -fself-test of stage1 on powerpc-ibm-aix7.1.3.0 OK for trunk? gcc/ChangeLog: PR bootstrap/71481 * input.c (selftest::test_reading_source_line): Avoid reading from __FILE__ by creating a tempfile with known content and reading from that instead. --- gcc/input.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/gcc/input.c b/gcc/input.c index 704ee75..08019c9 100644 --- a/gcc/input.c +++ b/gcc/input.c @@ -1219,23 +1219,33 @@ test_builtins () static void test_reading_source_line () { - /* We will read *this* source file, using __FILE__. - Here is some specific text to read and test for: - The quick brown fox jumps over the lazy dog. */ - const int linenum_after_test_message = __LINE__; - const int linenum = linenum_after_test_message - 1; - + /* Create a tempfile and write some text to it. */ + char *filename = make_temp_file (".txt"); + ASSERT_NE (filename, NULL); + FILE *out = fopen (filename, "w"); + if (!out) + ::selftest::fail_formatted (SELFTEST_LOCATION, + "unable to open tempfile: %s", filename); + fprintf (out, + "01234567890123456789\n" + "This is the test text\n" + "This is the 3rd line\n"); + fclose (out); + + /* Read back a specific line from the tempfile. */ int line_size; - const char *source_line = location_get_source_line (__FILE__, linenum, &line_size); + const char *source_line = location_get_source_line (filename, 2, &line_size); ASSERT_TRUE (source_line != NULL); - ASSERT_EQ (53, line_size); - if (!strncmp (" The quick brown fox jumps over the lazy dog. */", - source_line, line_size)) + ASSERT_EQ (21, line_size); + if (!strncmp ("This is the test text", + source_line, line_size)) ::selftest::pass (SELFTEST_LOCATION, "source_line matched expected value"); else ::selftest::fail (SELFTEST_LOCATION, "source_line did not match expected value"); + + free (filename); } /* Run all of the selftests within this file. */ -- 1.8.5.3