162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/// Find duplicate field initializations.  This has a high rate of false
362306a36Sopenharmony_ci/// positives due to #ifdefs, which Coccinelle is not aware of in a structure
462306a36Sopenharmony_ci/// initialization.
562306a36Sopenharmony_ci///
662306a36Sopenharmony_ci// Confidence: Low
762306a36Sopenharmony_ci// Copyright: (C) 2010-2012 Nicolas Palix.
862306a36Sopenharmony_ci// Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.
962306a36Sopenharmony_ci// Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.
1062306a36Sopenharmony_ci// URL: https://coccinelle.gitlabpages.inria.fr/website
1162306a36Sopenharmony_ci// Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise
1262306a36Sopenharmony_ci// Options: --no-includes --include-headers
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_civirtual org
1562306a36Sopenharmony_civirtual report
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci@r@
1862306a36Sopenharmony_ciidentifier I, s, fld;
1962306a36Sopenharmony_ciposition p0,p;
2062306a36Sopenharmony_ciexpression E;
2162306a36Sopenharmony_ci@@
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistruct I s =@p0 { ..., .fld@p = E, ...};
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci@s@
2662306a36Sopenharmony_ciidentifier I, s, r.fld;
2762306a36Sopenharmony_ciposition r.p0,p;
2862306a36Sopenharmony_ciexpression E;
2962306a36Sopenharmony_ci@@
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistruct I s =@p0 { ..., .fld@p = E, ...};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci@script:python depends on org@
3462306a36Sopenharmony_cip0 << r.p0;
3562306a36Sopenharmony_cifld << r.fld;
3662306a36Sopenharmony_cips << s.p;
3762306a36Sopenharmony_cipr << r.p;
3862306a36Sopenharmony_ci@@
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciif int(ps[0].line) < int(pr[0].line) or (int(ps[0].line) == int(pr[0].line) and int(ps[0].column) < int(pr[0].column)):
4162306a36Sopenharmony_ci  cocci.print_main(fld,p0)
4262306a36Sopenharmony_ci  cocci.print_secs("s",ps)
4362306a36Sopenharmony_ci  cocci.print_secs("r",pr)
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci@script:python depends on report@
4662306a36Sopenharmony_cip0 << r.p0;
4762306a36Sopenharmony_cifld << r.fld;
4862306a36Sopenharmony_cips << s.p;
4962306a36Sopenharmony_cipr << r.p;
5062306a36Sopenharmony_ci@@
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciif int(ps[0].line) < int(pr[0].line) or (int(ps[0].line) == int(pr[0].line) and int(ps[0].column) < int(pr[0].column)):
5362306a36Sopenharmony_ci  msg = "%s: first occurrence line %s, second occurrence line %s" % (fld,ps[0].line,pr[0].line)
5462306a36Sopenharmony_ci  coccilib.report.print_report(p0[0],msg)
55