From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2140) id B72003858C3A; Fri, 23 Jun 2023 20:12:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B72003858C3A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687551171; bh=/XDldEVFpux7spL5KM0KyhiJmYSmBsPH3HmJKDclu+g=; h=From:To:Subject:Date:From; b=I1U0ClM0sxDLSDplbM7FnzjMnCPRsHV5qDvMJXtnyolBFH9ztmIcleo045VSMIr7V HJBeXlJx5SOy7EPCap79hNL30FJZ+cA0WcBJrcKvXJ3WP+hVCAdu1NY7fSToIvAptr 0hU2cUexiH1CudVMsuVO1hswnCHTah9o8lBMD33Q= 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: 6e2341b4976d30d33723a43234e3b163bb364c2d X-Git-Newrev: db3d339cd885db8d2468d944b4039f20281e5995 Message-Id: <20230623201251.B72003858C3A@sourceware.org> Date: Fri, 23 Jun 2023 20:12:51 +0000 (GMT) List-Id: https://gcc.gnu.org/g:db3d339cd885db8d2468d944b4039f20281e5995 commit db3d339cd885db8d2468d944b4039f20281e5995 Author: Alexandre Oliva Date: Fri Jun 23 17:10:04 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 8f1861b848e..d0a13d2af33 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, @@ -6379,6 +6382,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. */