Coccinelle Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: elfring@users.sourceforge.net (SF Markus Elfring)
To: cocci@systeme.lip6.fr
Subject: [Cocci] Finding function implementations that call only a single function.
Date: Sun, 07 Dec 2014 10:15:30 +0100	[thread overview]
Message-ID: <54841AB2.6070609@users.sourceforge.net> (raw)
In-Reply-To: <alpine.DEB.2.02.1412070749130.2044@localhost6.localdomain6>

>> I hope that a log format selection does not block a constructive dialogue
>> for the clarification of interesting SmPL rules.
> 
> Sorry but it does.

If you insist on a log file format in this way, you can also get it.
How should your preferred log format look exactly?


> I won't look at it further until there is only one SmPL file, it contains 
> a small numnber of rules,

I am going try again to inform you about software development progress in smaller steps.


> there is a small C file,

I attached one that contains the function implementations that should be found
with another semantic patch approach.


> and there is a high level description of what you expect.

I expect the following list of properties for four functions after the selection
of a single source file for a data extraction.

They fit to the filter criterium that only a single function is called within
their implementations.


>>>> static|function|"data type"|"parameter"|"source file"|line|column
>>>> 1|ast_ttm_mem_global_init|"struct drm_global_reference"|ref|"/usr/src/linux-stable/drivers/gpu/drm/ast/ast_ttm.c"|39|1
>>>> 1|ast_ttm_mem_global_release|"struct drm_global_reference"|ref|"/usr/src/linux-stable/drivers/gpu/drm/ast/ast_ttm.c"|45|1
>>>> 1|ast_ttm_tt_populate|"struct ttm_tt *"|ttm|"/usr/src/linux-stable/drivers/gpu/drm/ast/ast_ttm.c"|228|12
>>>> 1|ast_ttm_tt_unpopulate|"struct ttm_tt *"|ttm|"/usr/src/linux-stable/drivers/gpu/drm/ast/ast_ttm.c"|233|13
> 
> How much of this output is actually relevant to your problem?

This the expected result in principle.


> For example, you ask me to work on a specific file.

Yes. - I find it appropriate for further tests.


> So why does the output have to contain the file name.

The file name should be copied from the source code position metavariables
to the desired list display.


> Why does the output need to contain the parameter name, etc.

The involved data type should be directly seen from the function signature.


> All that it needs is the function name and the line number,

The text column is also needed to make a found source code position unique.


> because there might be more than one function with the same name.

Yes. - Functions are also occasionally redefined because of conditional compilation.


> The rest is noise and unreadable
> - there are no space, there are lots of quotes, there sre more than 80 columns, etc.

Would you like to introduce another coding style convention?


> I can only help you with something that is matched but should not be,
> or something that is not matched but should be.

I hope that we can keep our dialogue constructive on such issue improvements.


It seems that we can eventually clarify a part of my observations (without additional
logging) already from a SmPL pattern like the following.

@single_function_call@
identifier caller, input, work;
type input_type, return_type;
@@
*return_type caller(input_type input)
 {
(
  work(input);
|
  return work(input);
)
 }

@single_function_call_with_pointer@
identifier caller, element, input, work;
type input_type, return_type;
@@
*return_type caller(input_type * input)
 {
(
  work(input->element);
|
  return work(input->element);
)
 }


elfring at Sonne:~/Projekte/Coccinelle/Probe> spatch.opt -sp-file find_single_function_call1.cocci ast_ttm-excerpt1.c
init_defs_builtins: /usr/local/share/coccinelle/standard.h
HANDLING: ast_ttm-excerpt1.c
diff = 
--- ast_ttm-excerpt1.c
+++ /tmp/cocci-output-19572-537bbf-ast_ttm-excerpt1.c
@@ -25,24 +25,18 @@
 /*
  * Authors: Dave Airlie <airlied@redhat.com>
  */
-static int
-ast_ttm_mem_global_init(struct drm_global_reference *ref)
 {
        return ttm_mem_global_init(ref->object);
 }
 
-static void
-ast_ttm_mem_global_release(struct drm_global_reference *ref)
 {
        ttm_mem_global_release(ref->object);
 }
 
-static int ast_ttm_tt_populate(struct ttm_tt *ttm)
 {
        return ttm_pool_populate(ttm);
 }
 
-static void ast_ttm_tt_unpopulate(struct ttm_tt *ttm)
 {
        ttm_pool_unpopulate(ttm);
 }



One of my concerns here is the influence of the function return type
on the SmPL evaluation speed so that more fine-tuning will be appropriate
for the filter patterns.

Regards,
Markus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ast_ttm-excerpt1.c
Type: text/x-csrc
Size: 1631 bytes
Desc: not available
URL: <https://systeme.lip6.fr/pipermail/cocci/attachments/20141207/6a30a4e1/attachment.bin>

  parent reply	other threads:[~2014-12-07  9:15 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-28 22:33 [Cocci] Finding function implementations that call only a single function SF Markus Elfring
     [not found] ` <alpine.DEB.2.02.1412032218310.2303@localhost6.localdomain6>
     [not found]   ` <547F8C2B.5090601@users.sourceforge.net>
     [not found]     ` <alpine.DEB.2.02.1412032334330.2303@localhost6.localdomain6>
2014-12-05 14:20       ` SF Markus Elfring
     [not found]         ` <alpine.DEB.2.10.1412051633240.2360@hadrien>
2014-12-05 20:05           ` SF Markus Elfring
     [not found]             ` <54834F76.1090104@users.sourceforge.net>
     [not found]               ` <alpine.DEB.2.10.1412061955440.2042@hadrien>
     [not found]                 ` <548358DE.6020409@users.sourceforge.net>
     [not found]                   ` <alpine.DEB.2.02.1412062139570.2256@localhost6.localdomain6>
     [not found]                     ` <548371FB.9060402@users.sourceforge.net>
     [not found]                       ` <alpine.DEB.2.02.1412062219530.2256@localhost6.localdomain6>
     [not found]                         ` <54837413.8000902@users.sourceforge.net>
     [not found]                           ` <alpine.DEB.2.02.1412062232470.2256@localhost6.localdomain6>
     [not found]                             ` <5483806D.3070805@users.sourceforge.net>
     [not found]                               ` <alpine.DEB.2.02.1412062342540.2256@localhost6.localdomain6>
     [not found]                                 ` <5483902E.8060109@users.sourceforge.net>
     [not found]                                   ` <alpine.DEB.2.02.1412070749130.2044@localhost6.localdomain6>
2014-12-07  9:15                                     ` SF Markus Elfring [this message]
2014-12-07  9:31                                       ` Julia Lawall
2014-12-07 10:22                                         ` SF Markus Elfring
2014-12-07 10:28                                           ` Julia Lawall
2014-12-07 10:37                                             ` SF Markus Elfring
2014-12-07 11:45                                               ` Julia Lawall
2014-12-07 12:00                                                 ` SF Markus Elfring
2014-12-07 12:38                                                   ` Julia Lawall
2014-12-07 14:41                                                     ` SF Markus Elfring
2014-12-17 15:30                                                       ` SF Markus Elfring
2014-12-17 19:20                                                         ` Julia Lawall
2014-12-17 20:30                                                           ` [Cocci] Distinguishing pointer data types with SmPL SF Markus Elfring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54841AB2.6070609@users.sourceforge.net \
    --to=elfring@users.sourceforge.net \
    --cc=cocci@systeme.lip6.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox