On 01/05/2017 10:11 AM, Jakub Jelinek wrote:
> On Thu, Jan 05, 2017 at 10:00:33AM +0100, Martin Liška wrote:
>> Having '-' used as indication that input should be taken from standard input
>> is unfriendly to pch which calculates md5sum of all input file descriptors.
>> With that fdopen fails for STDIN_FILENO. To be honest my patch is just a 
>> workaround
>> for the ICE. Is there a better solution for that?
> 
> Shouldn't we just error on trying to create PCH for - ?
> I mean, how are you going to use such a PCH file?  ./- is something
> different from - .

I think we should. I prepared a new version of patch which I've been testing.
Are you fine with the error message?

Martin

> 
> If it makes some sense (I don't see it), then the question is if the stdin
> is seakable or not.  If it is not seakable, don't we reject it already, or
> aren't there other places where we want to seek on it?
> If it is seakable, then you might e.g. just read it into a buffer in a loop
> and md5sum the buffer instead of md5summing the stream.
> 
>       Jakub
> 

>From 0e14f21128c7aa67ed0eaa10877323a0b2011b63 Mon Sep 17 00:00:00 2001
From: marxin <mli...@suse.cz>
Date: Wed, 4 Jan 2017 16:04:44 +0100
Subject: [PATCH] Error for '-' as filename of a precompiled header (PR
 pch/78970)

gcc/ChangeLog:

2017-01-05  Martin Liska  <mli...@suse.cz>

	* gcc.c (lookup_compiler): Reject '-' filename for a precompiled
	header.
---
 gcc/gcc.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/gcc/gcc.c b/gcc/gcc.c
index 8154953eb1d..ea4af119e73 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -8325,7 +8325,19 @@ lookup_compiler (const char *name, size_t length, const char *language)
     {
       for (cp = compilers + n_compilers - 1; cp >= compilers; cp--)
 	if (cp->suffix[0] == '@' && !strcmp (cp->suffix + 1, language))
-	  return cp;
+	  {
+	    if (name != NULL && strcmp (name, "-") == 0
+		&& (strcmp (cp->suffix, "@c-header") == 0
+		    || strcmp (cp->suffix, "@c++-header") == 0))
+	      {
+		fatal_error (input_location,
+			     "can't use '-' as input filename for a "
+			     "precompiled header");
+		return 0;
+	      }
+
+	    return cp;
+	  }
 
       error ("language %s not recognized", language);
       return 0;
-- 
2.11.0

Reply via email to