[PATCH] Wrong search order for #include_next

Geoffrey Keating geoffk@geoffk.org
Tue Mar 22 17:09:00 GMT 2005


Alexey Neyman <alex.neyman@auriga.ru> writes:

> On Friday 18 March 2005 14:14, Neil Booth wrote:
> > Alexey Neyman wrote:-
> > 
> > > Well, at least this contradicts to what 'make cpp' says. Its 
> > > occasional user won't have knowledge of its internals, therefore 
> I'd 
> > > view this behavior as rather puzzling: the search path list states 
> > > that directories dir1, dir2, dir3 are searched in that order; but 
> > > #include_next from a file in dir2 finds the included file in dir2 
> > > again.
> > 
> > The prepending rule is documented.  The description of #include_next
> > might be improved to specifically refer to the include path; rather
> > than implicitly as it currently does.
> 
> How about this patch then?

This is OK.

I believe fixincludes is supposed to fix header files in /usr/include
that use "" includes, see 'extract_quoted_files'.

> 2005-03-18  Alexey Neyman  <alex.neyman@auriga.ru>
> 
> 	* doc/cpp.texi (Wrapper Headers): Clarify the behavior of
> 	#include_next in case that the current file was included
> 	in quotes.
> 
> *** gcc.orig/gcc/doc/cpp.texi	2005-03-18 15:36:43.000000000 +0300
> --- gcc.work/gcc/doc/cpp.texi	2005-03-18 15:35:56.000000000 +0300
> ***************
> *** 1091,1096 ****
> --- 1091,1111 ----
>   file named, starting with the directory in the search path after the one
>   where the current file was found.
>   
> + Note that the same directory may appear more than once in the search
> + list if the current file is included in quotes.  For example, the directory
> + explicitly specified on the command line could also be prepended to the
> + search path list as the directory of the current file (@pxref{Include Syntax})@.
> + If this is the case, #include_next may find the same file again.  To circumvent
> + this obstacle, the following wrapper could be used:
> + @smallexample
> + #if !defined(__HEADER_H_)
> + #define __HEADER_H_
> + /* Actual code with #include_next <header.h> somewhere in it. */
> + #else
> + #include_next <header.h>
> + #endif
> + @end smallexample
> + 
>   The use of @samp{#include_next} can lead to great confusion.  We
>   recommend it be used only when there is no other alternative.  In
>   particular, it should not be used in the headers belonging to a specific



More information about the Gcc-patches mailing list