From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2140) id 9D26D3856944; Fri, 9 Jun 2023 06:16:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9D26D3856944 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686291412; bh=KdUNBpnj5+w4r7WY+6ZpafF6ZmRHR3jkUzEhzj5koGs=; h=From:To:Subject:Date:From; b=sux/IINTqGf/bTe6y/OP4A9N3qjhG5pUVQU4UrcnvOX4UB+7c46dSQxedNPXfl7LF /xTyGE60fwZtYMdT+egE1E2yN0P4dkrJfii6VaCVdk6DFO3NQEUGnIJz2VsbETd9L9 KPwazWzmyU4BM8pGFriONdQV/gIt88dsElvGjD1Y= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Alexandre Oliva To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/aoliva/heads/testme)] Expose expected_throw attribute (Ada) X-Act-Checkin: gcc X-Git-Author: Alexandre Oliva X-Git-Refname: refs/users/aoliva/heads/testme X-Git-Oldrev: f8773b5c31ac7165f3ae696ae548c5118d4f56b6 X-Git-Newrev: 66f238721b36e726d70a9ad96b84e193ac57ec00 Message-Id: <20230609061652.9D26D3856944@sourceware.org> Date: Fri, 9 Jun 2023 06:16:52 +0000 (GMT) List-Id: https://gcc.gnu.org/g:66f238721b36e726d70a9ad96b84e193ac57ec00 commit 66f238721b36e726d70a9ad96b84e193ac57ec00 Author: Alexandre Oliva Date: Thu Jun 8 01:35:14 2023 -0300 Expose expected_throw attribute (Ada) Enable marking subprograms as expected_throw with Machine_Attribute pragmas. for gcc/ada/gcc-interface/ChangeLog * utils.cc (handle_expected_throw_attribute): New. (gnat_internal_attribute_table): Add expected_throw. Diff: --- gcc/ada/gcc-interface/utils.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gcc/ada/gcc-interface/utils.cc b/gcc/ada/gcc-interface/utils.cc index 392ec0b7f4e..c8e77775aa5 100644 --- a/gcc/ada/gcc-interface/utils.cc +++ b/gcc/ada/gcc-interface/utils.cc @@ -87,6 +87,7 @@ tree gnat_raise_decls_ext[(int) LAST_REASON_CODE + 1]; /* Forward declarations for handlers of attributes. */ static tree handle_const_attribute (tree *, tree, tree, int, bool *); static tree handle_nothrow_attribute (tree *, tree, tree, int, bool *); +static tree handle_expected_throw_attribute (tree *, tree, tree, int, bool *); static tree handle_pure_attribute (tree *, tree, tree, int, bool *); static tree handle_novops_attribute (tree *, tree, tree, int, bool *); static tree handle_nonnull_attribute (tree *, tree, tree, int, bool *); @@ -143,6 +144,8 @@ const struct attribute_spec gnat_internal_attribute_table[] = handle_const_attribute, NULL }, { "nothrow", 0, 0, true, false, false, false, handle_nothrow_attribute, NULL }, + { "expected_throw", 0, 0, true, false, false, false, + handle_expected_throw_attribute, NULL }, { "pure", 0, 0, true, false, false, false, handle_pure_attribute, NULL }, { "no vops", 0, 0, true, false, false, false, @@ -6378,6 +6381,22 @@ handle_nothrow_attribute (tree *node, tree ARG_UNUSED (name), return NULL_TREE; } +/* Handle a "expected_throw" attribute; arguments as in + struct attribute_spec.handler. */ + +static tree +handle_expected_throw_attribute (tree *node, tree ARG_UNUSED (name), + tree ARG_UNUSED (args), int ARG_UNUSED (flags), + bool *no_add_attrs) +{ + if (TREE_CODE (*node) == FUNCTION_DECL) + /* No flag to set here. */; + else + *no_add_attrs = true; + + return NULL_TREE; +} + /* Handle a "pure" attribute; arguments as in struct attribute_spec.handler. */