Skip to content

Commit

Permalink
kbuild: genksyms fix for typeof handling
Browse files Browse the repository at this point in the history
The tokenizer misses counting an open-parenthesis when parsing a
non-trivial typeof beginning with an open-parenthesis. This function
in include/linux/ceph/libceph.h

static type *lookup_##name(struct rb_root *root,
                           typeof(((type *)0)->keyfld) key)

When instantiated in net/ceph/mon_client.c, causes subsequent symbols
including an EXPORT_SYMBOL in that file to be lost.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michal Marek <mmarek@suse.com>
  • Loading branch information
Nicholas Piggin authored and Michal Marek committed Aug 25, 2016
1 parent dee81e9 commit 4fab916
Showing 1 changed file with 17 additions and 18 deletions.
35 changes: 17 additions & 18 deletions scripts/genksyms/lex.l
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,23 @@ repeat:
}
break;
case ST_TYPEOF_1:
if (token == IDENT)
{
if (is_reserved_word(yytext, yyleng)
|| find_symbol(yytext, SYM_TYPEDEF, 1))
{
yyless(0);
unput('(');
lexstate = ST_NORMAL;
token = TYPEOF_KEYW;
break;
}
_APP("(", 1);
}
lexstate = ST_TYPEOF;
/* FALLTHRU */
case ST_TYPEOF:
switch (token)
{
Expand All @@ -313,24 +330,6 @@ repeat:
}
break;
case ST_TYPEOF_1:
if (token == IDENT)
{
if (is_reserved_word(yytext, yyleng)
|| find_symbol(yytext, SYM_TYPEDEF, 1))
{
yyless(0);
unput('(');
lexstate = ST_NORMAL;
token = TYPEOF_KEYW;
break;
}
_APP("(", 1);
}
APP;
lexstate = ST_TYPEOF;
goto repeat;
case ST_BRACKET:
APP;
switch (token)
Expand Down

0 comments on commit 4fab916

Please sign in to comment.