From patchwork Thu Dec 7 22:34:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antoni Boucher X-Patchwork-Id: 175466 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp5104037vqy; Thu, 7 Dec 2023 14:34:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IHUZSsbyNL/V9P1N4r3AQF5kAV5loOxTODVtHygOZtgJzAnJKNWsjhVomJGJPES9K1VdNhQ X-Received: by 2002:a05:6214:a62:b0:67e:aa54:c87e with SMTP id ef2-20020a0562140a6200b0067eaa54c87emr224517qvb.115.1701988495245; Thu, 07 Dec 2023 14:34:55 -0800 (PST) ARC-Seal: i=3; a=rsa-sha256; t=1701988495; cv=pass; d=google.com; s=arc-20160816; b=i+bMJpmLybFoy2LriO37NN5yDmwng4G77BgdtrFzDNc2xjmkB0gpXs3pHjYGn0Tkgw UZbtL28AnYlEJRPABVq0kWv96q8jQZgUL/CJptEeGQ0Eyv1PMSC0FeimVkzfZNE6LxIG 6alUaqsIB1C9MZkTOuGwNuzr6e+5iwPGgZDhueSks4Oa9DLslr7ZmsqYX9S2fs8fzPyK voaa+NWiMNCJHe8ia+4dNrCoMtLphQvBlh1Hu/WECUWndBYaYSPyTmwa7uT0LJIcZHz7 1CYewcxMeR8RAx/EgSWmc1XkewOfbV2+epcgm7GbJ6tdj3xa0WFmF3qRMYduwrbrzlvW h07A== ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:feedback-id:mime-version :user-agent:autocrypt:date:cc:to:from:subject:message-id :dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=jrYxiQi07wc7D1OaIYACaoARNs08D5xNBu4b0C3/mZQ=; fh=JISpz+bBSU4NvpZkyVsds76plEm8twWz26DY1VOoDBc=; b=onyKgVHSqJMjFuIgwCSTknS9PWIIYZTsaYpF6LC6+BXTyJdIX4ZmDlAAI0Uk3Ub6wv g6c0uhRKRO2r81qbl8BJ+GZ7IpONzZSD4ccngPHQ26loKpHcPUNJuhD9fq9AYTtquwjq tOPB2zuNNHJWUZ3b3VCrE3NcJqjaSztQYUmxsreS+Ozm0U9rPUe7Rg7+6aG90esEoqkg 3KP1xEGinioWysPzG4Uv4MRrByiMpshqok8dD5QLCrd6RvhFpAbsXiqzFUXFcNA+cIGO w1OV1g/3UcwUJSc1lCr3zs/xtjqM7zZLAwJwiMG3TU+SUxvmLh1JxlDCHqhdK7nAFypH 5ZSQ== ARC-Authentication-Results: i=3; mx.google.com; dkim=pass header.i=@zoho.com header.s=zm2022 header.b=fF127IyE; arc=pass (i=2); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=zoho.com Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id ee16-20020a0562140a5000b0067a9a3195e1si772458qvb.257.2023.12.07.14.34.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Dec 2023 14:34:55 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@zoho.com header.s=zm2022 header.b=fF127IyE; arc=pass (i=2); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=zoho.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F31DF3857B99 for ; Thu, 7 Dec 2023 22:34:54 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from sender4-pp-o90.zoho.com (sender4-pp-o90.zoho.com [136.143.188.90]) by sourceware.org (Postfix) with ESMTPS id B0DE63858C60; Thu, 7 Dec 2023 22:34:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B0DE63858C60 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=zoho.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=zoho.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B0DE63858C60 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=136.143.188.90 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1701988471; cv=pass; b=Nqzfeb7bBeBxamQOK5QDzvG7rIlajcYVNhUgh9Msago8LTWcOwXpfKsUfL6jtbuBLMEZvhBS+H44btE9OeLsxXBZUoayWIhtn99Ras0O/fyVD0gn8syZNt7MQ7TgJivesVWBSsAwSV67QaUILHqsBiPQBQTTl4oIYVR5MCnWdeo= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1701988471; c=relaxed/simple; bh=l4HD4TCO65b2MAVa1yFKAWBqM23NDfD6TImFHqYcpZs=; h=DKIM-Signature:Message-ID:Subject:From:To:Date:MIME-Version; b=ZcMKeap6whDZfRCAyHeDeAoW2zBYXIgksJyp6Yq5AQsz9r72EfWzWYpiI6HXEnX1vIZThgESA0SLu634y7SQ7Th8Ga5owlMfbchmeQyYLwBuS9kkfU4SPH8kxK0/XK8nohrmKQRy8c/luiKBVuQCrOHipB+EdtZJpAa4TIWviOk= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; t=1701988466; cv=none; d=zohomail.com; s=zohoarc; b=EQmG+RxqmkLXELb48yUUbSGeZweQ7jjXdYf+3qtGI3DZtkXDlkM3VSAD6pxXpS7Z23cnqhVOqWgguzDK/XTOL1ha07SDDBVAEzTdDQL/Csdyfidh1l8tJKQqkWPAqoIEvEhr21MgeldG8ljowsIRDi8R+jltU5RwM+A459YUY8s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1701988466; h=Content-Type:Cc:Cc:Date:Date:From:From:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=jrYxiQi07wc7D1OaIYACaoARNs08D5xNBu4b0C3/mZQ=; b=Ac9uK1T/DDI14oQLYPhZITV7RyBV5C2qGv811kRSkSdn4FJj8eUCpCAE+rborgqjGVfcmCzxsoN8P5OUGrBXfWa+R7UIKIYJWwaPCJb1vXEYSHcIxTit/mGh3Ixi+0l21ojdC+mJ/xdNUutcCNDaceF7SIo4Vxx5i7veggVE0HE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zoho.com; spf=pass smtp.mailfrom=bouanto@zoho.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1701988466; s=zm2022; d=zoho.com; i=bouanto@zoho.com; h=Message-ID:Subject:Subject:From:From:To:To:Cc:Cc:Date:Date:Content-Type:MIME-Version:Feedback-ID:Message-Id:Reply-To; bh=jrYxiQi07wc7D1OaIYACaoARNs08D5xNBu4b0C3/mZQ=; b=fF127IyEhirrDVyxcR6AcVCu1uifmbtg4lAUNEhTaSjzZ/AaIu+wnALMyya4t7pS n21xMKHh9eexgetwhYDi+KOKMlQESlqPmUkzNCz3Tg2y04eOjkw1wbnlvUSA9hK4V8M dyqyzi2K5PFqDiuCkHvVVif50sIfIllQHWVjcZkc= Received: from [192.168.1.172] (38.87.11.6 [38.87.11.6]) by mx.zohomail.com with SMTPS id 1701988465151477.80586470418746; Thu, 7 Dec 2023 14:34:25 -0800 (PST) Message-ID: <447a6c24782a4275736dd38f35e17e42612ee80d.camel@zoho.com> Subject: [PATCH] libgccjit: Add type checks in gcc_jit_block_add_assignment_op From: Antoni Boucher To: jit@gcc.gnu.org, gcc-patches@gcc.gnu.org Cc: David Malcolm Date: Thu, 07 Dec 2023 17:34:23 -0500 Autocrypt: addr=bouanto@zoho.com; prefer-encrypt=mutual; keydata=mQENBFOSMLQBCADO5aw6Ys8thMQUNzrwAnfJX2wbgWiz0pQ01DjYj22eeIpChkoZn6LWdt4dieq30u2rFi/yQzJ02foHwI2+aL9rU6xz/x4TwqyRJQGMOqklNc3R+pdXmH4WDQkQDWmLxvc07vu+zb8Tx5A6pMDh4J2ncCEhLEUcH39Yq/yg4eBnFwUX6N7kakvHrnScGNqhnSFCacoJeMJUAR+1G7VBSBd++jmnHLnx3mj7QkRZVECJUw2zqiv1yReCC6GU4SvqLjdqm5ZGeoWOqD/NHjBRoEeOVjzp6M/qOjjWRbkJVqmvgfcD8UytSSqqboR35YFT4L+rZt2ri3T12MJb3i5syCAXABEBAAG0IUFudG9uaSBCb3VjaGVyIDxib3VhbnRvQHpvaG8uY29tPokBVgQTAQgAQAIbIwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAFiEEOELC4Uw1Jeb66YE6RVeGAwR4zcEFAlz4QM4FCRLMEZoACgkQRVeGAwR4zcFBQQf/afttJrA/puADQZhrDfkgr0MFvq6iB+GCy1b8BkXimk1TOXTPt87YLehSeijNu3JkYhl5eRc87BNfU9J87KfI/KIy6hZxqlDXk16FhW9bw/7wYEA0hpb3MUn7xLElXDT0ZHaD+KTe8Oun7qfzgx5RlL6r/WODf3CkSpO085R/rfeBqDEx9mVlhDWgq6Az3CZoD+3CqiCKVqmDuHTWz4kwrd9AM5eVcLvvLKnZIdoIp+G5Ao6BvaGlZyfenN1iOSjLy2NXNt4MnUt0lUYEP5KSIIRhHQ8xkUbj7eWUmaahkxhNb3fH3sAPwGnRZrPpb4rgYzNmSk63wWMh9M2xk+rLb7kBDQRTkjC0AQgAumZzsAV/UFWI+dpzebQfma36kKYZZFuseant5sq/HWP553XQ/U6ttJiKyN5MpCqtxvCAoRplf42YhlHuFqgf73WJxoJ6Y+sdyqoBSwlR+ gzAneAmsa8gmmY0wawH0Z2leazjKuS7mJjVEQZg0ZGsiCVRGeRnDqFGzDEzDc9ngWKSoTq0fKzlGy1X85OrtmUrvEbhSo6HP+FoeunHkIqrxu3w3vDoFEXxVQlKI6V3I4nCz5n6DB8WR3L7nsiiTnOiGirPw1ngvWFLW86kkA4FJpayc8Xl3va3SLY+2y4yuROboX2DVI4AC/Qeug/mDiBicPxkP6YfUartQRMe6obkEQARAQABiQE8BBgBCAAmAhsMFiEEOELC4Uw1Jeb66YE6RVeGAwR4zcEFAlz4QRsFCRLMEecACgkQRVeGAwR4zcE56ggAgTgrJInBKC+7552Dpccuo6Clh3wZfjlNLv9/6r5lKEbaNzaTrfhPiAP4WgnluIUmj8amOFLFJpj+BAVNOXpZ4D2R3o9ch8z7fot+fW4Yw+PKIxH4I2xEys8ndoEB3aiQwHjKcGIhkIU7uyMJFQr2aWjdTY0gmXw0YZueHOSLgo7uX4XKxB8fEO/yto/Tff2YBAAq+AtNwt+Gh5YS9rZw7rwUTWMi84yVOlc+zRE79E9NJkvdTwX7IJYo64VzIRNfgHsn7QNdVzuM1XIFHl+Glk6cIlI8s6BO7nEoCn3hTF104fQTAO3fEs+XXZOKXo2lk8faowEoPq5r58StrV0nyg== User-Agent: Evolution 3.50.2 MIME-Version: 1.0 X-Zoho-Virus-Status: 1 X-Zoho-AV-Stamp: zmail-av-1.1.0/201.873.56 Feedback-ID: rr08011228579449f9f60e5e0b6d3784c900008df78004132fc5a404a4328ba9b5f4912d48b862177316a8fc24:zu08011226b82dd92fc253ca618733182b0000490c10b2a34220520eaba4eebe5c9db536960ffaacbfafd8:rf08011232f1524ed3ad8b44356c3385ee00009ffc1b363205f88361831af1c09b0ef47150c7e004075783304bfa17761da276bd2aa334:ZohoMail X-ZohoMailClient: External X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1784664288030877648 X-GMAIL-MSGID: 1784664288030877648 Hi. This patch adds checks gcc_jit_block_add_assignment_op to make sure it is only ever called on numeric types. With the previous patch, this might require a change to also allow vector types here. Thanks for the review. From 932048619671c61af224708a3da484b9f54a30a3 Mon Sep 17 00:00:00 2001 From: Antoni Boucher Date: Wed, 18 Oct 2023 18:33:18 -0400 Subject: [PATCH] libgccjit: Add type checks in gcc_jit_block_add_assignment_op gcc/jit/ChangeLog: * libgccjit.cc (RETURN_IF_FAIL_PRINTF3): New macro. (gcc_jit_block_add_assignment_op): Add numeric checks. gcc/testsuite/ChangeLog: * jit.dg/test-error-bad-assignment-op.c: New test. --- gcc/jit/libgccjit.cc | 21 +++++++ .../jit.dg/test-error-bad-assignment-op.c | 57 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 gcc/testsuite/jit.dg/test-error-bad-assignment-op.c diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index 0451b4df7f9..eb6817a0a99 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -267,6 +267,16 @@ struct gcc_jit_extended_asm : public gcc::jit::recording::extended_asm } \ JIT_END_STMT +#define RETURN_IF_FAIL_PRINTF3(TEST_EXPR, CTXT, LOC, ERR_FMT, A0, A1, A2) \ + JIT_BEGIN_STMT \ + if (!(TEST_EXPR)) \ + { \ + jit_error ((CTXT), (LOC), "%s: " ERR_FMT, \ + __func__, (A0), (A1), (A2)); \ + return; \ + } \ + JIT_END_STMT + #define RETURN_IF_FAIL_PRINTF4(TEST_EXPR, CTXT, LOC, ERR_FMT, A0, A1, A2, A3) \ JIT_BEGIN_STMT \ if (!(TEST_EXPR)) \ @@ -2890,6 +2900,17 @@ gcc_jit_block_add_assignment_op (gcc_jit_block *block, lvalue->get_type ()->get_debug_string (), rvalue->get_debug_string (), rvalue->get_type ()->get_debug_string ()); + // TODO: check if it is a numeric vector? + RETURN_IF_FAIL_PRINTF3 ( + lvalue->get_type ()->is_numeric () && rvalue->get_type ()->is_numeric (), ctxt, loc, + "gcc_jit_block_add_assignment_op %s has non-numeric lvalue %s (type: %s)", + gcc::jit::binary_op_reproducer_strings[op], + lvalue->get_debug_string (), lvalue->get_type ()->get_debug_string ()); + RETURN_IF_FAIL_PRINTF3 ( + rvalue->get_type ()->is_numeric () && rvalue->get_type ()->is_numeric (), ctxt, loc, + "gcc_jit_block_add_assignment_op %s has non-numeric rvalue %s (type: %s)", + gcc::jit::binary_op_reproducer_strings[op], + rvalue->get_debug_string (), rvalue->get_type ()->get_debug_string ()); gcc::jit::recording::statement *stmt = block->add_assignment_op (loc, lvalue, op, rvalue); diff --git a/gcc/testsuite/jit.dg/test-error-bad-assignment-op.c b/gcc/testsuite/jit.dg/test-error-bad-assignment-op.c new file mode 100644 index 00000000000..683ebbfb1fe --- /dev/null +++ b/gcc/testsuite/jit.dg/test-error-bad-assignment-op.c @@ -0,0 +1,57 @@ +#include +#include + +#include "libgccjit.h" + +#include "harness.h" + +void +create_code (gcc_jit_context *ctxt, void *user_data) +{ + /* Let's try to inject the equivalent of: + + void + test_fn () + { + const char *variable; + variable += "test"; + } + + and verify that the API complains about the mismatching types + in the assignments. + */ + gcc_jit_type *void_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_VOID); + gcc_jit_type *const_char_ptr_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_CONST_CHAR_PTR); + + gcc_jit_function *func = + gcc_jit_context_new_function (ctxt, NULL, + GCC_JIT_FUNCTION_EXPORTED, + void_type, + "test_fn", + 0, NULL, + 0); + + gcc_jit_lvalue *variable = gcc_jit_function_new_local (func, NULL, const_char_ptr_type, "variable"); + gcc_jit_block *initial = + gcc_jit_function_new_block (func, "initial"); + gcc_jit_rvalue *string = + gcc_jit_context_new_string_literal (ctxt, "test"); + gcc_jit_block_add_assignment_op (initial, NULL, variable, GCC_JIT_BINARY_OP_PLUS, string); + + gcc_jit_block_end_with_void_return (initial, NULL); +} + +void +verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) +{ + CHECK_VALUE (result, NULL); + + /* Verify that the correct error messages were emitted. */ + CHECK_STRING_VALUE (gcc_jit_context_get_first_error (ctxt), + "gcc_jit_block_add_assignment_op:" + " gcc_jit_block_add_assignment_op GCC_JIT_BINARY_OP_PLUS" + " has non-numeric lvalue variable (type: const char *)"); +} + -- 2.43.0