[PATCH v2] symbol: preserve address space qualifiers with typeof()

Dan Carpenter <[email protected]>
Newsgroups org.kernel.vger.linux-sparse
Message-ID <[email protected]>
When we're parsing typeof(var) we then preserve the address space
qualifiers as well.  Otherwise it leads to warnings like this:

"warning: cast removes address space '__seg_gs' of expression"

Reported-by: Uros Bizjak <[email protected]>
Signed-off-by: Dan Carpenter <[email protected]>
---
v2: Fix a NULL dereference because "base" can be NULL.  Sorry for not
running the validation/ tests...  :(

 symbol.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/symbol.c b/symbol.c
index 7060acb666d9..a42289226650 100644
--- a/symbol.c
+++ b/symbol.c
@@ -544,9 +544,12 @@ static struct symbol *examine_pointer_type(struct symbol *sym)
 static struct symbol *examine_typeof_helper(struct symbol *sym, bool qual)
 {
 	struct symbol *base = evaluate_expression(sym->initializer);
+	struct ident *as = NULL;
 	unsigned long mod = 0;
 
-	if (!base)
+	if (base)
+		as = base->ctype.as;
+	else
 		base = &bad_ctype;
 	if (base->type == SYM_NODE) {
 		mod |= base->ctype.modifiers & MOD_TYPEOF;
@@ -559,6 +562,8 @@ static struct symbol *examine_typeof_helper(struct symbol *sym, bool qual)
 	sym->type = SYM_NODE;
 	sym->ctype.modifiers = mod;
 	sym->ctype.base_type = base;
+	if (qual)
+		sym->ctype.as = as;
 	return examine_node_type(sym);
 }
 
-- 
2.51.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.