Re: stray warning from gcc's cpp

2014-03-28 Thread Andriy Gapon
on 19/03/2014 12:03 Andriy Gapon said the following:
 
 I observe the following minor annoyance on FreeBSD systems where cpp is GCC's
 cpp.  If a DTrace script has the following shebang line:
 #!/usr/sbin/dtrace -Cs
 then the following warning is produced when the script is run:
 cc1: warning:  is shorter than expected
 
 Some details.  dtrace(1) first forks. Then a child seeks on a file descriptor
 associated with the script file, so that the shebang line is skipped (because
 otherwise it would confuse cpp).  Then the child makes the file descriptor its
 standard input and then it execs cpp.  cpp performs fstat(2) on its standard
 input descriptor and determines that it points to a regular file.  Then it
 verifies that a number of bytes it reads from the file is the same as a size 
 of
 the file.  The check makes sense if the file is opened by cpp itself, but it
 does not always make sense for the stdin as described above.
 
 The following patch seems to fix the issue, but perhaps there is a better /
 smarter alternative.

A patch that implements a different approach has been committed in FreeBSD:
https://github.com/freebsd/freebsd/commit/6ceecddbc
Please consider.  Thanks!

 --- a/libcpp/files.c
 +++ b/libcpp/files.c
 @@ -601,7 +601,8 @@ read_file_guts (cpp_reader *pfile, _cpp_file *file)
return false;
  }
 
 -  if (regular  total != size  STAT_SIZE_RELIABLE (file-st))
 +  if (regular  total != size  file-fd != 0
 +   STAT_SIZE_RELIABLE (file-st))
  cpp_error (pfile, CPP_DL_WARNING,
  %s is shorter than expected, file-path);
 
 


-- 
Andriy Gapon


stray warning from gcc's cpp

2014-03-19 Thread Andriy Gapon

I observe the following minor annoyance on FreeBSD systems where cpp is GCC's
cpp.  If a DTrace script has the following shebang line:
#!/usr/sbin/dtrace -Cs
then the following warning is produced when the script is run:
cc1: warning:  is shorter than expected

Some details.  dtrace(1) first forks. Then a child seeks on a file descriptor
associated with the script file, so that the shebang line is skipped (because
otherwise it would confuse cpp).  Then the child makes the file descriptor its
standard input and then it execs cpp.  cpp performs fstat(2) on its standard
input descriptor and determines that it points to a regular file.  Then it
verifies that a number of bytes it reads from the file is the same as a size of
the file.  The check makes sense if the file is opened by cpp itself, but it
does not always make sense for the stdin as described above.

The following patch seems to fix the issue, but perhaps there is a better /
smarter alternative.

--- a/libcpp/files.c
+++ b/libcpp/files.c
@@ -601,7 +601,8 @@ read_file_guts (cpp_reader *pfile, _cpp_file *file)
   return false;
 }

-  if (regular  total != size  STAT_SIZE_RELIABLE (file-st))
+  if (regular  total != size  file-fd != 0
+   STAT_SIZE_RELIABLE (file-st))
 cpp_error (pfile, CPP_DL_WARNING,
   %s is shorter than expected, file-path);


-- 
Andriy Gapon