[PATCH smatch 1/4] smatch: add helper to get member deref name without type prefix

Harshit Mogalapalli <[email protected]> Wed, 22 Apr 2026 07:32:16 -0700
Newsgroups org.kernel.vger.smatch
Message-ID <[email protected]>
Some checkers need just the field name from a dereference expression.
get_member_name() returns a fully qualified string with
struct/union prefixes (for example, "(struct foo)->bar").

Add get_member_name_no_prefix() as a small helper that reuses the
existing expression normalization path and returns only
expr->member->name.

This keeps call sites simple, avoids ad hoc string parsing, and
provides a clear primitive for checks that key on member identity.

Assisted-by: Codex:gpt-5.3-codex
Co-developed-by: Dan Carpenter <[email protected]>
Signed-off-by: Harshit Mogalapalli <[email protected]>
---
 smatch.h        |  1 +
 smatch_helper.c | 11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/smatch.h b/smatch.h
index d4605f5b2a79..ce4d70c02366 100644
--- a/smatch.h
+++ b/smatch.h
@@ -573,6 +573,7 @@ int is_error_return(struct expression *expr);
 int getting_address(struct expression *expr);
 int get_struct_and_member(struct expression *expr, const char **type, const char **member);
 char *get_member_name(struct expression *expr);
+char *get_member_name_no_prefix(struct expression *expr);
 char *get_fnptr_name(struct expression *expr);
 int cmp_pos(struct position pos1, struct position pos2);
 int positions_eq(struct position pos1, struct position pos2);
diff --git a/smatch_helper.c b/smatch_helper.c
index de6842450d47..fe322bc4479a 100644
--- a/smatch_helper.c
+++ b/smatch_helper.c
@@ -1203,6 +1203,17 @@ done:
 	return member;
 }
 
+char *get_member_name_no_prefix(struct expression *expr)
+{
+	expr = strip_expr(expr);
+	if (!expr || expr->type != EXPR_DEREF)
+		return NULL;
+	if (!expr->member)
+		return NULL;
+
+	return alloc_sname(expr->member->name);
+}
+
 void clear_strip_cache(void)
 {
 	memset(strip_cache, 0, sizeof(strip_cache));
-- 
2.47.3