From: Matt H. <ma...@cs...> - 2006-06-27 20:03:40
|
Peter Hawkins wrote: > Hi... > > The following abomination turns up in linux-2.6.17.1/fs/jfs/jfs_incore.h: > struct { > unchar _unused[16]; /* 16: */ > dxd_t _dxd; /* 16: */ > unchar _inline[128]; /* 128: inline symlink */ > /* _inline_ea may overlay the last part of > * file._xtroot if maxentry = XTROOTINITSLOT > */ > unchar _inline_ea[128]; /* 128: inline extended attr */ > } link; > > Unfortunately CIL parses the identifier "_inline" as the MSVC inline > keyword, whereas gcc accepts it as a valid identifier (as opposed to > inline, __inline, or __inline__). This is a case where accepting the > union of gcc and msvc syntax doesn't really cut it. To fix this the > lexer needs to have a notion of compiler personality, which I suspect > needs to reach further than this one issue. > > Please fix? > > Thanks, > Peter > Hi Peter, Thanks for your recent patches. There are several places where CIL's lexer and parser depend on the underlying compiler. For example, "__thread" is a keyword on recent versions of gcc, but not older versions. Here's a patch for _inline. Cheers, Matt --- cil/src/frontc/clexer.mll 23 May 2006 21:31:21 -0000 1.106 +++ cil/src/frontc/clexer.mll 27 Jun 2006 19:55:46 -0000 1.107 @@ -146,7 +146,11 @@ ("__inline__", fun loc -> INLINE loc); ("inline", fun loc -> INLINE loc); ("__inline", fun loc -> INLINE loc); - ("_inline", fun loc -> INLINE loc); + ("_inline", fun loc -> + if !Cprint.msvcMode then + INLINE loc + else + IDENT ("_inline", loc)); ("__attribute__", fun loc -> ATTRIBUTE loc); ("__attribute", fun loc -> ATTRIBUTE loc); |