public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] PR bootstrap/71481: fix input.c selftest
@ 2016-06-09 21:32 David Malcolm
  2016-06-10 11:32 ` Richard Biener
  2016-06-13 18:19 ` Jeff Law
  0 siblings, 2 replies; 3+ messages in thread
From: David Malcolm @ 2016-06-09 21:32 UTC (permalink / raw)
  To: gcc-patches; +Cc: David Malcolm

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&regretested 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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] PR bootstrap/71481: fix input.c selftest
  2016-06-09 21:32 [PATCH] PR bootstrap/71481: fix input.c selftest David Malcolm
@ 2016-06-10 11:32 ` Richard Biener
  2016-06-13 18:19 ` Jeff Law
  1 sibling, 0 replies; 3+ messages in thread
From: Richard Biener @ 2016-06-10 11:32 UTC (permalink / raw)
  To: David Malcolm; +Cc: GCC Patches

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&regretested 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
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] PR bootstrap/71481: fix input.c selftest
  2016-06-09 21:32 [PATCH] PR bootstrap/71481: fix input.c selftest David Malcolm
  2016-06-10 11:32 ` Richard Biener
@ 2016-06-13 18:19 ` Jeff Law
  1 sibling, 0 replies; 3+ messages in thread
From: Jeff Law @ 2016-06-13 18:19 UTC (permalink / raw)
  To: David Malcolm, gcc-patches

On 06/09/2016 03:58 PM, David Malcolm 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&regretested 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.
OK.

FWIW, I think the LANG_C vs translating is your call to make.  I can see 
arguments for both directions.

Jeff

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-06-13 18:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-09 21:32 [PATCH] PR bootstrap/71481: fix input.c selftest David Malcolm
2016-06-10 11:32 ` Richard Biener
2016-06-13 18:19 ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).