This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [C++ PATCH] Fix #pragma implementation diagnostics (PR c++/69145)


On Tue, 2016-01-05 at 19:23 +0100, Jakub Jelinek wrote:
> Hi!
> 
> Now that input_location can be adhoc location (if it represents a location
> range rather than a single loc and it is long enough), we need to avoid
> passing it to cpp_included_before which compares locations as numbers.
> This can't be done on the libcpp side, because cpp_included_before
> isn't called with the line_table parameter.
Isn't the line_table available from the cpp_reader as a field, though?
cpp_included_before could in theory access pfile->line_table.

That said, cp/lex.c seems to have the only usage of cpp_included_before.

> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
> 
> 2016-01-05  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR c++/69145
> 	* lex.c (handle_pragma_implementation): Pass LOCATION_LOCUS
> 	of input_location instead of input_location itself to
> 	cpp_included_before.
> 
> 	* g++.dg/ext/pr69145-1.C: New test.
> 	* g++.dg/ext/pr69145-2-very-long-filename.cc: New file.
> 	* g++.dg/ext/pr69145-2.h: New file.
> 
> --- gcc/cp/lex.c.jj	2016-01-04 14:55:57.000000000 +0100
> +++ gcc/cp/lex.c	2016-01-05 12:27:36.056749882 +0100
> @@ -408,7 +408,8 @@ handle_pragma_implementation (cpp_reader
>    else
>      {
>        filename = TREE_STRING_POINTER (fname);
> -      if (cpp_included_before (parse_in, filename, input_location))
> +      if (cpp_included_before (parse_in, filename,
> +			       LOCATION_LOCUS (input_location)))
>  	warning (0, "#pragma implementation for %qs appears after "
>  		 "file is included", filename);
>      }
> --- gcc/testsuite/g++.dg/ext/pr69145-1.C.jj	2016-01-05 12:22:58.206729760 +0100
> +++ gcc/testsuite/g++.dg/ext/pr69145-1.C	2016-01-05 12:22:52.017818392 +0100
> @@ -0,0 +1,4 @@
> +// PR c++/69145
> +// { dg-do compile }
> +#pragma implementation "pr69145-2-very-long-filename.cc" // { dg-bogus "appears after file is included" }
> +#include "pr69145-2-very-long-filename.cc"
> --- gcc/testsuite/g++.dg/ext/pr69145-2-very-long-filename.cc.jj	2016-01-05 12:23:47.151028824 +0100
> +++ gcc/testsuite/g++.dg/ext/pr69145-2-very-long-filename.cc	2016-01-05 12:23:42.629093583 +0100
> @@ -0,0 +1,3 @@
> +// PR c++/69145
> +// { dg-do compile } */
> +#include "pr69145-2.h"
> --- gcc/testsuite/g++.dg/ext/pr69145-2.h.jj	2016-01-05 12:23:49.963988539 +0100
> +++ gcc/testsuite/g++.dg/ext/pr69145-2.h	2016-01-05 12:06:42.000000000 +0100
> @@ -0,0 +1,3 @@
> +#ifndef PR69145_2_H
> +# define PR69145_2_H
> +#endif
> 
> 	Jakub



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]