From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-f68.google.com ([209.85.208.68]:39523 "EHLO mail-ed1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726962AbeG3SMh (ORCPT ); Mon, 30 Jul 2018 14:12:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Y8Pao7JddjJS3Ldtbf1Cw15aPtTh9Sz8o3rWGbwuqcw=; b=MOh2+8VGzc9YBiPM8pr6ld5Vc1koSilS7dDElv1O5TJTm9dgZVLUtOGa69PDbNexUV aIEGpAm30tV1RKdknqznh9A2soTlmkxdpg7w1+mpxPqkzf2Gs7ukIX/EI8HotlGKsbT1 0UWfzRT3pYYSBISMXR6ukYEpNMj7X3YWPAS2QOo/786b5CUFhf91jchCDPyTKICF1l4m KezCPzJoKEtAFbYGYw8CVPS+QiyYTsKbeGks4ub1A9ifVztyVTI6YnvpZ3MwZfne5XOY ZL2ADOQ0jAaZtiIeJlJ2+4K0iq2spmLqK8LCLn7ALbjtNLSwqpsKYp96zkOoOpDGquEt C12A== From: Luc Van Oostenryck Subject: [PATCH 2/3] add support for mode __pointer__ Date: Mon, 30 Jul 2018 18:34:39 +0200 Message-Id: <20180730163440.2303-3-luc.vanoostenryck@gmail.com> In-Reply-To: <20180730163440.2303-1-luc.vanoostenryck@gmail.com> References: <32158e28-2ee8-f2b9-2d66-77c8eb43b5b5@amazon.de> <20180730163440.2303-1-luc.vanoostenryck@gmail.com> Sender: smatch-owner@vger.kernel.org List-ID: To: linux-sparse@vger.kernel.org Cc: smatch@vger.kernel.org, Norbert Manthey , Dan Carpenter , Luc Van Oostenryck sparse support GCC's modes like __SI__, __DI__, and __word__ but GCC also supports a mode __pointer__ which is used by Xen. Add support for this missing __pointer__ mode. Signed-off-by: Luc Van Oostenryck --- parse.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/parse.c b/parse.c index 0cafb4e6c..845b2c167 100644 --- a/parse.c +++ b/parse.c @@ -91,7 +91,8 @@ static attr_t typedef struct symbol *to_mode_t(struct symbol *); static to_mode_t - to_QI_mode, to_HI_mode, to_SI_mode, to_DI_mode, to_TI_mode, to_word_mode; + to_QI_mode, to_HI_mode, to_SI_mode, to_DI_mode, to_TI_mode; +static to_mode_t to_pointer_mode, to_word_mode; enum { Set_T = 1, @@ -410,6 +411,11 @@ static struct symbol_op mode_TI_op = { .to_mode = to_TI_mode }; +static struct symbol_op mode_pointer_op = { + .type = KW_MODE, + .to_mode = to_pointer_mode +}; + static struct symbol_op mode_word_op = { .type = KW_MODE, .to_mode = to_word_mode @@ -548,6 +554,8 @@ static struct init_keyword { { "__DI__", NS_KEYWORD, .op = &mode_DI_op }, { "TI", NS_KEYWORD, .op = &mode_TI_op }, { "__TI__", NS_KEYWORD, .op = &mode_TI_op }, + { "pointer", NS_KEYWORD, .op = &mode_pointer_op }, + { "__pointer__",NS_KEYWORD, .op = &mode_pointer_op }, { "word", NS_KEYWORD, .op = &mode_word_op }, { "__word__", NS_KEYWORD, .op = &mode_word_op }, }; @@ -1105,6 +1113,14 @@ static struct symbol *to_TI_mode(struct symbol *ctype) : &slllong_ctype; } +static struct symbol *to_pointer_mode(struct symbol *ctype) +{ + if (ctype->ctype.base_type != &int_type) + return NULL; + return ctype->ctype.modifiers & MOD_UNSIGNED ? uintptr_ctype + : intptr_ctype; +} + static struct symbol *to_word_mode(struct symbol *ctype) { if (ctype->ctype.base_type != &int_type) -- 2.18.0