Add a production for a macro call in the cpp_other rule of Coccinelle's
C parser. This parses the following C code from Linux v5.6-rc7
successfully:
arch/x86/kernel/irq_64.c:
DEFINE_PER_CPU_PAGE_ALIGNED(struct irq_stack, irq_stack_backing_store)
__visible;
Signed-off-by: Jaskaran Singh <[email protected]>
---
parsing_c/parser_c.mly | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/parsing_c/parser_c.mly b/parsing_c/parser_c.mly
index 71e58e5b..9cd8761e 100644
--- a/parsing_c/parser_c.mly
+++ b/parsing_c/parser_c.mly
@@ -2182,7 +2182,8 @@ cpp_other:
* the rule are slightly different, they can't be statement and so expr
* at the top, only decl or function definition.
*)*/
- | identifier TOPar argument_list TCPar TPtVirg
+
+ | identifier TOPar argument_list TCPar end_attributes_opt TPtVirg
{
if args_are_params $3
then
@@ -2202,16 +2203,17 @@ cpp_other:
Declaration(
DeclList ([{v_namei = Some (id,NoInit); v_type = ty;
v_storage = unwrap sto; v_local = NotLocalDecl;
- v_attr = attrs; v_endattr = Ast_c.noattr;
+ v_attr = attrs; v_endattr = $5;
v_type_bis = ref None;
},[]],
- ($5::iistart::snd sto)))
+ ($6::iistart::snd sto)))
else
Declaration
- (MacroDecl((NoSto, fst $1, $3, true), [snd $1;$2;$4;$5;fakeInfo()]))
+ (MacroDecl((NoSto, fst $1, $3, true), [snd $1;$2;$4;$6;fakeInfo()]))
(* old: MacroTop (fst $1, $3, [snd $1;$2;$4;$5]) *)
}
+
/* cheap solution for functions with no return type. Not really a
cpp_other, but avoids conflicts */
| identifier TOPar argument_list TCPar compound {
--
2.21.1
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci