public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: David Malcolm <dmalcolm@redhat.com>
To: gcc-patches@gcc.gnu.org
Cc: David Malcolm <dmalcolm@redhat.com>
Subject: [PATCH] PR bootstrap/71481: fix input.c selftest
Date: Thu, 09 Jun 2016 21:32:00 -0000	[thread overview]
Message-ID: <1465509519-4165-1-git-send-email-dmalcolm@redhat.com> (raw)

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

             reply	other threads:[~2016-06-09 21:32 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-09 21:32 David Malcolm [this message]
2016-06-10 11:32 ` Richard Biener
2016-06-13 18:19 ` Jeff Law

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1465509519-4165-1-git-send-email-dmalcolm@redhat.com \
    --to=dmalcolm@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).