This is the mail archive of the gcc-bugs@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]

Re: cpp problem found by imake


On Tue, May 02, 2000 at 11:47:33PM -0700, Zack Weinberg wrote:
> On Wed, May 03, 2000 at 08:02:37AM +0200, Jakub Jelinek wrote:
> 
> > #define Header /usr/include/stdio
> > #define MakeHeader(x) "x.h"
> > #define Include MakeHeader(x)
> 			     ^ You meant Header, right?
> > #include Include
> 
> This should work, but it segfaults.  I'll fix that shortly.

Correction: this should not work, and the segfault appears to be due
to unrelated bustage in my work area.

cpplib, cccp (from 2.95), and SunOS 4 cpp all wind up with

#include "Header.h"

from the above example, with 'x' replaced by 'Header' in the #define
Include line.  This is not a surprise: what happened was something
like

 Include -> MakeHeader ( Header )
	 -> " Header .h"	// -traditional, so no extra whitespace...
	 -> "Header.h"		// a string, not subject to further expansion.

I could easily change this, but that wouldn't be the way a "real K+R
preprocessor" behaves.  The conclusion is that there simply is no way
to paste together an include name with -traditional on.

I'm going to have to ask you what X11 is _really_ trying to achieve
here, because this seems utterly perverse, and I'll bet there's a
simpler and more portable way.  I've got XFree 4.0 source lying
around, but I can't find the place where it does this.

zw

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