From patchwork Fri Aug 28 21:30:08 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kamil Dudka X-Patchwork-Id: 44601 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n7SLV40D031109 for ; Fri, 28 Aug 2009 21:31:04 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751278AbZH1VbA (ORCPT ); Fri, 28 Aug 2009 17:31:00 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751581AbZH1VbA (ORCPT ); Fri, 28 Aug 2009 17:31:00 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59561 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751278AbZH1VbA (ORCPT ); Fri, 28 Aug 2009 17:31:00 -0400 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n7SLV2iE020875 for ; Fri, 28 Aug 2009 17:31:02 -0400 Received: from vpn2-8-236.ams2.redhat.com (vpn2-8-236.ams2.redhat.com [10.36.8.236]) by int-mx05.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n7SLV1va001956 for ; Fri, 28 Aug 2009 17:31:02 -0400 From: Kamil Dudka To: linux-sparse@vger.kernel.org Subject: [PATCH] do not ignore attribute 'noreturn'... Date: Fri, 28 Aug 2009 23:30:08 +0200 User-Agent: KMail/1.9.7 MIME-Version: 1.0 X-Length: 3830 X-UID: 46007 Message-Id: <200908282330.08332.kdudka@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.18 Sender: linux-sparse-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sparse@vger.kernel.org Hello, enclosed is a simple patch adding support for attribute 'noreturn' to the parser. The enhancement makes it possible to optimize walk through CFG and thus help us to fight with the state explosion. The benefit is demonstrated on a simple real-world example. Generated CFG before patch: http://dudka.cz/devel/html/slsparse-before/slplug.c-handle_stmt_assign.svg Generated CFG after patch: http://dudka.cz/devel/html/slsparse-after/slplug.c-handle_stmt_assign.svg It's one of the key features I am currently missing in SPARSE in contrast to gcc used as parser. Thanks in advance for considering it! Kamil From 892f19915cbcbe26b3a7ad2c3baf1a1420f3c954 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Fri, 28 Aug 2009 21:49:16 +0200 Subject: [PATCH] do not ignore attribute 'noreturn'... ... and thus make it possible to optimize walk through CFG. Signed-off-by: Kamil Dudka --- parse.c | 4 ++-- symbol.h | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/parse.c b/parse.c index e5ad867..215c4da 100644 --- a/parse.c +++ b/parse.c @@ -480,8 +480,8 @@ static struct init_keyword { { "const", NS_KEYWORD, .op = &ignore_attr_op }, { "__const", NS_KEYWORD, .op = &ignore_attr_op }, { "__const__", NS_KEYWORD, .op = &ignore_attr_op }, - { "noreturn", NS_KEYWORD, .op = &ignore_attr_op }, - { "__noreturn__", NS_KEYWORD, .op = &ignore_attr_op }, + { "noreturn", NS_KEYWORD, MOD_NORETURN, .op = &attr_mod_op }, + { "__noreturn__", NS_KEYWORD, MOD_NORETURN, .op = &attr_mod_op }, { "no_instrument_function", NS_KEYWORD, .op = &ignore_attr_op }, { "__no_instrument_function__", NS_KEYWORD, .op = &ignore_attr_op }, { "sentinel", NS_KEYWORD, .op = &ignore_attr_op }, diff --git a/symbol.h b/symbol.h index 42d69d6..d8d1793 100644 --- a/symbol.h +++ b/symbol.h @@ -216,6 +216,8 @@ struct symbol { #define MOD_EXPLICITLY_SIGNED 0x40000000 #define MOD_BITWISE 0x80000000 +#define MOD_NORETURN 0x100000000 + #define MOD_NONLOCAL (MOD_EXTERN | MOD_TOPLEVEL) #define MOD_STORAGE (MOD_AUTO | MOD_REGISTER | MOD_STATIC | MOD_EXTERN | MOD_INLINE | MOD_TOPLEVEL) #define MOD_SIGNEDNESS (MOD_SIGNED | MOD_UNSIGNED | MOD_EXPLICITLY_SIGNED) @@ -223,7 +225,7 @@ struct symbol { #define MOD_SIZE (MOD_CHAR | MOD_SHORT | MOD_LONG | MOD_LONGLONG) #define MOD_IGNORE (MOD_TOPLEVEL | MOD_STORAGE | MOD_ADDRESSABLE | \ MOD_ASSIGNED | MOD_USERTYPE | MOD_ACCESSED | MOD_EXPLICITLY_SIGNED) -#define MOD_PTRINHERIT (MOD_VOLATILE | MOD_CONST | MOD_NODEREF | MOD_STORAGE) +#define MOD_PTRINHERIT (MOD_VOLATILE | MOD_CONST | MOD_NODEREF | MOD_STORAGE | MOD_NORETURN) /* Current parsing/evaluation function */ -- 1.6.4.1