All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Chris Li <sparse@chrisli.org>, Luc Van Oostenryck <lucvoo@kernel.org>
Cc: Alexey Gladkov <legion@kernel.org>, linux-sparse@vger.kernel.org
Subject: [PATCH v2] sparse/dissect: don't miss inline functions when !dissect_show_all_symbols
Date: Wed, 31 Dec 2025 17:16:19 +0100	[thread overview]
Message-ID: <aVVMU0Vu-t6SN4g-@redhat.com> (raw)
In-Reply-To: <aUvQr9q1ePtvSwCs@redhat.com>

parse_function_body() doesn't do add_symbol(decl) if MOD_INLINE, this
means that dissect/semind can't see the definitions of inline functions
in translation_unit_used_list.

This change is not really needed if dissect_show_all_symbols == 1, in
this case do_file() inspects file_scope/global_scope.

Test-case:

	$ cat -n INLINE.c
	     1	static inline void i_func1(void)
	     2	{
	     3		unkown();
	     4	}
	     5	static inline void *i_func2(void)
	     6	{
	     7		return i_func1;
	     8	}
	     9
	    10	void func(void)
	    11	{
	    12		i_func2();
	    13	}

Before this patch:

	$ ./test-dissect INLINE.c

	  10:6                    def   f func                             void ( ... )
	  12:9   func             --r   f i_func2                          void *( ... )

With this patch:

	$ ./test-dissect INLINE.c

	  10:6                    def   f func                             void ( ... )
	   5:21                   def   f i_func2                          void *( ... )
	   1:20                   def   f i_func1                          void ( ... )
	   3:9   i_func1          --r   f unkown                           bad type
	   7:16  i_func2          r--   f i_func1                          void ( ... )
	  12:9   func             --r   f i_func2                          void *( ... )

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
 dissect.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/dissect.c b/dissect.c
index a825bb30..b9d4adc4 100644
--- a/dissect.c
+++ b/dissect.c
@@ -59,6 +59,7 @@ static void do_sym_list(struct symbol_list *list);
 
 static struct symbol
 	*base_type(struct symbol *sym),
+	*do_symbol(struct symbol *sym),
 	*do_initializer(struct symbol *type, struct expression *expr),
 	*do_expression(usage_t mode, struct expression *expr),
 	*do_statement(usage_t mode, struct statement *stmt);
@@ -225,6 +226,12 @@ static void examine_sym_node(struct symbol *node, struct symbol *parent)
 
 		case SYM_FN:
 			node->kind = 'f';
+			if (node->ctype.modifiers & MOD_INLINE) {
+				struct symbol *dctx = dissect_ctx;
+				dissect_ctx = NULL;
+				do_symbol(node);
+				dissect_ctx = dctx;
+			}
 			node = base;
 			break;
 
@@ -621,7 +628,7 @@ static inline bool is_typedef(struct symbol *sym)
 	return (sym->namespace == NS_TYPEDEF);
 }
 
-static inline struct symbol *do_symbol(struct symbol *sym)
+static struct symbol *do_symbol(struct symbol *sym)
 {
 	struct symbol *type = base_type(sym);
 	struct symbol *dctx = dissect_ctx;
-- 
2.52.0



      parent reply	other threads:[~2025-12-31 16:16 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-24 11:38 [PATCH] sparse/dissect: introduce do_inline(struct symbol *sym) Oleg Nesterov
2025-12-31 16:15 ` Oleg Nesterov
2025-12-31 16:16 ` Oleg Nesterov [this message]

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=aVVMU0Vu-t6SN4g-@redhat.com \
    --to=oleg@redhat.com \
    --cc=legion@kernel.org \
    --cc=linux-sparse@vger.kernel.org \
    --cc=lucvoo@kernel.org \
    --cc=sparse@chrisli.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.