Re: [cocci] Searching for duplicate exception handling code with SmPL?

Julia Lawall <[email protected]> Tue, 16 Jun 2026 15:20:50 +0200 (CEST)
Newsgroups fr.inria.cocci
Message-ID <[email protected]>
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

--8323329-1024228654-1781616050=:23663
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8BIT



On Tue, 16 Jun 2026, Markus Elfring wrote:

> > So why do you think that the number of relevant files diminshed?
>
> I got into the mood to try another SmPL script variant out.
>
>
> @initialize:python@
> @@
> import sys
> delimiter = "|"
>
> def display_data(source1, source2):
>     place1 = source1[0]
>     place2 = source2[0]
> #    if place1 == place2:
>     if (place1.line == place2.line) and (place1.column == place2.column):
>        sys.stdout.write(delimiter.join(("same position",
>                                         place1.current_element,
>                                         place1.file,
>                                         place1.line,
>                                         str(int(place1.column) + 1),
>                                         "-",
>                                         "-"
>                                        ))
>                         + "\n")
>
>     else:
>        sys.stdout.write(delimiter.join(("update candidate",
>                                         place1.current_element,
>                                         place1.file,
>                                         place1.line,
>                                         str(int(place1.column) + 1),
>                                         place2.line,
>                                         str(int(place2.column) + 1)))
>                         + "\n")
>
> @searching exists@
> expression e, x;
> identifier item, rc;
> position p1, p2;
> @@
>  if (...)
>  {
>  ... when != rc = e
>      when != item = x
>  kfree@p1(item);
>  return rc;
>  }
>  ... when any
>  if (...)
>  {
>  ... when != rc = e
>      when != item = x
>  kfree@p2(item);
>  return rc;
>  }
>
> @script:python collection@
> p1 << searching.p1;
> p2 << searching.p2;
> @@
> display_data(p1, p2)
>
>
> Test result:
> Markus_Elfring@Sonne:…/Projekte/Linux/next-analyses> time /usr/bin/spatch --timeout 23 -j4 --chunksize 1 --no-loops -dir . …/Projekte/Coccinelle/janitor/list_selected_duplicate_statements_in_if_branches5.cocci > …/Projekte/Bau/Linux/scripts/Coccinelle/list_selected_duplicate_statements_in_if_branches5-20260615.txt 2> …/Projekte/Bau/Linux/scripts/Coccinelle/list_selected_duplicate_statements_in_if_branches5-errors-20260615.txt
>
> real    9m40,850s
> user    32m55,318s
> sys     0m17,383s
>
>
> The provided data could be converted into a pivot table.
> I transformed such information into the following report.

Which means what?

>
>
> file|function name|incidence
> fs/hpfs/dnode.c|map_fnode_dirent|40
> drivers/media/dvb-frontends/cxd2880/cxd2880_top.c|cxd2880_attach|15
> drivers/mtd/tests/pagetest.c|crosstest|10
> drivers/media/pci/cx88/cx88-cards.c|cx88_core_create|10
> drivers/usb/serial/io_ti.c|do_download_mode|9
> |wmid3_set_device_status|6
> mm/vmalloc.c|pcpu_get_vm_areas|5
> drivers/net/ethernet/intel/idpf/idpf_lib.c|idpf_vport_alloc|4
> fs/jfs/jfs_dtree.c|jfs_readdir|4
> sound/soc/amd/acp/acp-platform.c|acp_dma_open|3
> drivers/gpu/drm/amd/amdgpu/atom.c|amdgpu_atom_parse|3
> drivers/gpu/drm/radeon/atom.c|atom_parse|3
> drivers/s390/net/ctcm_mpc.c|ctcmpc_init_mpc_group|3
> drivers/tty/n_gsm.c|gsm_alloc_mux|3
> |hp_init_bios_package_attribute|3
> net/mac80211/iface.c|ieee80211_add_virtual_monitor|3
> drivers/nvme/target/fabrics-cmd-auth.c|nvmet_auth_reply|3
> net/sched/act_ife.c|tcf_ife_init|3
> drivers/iommu/tegra-smmu.c|tegra_smmu_domain_alloc_paging|3
> drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c|ttusb_probe|3
> drivers/scsi/device_handler/scsi_dh_alua.c|alua_rtpg|2
> drivers/media/pci/cobalt/cobalt-driver.c|cobalt_probe|2
> drivers/media/pci/cx18/cx18-driver.c|cx18_probe|2
> drivers/media/dvb-frontends/dib9000.c|dib9000_attach|2
> kernel/trace/trace_events_trigger.c|event_enable_trigger_parse|2
> net/sched/cls_fw.c|fw_change|2
> arch/powerpc/platforms/powernv/opal-imc.c|imc_pmu_create|2
> drivers/media/pci/ivtv/ivtv-driver.c|ivtv_probe|2
> drivers/gpu/drm/gma500/psb_intel_sdvo.c|psb_intel_sdvo_init|2
> drivers/staging/rtl8723bs/core/rtw_xmit.c|rtw_mgmt_xmitframe_coalesce|2
> drivers/soundwire/intel_init.c|sdw_intel_probe_controller|2
> drivers/crypto/hisilicon/sec/sec_algs.c|sec_alg_skcipher_crypto|2
> sound/sh/aica.c|snd_aica_probe|2
> |sof_link_load|2
> drivers/platform/x86/toshiba_bluetooth.c|toshiba_bt_rfkill_probe|2
> net/wireless/core.c|wiphy_new_nm|2
>
>
> Can such technical details be helpful for further improvements
> also according to the Coccinelle software?
>
> Regards,
> Markus
>
--8323329-1024228654-1781616050=:23663--