This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] PR bootstrap/71481: fix input.c selftest
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: David Malcolm <dmalcolm at redhat dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 10 Jun 2016 13:32:23 +0200
- Subject: Re: [PATCH] PR bootstrap/71481: fix input.c selftest
- Authentication-results: sourceware.org; auth=none
- References: <1465509519-4165-1-git-send-email-dmalcolm at redhat dot com>
On Thu, Jun 9, 2016 at 11:58 PM, David Malcolm <dmalcolm@redhat.com> wrote:
> 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?
Ok.
Richard.
> 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
>