From patchwork Mon Nov 13 13:09:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 164472 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b909:0:b0:403:3b70:6f57 with SMTP id t9csp1189460vqg; Mon, 13 Nov 2023 05:10:36 -0800 (PST) X-Google-Smtp-Source: AGHT+IHd8FQe7YPUcoA/w2Qq4eeO+8OB8yClaiFYtMmj9RQEAaFs0GDjFgQsaZYdxUtybUKN0mQE X-Received: by 2002:a05:620a:4723:b0:76c:ae1f:201e with SMTP id bs35-20020a05620a472300b0076cae1f201emr14034267qkb.27.1699881036120; Mon, 13 Nov 2023 05:10:36 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1699881036; cv=pass; d=google.com; s=arc-20160816; b=brgPBxe9Jklr9viCVEmIeLC+gwjmU+1VgHS/i/DwTT/FSV9mE4YBZMorynHmxGEaKm +eW/4hthZEhrUh/UTAcdQ7fozAJC+WZHdvWhHRebazKSX3fzwDGm2KLvm5JJie8Tfwmr LmYVLNLWjtcr5RgKq6WVGsvYwLsbtvRIzyWk4PyTk7OVuIS1zfFCIcfoWzRFCkj9PZic j6VArRlnRBjyFg4szS8WslYsk9tJ0+lKXdbCJlDF54UjweJ4NhuTjjtnZ2kQZtu/oDR+ xXtSR/GOOcppkXMM4Uz+ob981AHMfKBLgfEHzQ2J6H6avOm4cDvXAUKAiMGII6AZGEpC HdRQ== ARC-Message-Signature: i=2; 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:mime-version:user-agent:date :references:message-id:in-reply-to:subject:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=r8KrHFvAsW67pURFL7XLnk0wNfUmEzqYUpErl96DN2M=; fh=hPrbWPhweUx4V0GV9uXJqbyAzg2ABmTz7kczrAQqMmM=; b=G0CO15M+OcWGVvPB06PN/cNS/gljMY5P4HqcwGPYbQg66RyuYpJUHDTt8YJDykV5WS bFl55rlBKcWDq8kP2OpAbLdVKZz9pi9hjftKLC/gxi5nzNEV/zJ5uK+s7+Ew0JvNZXsA 9CTXuXK35/AY1jdh5fZWqEkXjabhmTinUsjHU7BDl1fU1dEumhsy+b3KrMpklXqgqXfY ZGPRjKZX26AuHUkmZ+cOGVu0OsvM/Y8QBbkG2rdrpMNWuE2lrt8XgbrKy8zou2Id5/qa y4KwWM4eaD/Fu0LiHJlApyYTL51a4ZYISgbkczstIHb6qjxPCwpUL9rRBVgZrvgcNt8I EFfA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=aKAC17Az; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id u17-20020ae9c011000000b0076dae328b6fsi4512180qkk.109.2023.11.13.05.10.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Nov 2023 05:10:36 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=aKAC17Az; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 14FAE385735A for ; Mon, 13 Nov 2023 13:10:26 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 9F993384F493 for ; Mon, 13 Nov 2023 13:10:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9F993384F493 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 9F993384F493 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881003; cv=none; b=ar+nJnyHC7pajx7/s7cPpa2lxjC4ROnmbwqZtYgODuOYdEkcYmi2K25a+SHZtA8D+Rbplqk48wvKKbf1fuTyiLWBJauUuCJApwyIfz1RHhduqKR5Z3E0e6oeClUrQOf9UvkrYP9Vu2HbI+tX7LpMGF5+PtXU922f5FHzxT3bw7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881003; c=relaxed/simple; bh=4DpBQKpeWeEOf/TBrXp+hBcWZTOjBiV6vynPCDgBc0s=; h=DKIM-Signature:From:To:Subject:Message-ID:Date:MIME-Version; b=OxnaNa2dZLi2s3hfCKxzYScxQB9PLF8lAbE33hpW0KFchBTBn6gd3pMX6/fstPpzzjpQwvgrUuWvh08fQyoym2EgLRQSY0cJMkVf+GyU0Wi+DIYRZnETRGTQC7U6dBwYdXXwkOJruNUgpsyrSLJOet5hrH0ux1tOnf6WHBQZuD8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699881001; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=r8KrHFvAsW67pURFL7XLnk0wNfUmEzqYUpErl96DN2M=; b=aKAC17AzLpAIFu+XCEx/3QrX+gSvL05UPdww1yJ/uAHVzx49YxQ4rkQDIA9rpIPNgatMhZ QfgAVOcLQtibK0CZmfD2rf2DLo3k9jVCy+mazJQRvmcm081m+bIOtH0J5opPN43k85W2Ym I2kV1kBAd10zONy0t1P2tcK6RVV9spA= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-689-pIZii8HHMM64IeoU3kW2gA-1; Mon, 13 Nov 2023 08:09:59 -0500 X-MC-Unique: pIZii8HHMM64IeoU3kW2gA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8D0A11C05138 for ; Mon, 13 Nov 2023 13:09:59 +0000 (UTC) Received: from oldenburg.str.redhat.com (unknown [10.2.16.3]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E9B89C0FE05 for ; Mon, 13 Nov 2023 13:09:58 +0000 (UTC) From: Florian Weimer To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/6] c-family: Introduce pedpermerror In-Reply-To: Message-ID: References: X-From-Line: e7ee58c567233aab1b36b9d09f79af6d0108a98b Mon Sep 17 00:00:00 2001 Date: Mon, 13 Nov 2023 14:09:57 +0100 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: 1782454457096460075 X-GMAIL-MSGID: 1782454457096460075 It turns out that permerror_opt is not directly usable for -fpermissive in the C front end. The front end uses pedwarn extensively, and pedwarns are not overridable by -Wno-* options, yet permerrors are. Add new pedpermerror helpers that turn into pedwarns if -pedantic-errors is active. Due to the dependency on flag_pedantic_errors, the new helpers are specific to the C-family front ends. For implementing the rich location variant, export emit_diagnostic_valist from gcc/diagnostic.cc in parallel to its location_t variant. gcc/ * diagnostic-core.h (emit_diagnostic_valist): Declare function. * diagnostic.cc (emit_diagnostic_valist): Define it. gcc/c-family/ * c-common.h (pedpermerror): Declare functions. * c-warn.cc (pedpermerror): Define them. --- gcc/c-family/c-common.h | 4 ++++ gcc/c-family/c-warn.cc | 34 ++++++++++++++++++++++++++++++++++ gcc/diagnostic-core.h | 3 +++ gcc/diagnostic.cc | 7 +++++++ 4 files changed, 48 insertions(+) diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index b57e83d7c5d..789e0bf2459 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -1486,6 +1486,10 @@ extern void warn_for_address_or_pointer_of_packed_member (tree, tree); extern void warn_parm_array_mismatch (location_t, tree, tree); extern void maybe_warn_sizeof_array_div (location_t, tree, tree, tree, tree); extern void do_warn_array_compare (location_t, tree_code, tree, tree); +extern bool pedpermerror (location_t, int, const char *, + ...) ATTRIBUTE_GCC_DIAG(3,4); +extern bool pedpermerror (rich_location *, int, const char *, + ...) ATTRIBUTE_GCC_DIAG(3,4); /* Places where an lvalue, or modifiable lvalue, may be required. Used to select diagnostic messages in lvalue_error and diff --git a/gcc/c-family/c-warn.cc b/gcc/c-family/c-warn.cc index b1bd8ba9f42..475a3e4b42e 100644 --- a/gcc/c-family/c-warn.cc +++ b/gcc/c-family/c-warn.cc @@ -3932,3 +3932,37 @@ check_for_xor_used_as_pow (location_t lhs_loc, tree lhs_val, lhs_uhwi, lhs_uhwi); } } + +/* If !flag_pedantic_errors, equivalent to permerror_opt, otherwise to + pedwarn. */ + +bool +pedpermerror (location_t location, int opt, const char *gmsgid, ...) +{ + auto_diagnostic_group d; + va_list ap; + va_start (ap, gmsgid); + rich_location richloc (line_table, location); + bool ret = emit_diagnostic_valist (flag_pedantic_errors + ? DK_PEDWARN : DK_PERMERROR, + location, opt, gmsgid, &ap); + va_end (ap); + return ret; +} + +/* Same as "pedpermerror" above, but at RICHLOC. */ + +bool +pedpermerror (rich_location *richloc, int opt, const char *gmsgid, ...) +{ + gcc_assert (richloc); + + auto_diagnostic_group d; + va_list ap; + va_start (ap, gmsgid); + bool ret = emit_diagnostic_valist (flag_pedantic_errors + ? DK_PEDWARN : DK_PERMERROR, + richloc, opt, gmsgid, &ap); + va_end (ap); + return ret; +} diff --git a/gcc/diagnostic-core.h b/gcc/diagnostic-core.h index 04eba3d140e..eac775fb573 100644 --- a/gcc/diagnostic-core.h +++ b/gcc/diagnostic-core.h @@ -121,6 +121,9 @@ extern bool emit_diagnostic (diagnostic_t, location_t, int, const char *, ...) ATTRIBUTE_GCC_DIAG(4,5); extern bool emit_diagnostic (diagnostic_t, rich_location *, int, const char *, ...) ATTRIBUTE_GCC_DIAG(4,5); +extern bool emit_diagnostic_valist (diagnostic_t, rich_location *, int, + const char *, + va_list *) ATTRIBUTE_GCC_DIAG (4,0); extern bool emit_diagnostic_valist (diagnostic_t, location_t, int, const char *, va_list *) ATTRIBUTE_GCC_DIAG (4,0); extern bool seen_error (void); diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index addd6606eaa..6e73343dbdb 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -1829,6 +1829,13 @@ emit_diagnostic_valist (diagnostic_t kind, location_t location, int opt, return diagnostic_impl (&richloc, NULL, opt, gmsgid, ap, kind); } +bool +emit_diagnostic_valist (diagnostic_t kind, rich_location *richloc, int opt, + const char *gmsgid, va_list *ap) +{ + return diagnostic_impl (richloc, NULL, opt, gmsgid, ap, kind); +} + /* An informative note at LOCATION. Use this for additional details on an error message. */ void From patchwork Mon Nov 13 13:10:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 164473 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b909:0:b0:403:3b70:6f57 with SMTP id t9csp1189829vqg; Mon, 13 Nov 2023 05:11:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IFWLvpeSoRRhQS0O8b4mtVZILBFuBo0xP0Su4esu+YUG8mj6m9U5EDTmr+SX/FWg+SRxzjh X-Received: by 2002:a05:6870:3b0d:b0:1e9:9215:3987 with SMTP id gh13-20020a0568703b0d00b001e992153987mr9763588oab.16.1699881069137; Mon, 13 Nov 2023 05:11:09 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1699881069; cv=pass; d=google.com; s=arc-20160816; b=MDf3f3nuydG0YZOqiZeEJk+wx4GbmPQM6LVevXT8DmfjuTVy4jhuDoyGiUFJi0bGvH Bb/XDtiZKiwBYir0Ga14lLuNnXt+vPumw/CfAGIHocvJTltOn7BH0DnrGpLMzyOwjZwH 6M32uNrbyBLoUrbGyrE4QIg5leJ7FwJ7583G2PNw6PKryH8meJTE3yfTJtlJcCCNjfdp dpxxzT6FEem3JFF4SpvpT0jpIiQeLb4vDFMPrxipzYa/zUQcv1LZfGRTXJB+xQAJ8i5X jM68+eAwEcPn1QxIVANMrIPaqW1aBo948ZZPvJB6umfIYqnZUuA/AYkXyBkryEseFHOx 8cMA== ARC-Message-Signature: i=2; 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:mime-version:user-agent:date :references:message-id:in-reply-to:subject:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=Ejijn1jfrZwRe5uxRyxI3kVyAuwlgS12U+Gwo8X+ILo=; fh=hPrbWPhweUx4V0GV9uXJqbyAzg2ABmTz7kczrAQqMmM=; b=W6pqx6oqPfGgMl0ME0e6NqkCsdtFTQOcsofW9TaOOiqxSVKuY68++ffvTEquHvfoIC eAKsnpRSVkjcFPJB12dUD9z+lBDTeauAfWKG05uPZL7awflIyitNuqD/Jo5zK7FBoe70 HCpyMmqhBWh5GNh51wNnWCqMpOY8IbAGyVpyvZq3GlZEJ/jWxxUcEr78HpeTeCpxLpve R2GDog9CmGSiJ6917ESP41vPiQe48CY9RAlQ4313u41eUdAWobZEB0ymJcWxZnfB5iB0 PxezgnxrgV+mCeV4UtfP60BRIMdczsm7515ff8R0MZl+dhREb6ph6YbF2LSjlbYC1XUG R/Gw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=hzgWeFXS; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id q19-20020a05622a04d300b0041981d576b4si4658388qtx.733.2023.11.13.05.11.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Nov 2023 05:11:09 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=hzgWeFXS; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DB0C2385331E for ; Mon, 13 Nov 2023 13:11:08 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 048A53858439 for ; Mon, 13 Nov 2023 13:10:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 048A53858439 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 048A53858439 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881044; cv=none; b=cdss045ix2ULydDpq91ooxKSNCnIMlzrOwzxJFSI4sjiD+pzKtL2CWl+ru9laJPIe0fXsmUAwawHcov1PS6xyiOdRrjXi2+eJU15MRWoLZcOdLLoEooifiwtrZO9VFKwCfD/Ie8JC+A2/677aoxgfC/VdJXaPJ6McDK5Yn9B0pM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881044; c=relaxed/simple; bh=+jYLM/rsNXppOTy5CjHEvzv+1w4rQz5yKsmikBEq5wE=; h=DKIM-Signature:From:To:Subject:Message-ID:Date:MIME-Version; b=R0GJ6c+o1jE3b8cpdAJZBywPLSvlmM8j8sQKSDxyGHwpUJRpFDTX3QwQWM4C3BpQXFVfRnVJ9iKAsh1mtLzCN7ceZagx+nKUb0iwzncDw4peslb/nyY/HQJ4tM12lJDRqQFqvR2WuW5NRAKK3yBmRALNksKnhvAg+VgjUCMgm5k= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699881038; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Ejijn1jfrZwRe5uxRyxI3kVyAuwlgS12U+Gwo8X+ILo=; b=hzgWeFXSraU9WQbL6pcB+dckCPxQR4958ULst+63HFaRxpyyR/kqfHXaFSC+/xoMfh+G2U 2qRkqdYlhuUCHbSitu2e63aqaZ2p35wmSg3HrDWxvtpCr6rQCWt1FbIB6Sv1fDN8LDhTAZ V/AR4kjy5G0LVt0HKz+MnuCTMdZqFiM= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-604-BdwkVmD2NrKSG1vNTbGu4g-1; Mon, 13 Nov 2023 08:10:37 -0500 X-MC-Unique: BdwkVmD2NrKSG1vNTbGu4g-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id BAC8E185A781 for ; Mon, 13 Nov 2023 13:10:36 +0000 (UTC) Received: from oldenburg.str.redhat.com (unknown [10.2.16.3]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 74A1A2026D4C for ; Mon, 13 Nov 2023 13:10:35 +0000 (UTC) From: Florian Weimer To: gcc-patches@gcc.gnu.org Subject: [PATCH 2/6] c: Turn int-conversion warnings into permerrors In-Reply-To: Message-ID: <5b20c39f10a387650728861d055eebb6774eb876.1699879818.git.fweimer@redhat.com> References: X-From-Line: 5b20c39f10a387650728861d055eebb6774eb876 Mon Sep 17 00:00:00 2001 Date: Mon, 13 Nov 2023 14:10:34 +0100 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: 1782454491887159327 X-GMAIL-MSGID: 1782454491887159327 gcc/ * doc/invoke.texi (Warning Options): Document changes. gcc/c/ * c-typeck.cc (build_conditional_expr): Use pedpermerror for pointer/integer type mismatches, based on -Wint-conversion. (pedwarn_pedpermerror_init, permerror_init): New function. (pedwarn_init): Call pedwarn_pedpermerror_init. (convert_for_assignment): Use pedpermerror and pedpermerror_init for -Wint-conversion warnings. gcc/testsuite/ * c-c++-common/pr77624-1.c (foo, bar): Expect error instead of warning. * gcc.dg/Wint-conversion-2.c: Compile with -fpermissive due to expected int-conversion warning. * gcc.dg/Wint-conversion-3.c: Likewise. * gcc.dg/Wint-conversion-4.c: New test. Based on gcc.dg/Wint-conversion-3.c. Expect int-conversion errors. * gcc.dg/assign-warn-1.c: Compile with -fpermissive. * gcc.dg/assign-warn-4.c: New file. Extracted from assign-warn1.c. Expect int-cnversion errors. * gcc.dg/diagnostic-types-1.c: compile with -fpermissive. * gcc.dg/diagnostic-types-2.c: New file. Extracted from gcc.dg/diagnostic-types-1.c. Expect some errors instead of warnings. * gcc.dg/gomp/pr35738.c: Compile with -fpermissive due to expected int-conversion error. * gcc.dg/gomp/pr35738-2.c: New test. Based on gcc.dg/gomp/pr35738.c. Expect int-converison errors. * gcc.dg/init-excess-3.c: Expect int-converison errors. * gcc.dg/overflow-warn-1.c: Likewise. * gcc.dg/overflow-warn-3.c: Likewise. * gcc.dg/param-type-mismatch.c: Compile with -fpermissive. * gcc.dg/param-type-mismatch-2.c: New test. Copied from gcc.dg/param-type-mismatch.c. Expect errors. * gcc.dg/pr61162-2.c: Compile with -fpermissive. * gcc.dg/pr61162-3.c: New test. Extracted from gcc.dg/pr61162-2.c. Expect int-conversion errors. * gcc.dg/spec-barrier-3.c: Use -fpermissive due to expected int-conversion error. * gcc.dg/spec-barrier-3a.c: New test. Based on gcc.dg/spec-barrier-3.c. Expect int-conversion errors. * gcc.target/aarch64/acle/memtag_2.c: Use -fpermissive due to expected int-conversion error. * gcc.target/aarch64/acle/memtag_2a.c: New test. Copied from gcc.target/aarch64/acle/memtag_2.c. Expect error. * gcc.target/aarch64/sve/acle/general-c/load_3.c (f1): Expect error. * gcc.target/aarch64/sve/acle/general-c/store_2.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c (f1): Likewise. --- gcc/c/c-typeck.cc | 98 +++++---- gcc/doc/invoke.texi | 6 + gcc/testsuite/c-c++-common/pr77624-1.c | 4 +- gcc/testsuite/gcc.dg/Wint-conversion-2.c | 2 +- gcc/testsuite/gcc.dg/Wint-conversion-3.c | 2 +- gcc/testsuite/gcc.dg/Wint-conversion-4.c | 14 ++ gcc/testsuite/gcc.dg/assign-warn-1.c | 2 +- gcc/testsuite/gcc.dg/assign-warn-4.c | 21 ++ gcc/testsuite/gcc.dg/diagnostic-types-1.c | 2 +- gcc/testsuite/gcc.dg/diagnostic-types-2.c | 24 +++ gcc/testsuite/gcc.dg/gomp/pr35738-2.c | 18 ++ gcc/testsuite/gcc.dg/gomp/pr35738.c | 2 +- gcc/testsuite/gcc.dg/init-excess-3.c | 4 +- gcc/testsuite/gcc.dg/overflow-warn-1.c | 4 +- gcc/testsuite/gcc.dg/overflow-warn-3.c | 4 +- gcc/testsuite/gcc.dg/param-type-mismatch-2.c | 187 ++++++++++++++++++ gcc/testsuite/gcc.dg/param-type-mismatch.c | 2 +- gcc/testsuite/gcc.dg/pr61162-2.c | 2 +- gcc/testsuite/gcc.dg/pr61162-3.c | 13 ++ gcc/testsuite/gcc.dg/spec-barrier-3.c | 2 +- gcc/testsuite/gcc.dg/spec-barrier-3a.c | 13 ++ .../gcc.target/aarch64/acle/memtag_2.c | 4 +- .../gcc.target/aarch64/acle/memtag_2a.c | 71 +++++++ .../aarch64/sve/acle/general-c/load_3.c | 2 +- .../aarch64/sve/acle/general-c/store_2.c | 2 +- .../acle/general-c/store_scatter_index_1.c | 2 +- .../store_scatter_index_restricted_1.c | 2 +- .../acle/general-c/store_scatter_offset_2.c | 2 +- .../store_scatter_offset_restricted_1.c | 2 +- 29 files changed, 452 insertions(+), 61 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/Wint-conversion-4.c create mode 100644 gcc/testsuite/gcc.dg/assign-warn-4.c create mode 100644 gcc/testsuite/gcc.dg/diagnostic-types-2.c create mode 100644 gcc/testsuite/gcc.dg/gomp/pr35738-2.c create mode 100644 gcc/testsuite/gcc.dg/param-type-mismatch-2.c create mode 100644 gcc/testsuite/gcc.dg/pr61162-3.c create mode 100644 gcc/testsuite/gcc.dg/spec-barrier-3a.c create mode 100644 gcc/testsuite/gcc.target/aarch64/acle/memtag_2a.c diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 366ca88c633..9d7bdbb4523 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -5436,8 +5436,9 @@ build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp, && (code2 == INTEGER_TYPE || code2 == BITINT_TYPE)) { if (!null_pointer_constant_p (orig_op2)) - pedwarn (colon_loc, OPT_Wint_conversion, - "pointer/integer type mismatch in conditional expression"); + pedpermerror (colon_loc, OPT_Wint_conversion, + "pointer/integer type mismatch " + "in conditional expression"); else { op2 = null_pointer_node; @@ -5448,8 +5449,9 @@ build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp, && (code1 == INTEGER_TYPE || code1 == BITINT_TYPE)) { if (!null_pointer_constant_p (orig_op1)) - pedwarn (colon_loc, OPT_Wint_conversion, - "pointer/integer type mismatch in conditional expression"); + pedpermerror (colon_loc, OPT_Wint_conversion, + "pointer/integer type mismatch " + "in conditional expression"); else { op1 = null_pointer_node; @@ -6545,28 +6547,49 @@ error_init (location_t loc, const char *gmsgid, ...) inform (loc, "(near initialization for %qs)", ofwhat); } -/* Issue a pedantic warning for a bad initializer component. OPT is - the option OPT_* (from options.h) controlling this warning or 0 if - it is unconditionally given. GMSGID identifies the message. The - component name is taken from the spelling stack. */ +/* Used to implement pedwarn_init and permerror_init. */ static void ATTRIBUTE_GCC_DIAG (3,0) -pedwarn_init (location_t loc, int opt, const char *gmsgid, ...) +pedwarn_pedpermerror_init (location_t loc, int opt, const char *gmsgid, + va_list *ap, diagnostic_t kind) { /* Use the location where a macro was expanded rather than where it was defined to make sure macros defined in system headers but used incorrectly elsewhere are diagnosed. */ location_t exploc = expansion_point_location_if_in_system_header (loc); auto_diagnostic_group d; - va_list ap; - va_start (ap, gmsgid); - bool warned = emit_diagnostic_valist (DK_PEDWARN, exploc, opt, gmsgid, &ap); - va_end (ap); + bool warned = emit_diagnostic_valist (kind, exploc, opt, gmsgid, ap); char *ofwhat = print_spelling ((char *) alloca (spelling_length () + 1)); if (*ofwhat && warned) inform (exploc, "(near initialization for %qs)", ofwhat); } +/* Issue a pedantic warning for a bad initializer component. OPT is + the option OPT_* (from options.h) controlling this warning or 0 if + it is unconditionally given. GMSGID identifies the message. The + component name is taken from the spelling stack. */ + +static void ATTRIBUTE_GCC_DIAG (3,0) +pedwarn_init (location_t loc, int opt, const char *gmsgid, ...) +{ + va_list ap; + va_start (ap, gmsgid); + pedwarn_pedpermerror_init (loc, opt, gmsgid, &ap, DK_PEDWARN); + va_end (ap); +} + +/* Like pedwarn_init, but issue a permerror. */ + +static void ATTRIBUTE_GCC_DIAG (3,0) +pedpermerror_init (location_t loc, int opt, const char *gmsgid, ...) +{ + va_list ap; + va_start (ap, gmsgid); + pedwarn_pedpermerror_init (loc, opt, gmsgid, &ap, + flag_pedantic_errors ? DK_PEDWARN : DK_PERMERROR); + va_end (ap); +} + /* Issue a warning for a bad initializer component. OPT is the OPT_W* value corresponding to the warning option that @@ -7616,27 +7639,28 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type, auto_diagnostic_group d; range_label_for_type_mismatch rhs_label (rhstype, type); gcc_rich_location richloc (expr_loc, &rhs_label); - if (pedwarn (&richloc, OPT_Wint_conversion, - "passing argument %d of %qE makes pointer from " - "integer without a cast", parmnum, rname)) + if (pedpermerror (&richloc, OPT_Wint_conversion, + "passing argument %d of %qE makes pointer " + "from integer without a cast", parmnum, rname)) inform_for_arg (fundecl, expr_loc, parmnum, type, rhstype); } break; case ic_assign: - pedwarn (location, OPT_Wint_conversion, - "assignment to %qT from %qT makes pointer from integer " - "without a cast", type, rhstype); + pedpermerror (location, OPT_Wint_conversion, + "assignment to %qT from %qT makes pointer from " + "integer without a cast", type, rhstype); break; case ic_init: case ic_init_const: - pedwarn_init (location, OPT_Wint_conversion, - "initialization of %qT from %qT makes pointer from " - "integer without a cast", type, rhstype); + pedpermerror_init (location, OPT_Wint_conversion, + "initialization of %qT from %qT makes pointer " + "from integer without a cast", type, rhstype); break; case ic_return: - pedwarn (location, OPT_Wint_conversion, "returning %qT from a " - "function with return type %qT makes pointer from " - "integer without a cast", rhstype, type); + pedpermerror_init (location, OPT_Wint_conversion, + "returning %qT from a function with return type " + "%qT makes pointer from integer without a cast", + rhstype, type); break; default: gcc_unreachable (); @@ -7654,27 +7678,27 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type, auto_diagnostic_group d; range_label_for_type_mismatch rhs_label (rhstype, type); gcc_rich_location richloc (expr_loc, &rhs_label); - if (pedwarn (&richloc, OPT_Wint_conversion, - "passing argument %d of %qE makes integer from " - "pointer without a cast", parmnum, rname)) + if (pedpermerror (&richloc, OPT_Wint_conversion, + "passing argument %d of %qE makes integer from " + "pointer without a cast", parmnum, rname)) inform_for_arg (fundecl, expr_loc, parmnum, type, rhstype); } break; case ic_assign: - pedwarn (location, OPT_Wint_conversion, - "assignment to %qT from %qT makes integer from pointer " - "without a cast", type, rhstype); + pedpermerror (location, OPT_Wint_conversion, + "assignment to %qT from %qT makes integer from " + "pointer without a cast", type, rhstype); break; case ic_init: case ic_init_const: - pedwarn_init (location, OPT_Wint_conversion, - "initialization of %qT from %qT makes integer from " - "pointer without a cast", type, rhstype); + pedpermerror_init (location, OPT_Wint_conversion, + "initialization of %qT from %qT makes integer " + "from pointer without a cast", type, rhstype); break; case ic_return: - pedwarn (location, OPT_Wint_conversion, "returning %qT from a " - "function with return type %qT makes integer from " - "pointer without a cast", rhstype, type); + pedpermerror (location, OPT_Wint_conversion, "returning %qT from a " + "function with return type %qT makes integer from " + "pointer without a cast", rhstype, type); break; default: gcc_unreachable (); diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index f1a5722675f..b9fafe0fd34 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -6179,6 +6179,7 @@ only by this flag, but it also downgrades some C and C++ diagnostics that have their own flag: @gccoptlist{ +-Wint-conversion @r{(C)} -Wnarrowing @r{(C++)} } @@ -8545,6 +8546,11 @@ conversions. This warning is about implicit conversions; for explicit conversions the warnings @option{-Wno-int-to-pointer-cast} and @option{-Wno-pointer-to-int-cast} may be used. +By default, in C99 and later dialects of C, GCC treats this issue as an +error. The error can be downgraded to a warning using +@option{-fpermissive} (along with certain other errors), or for this +error alone, with @option{-Wno-error=int-conversion}. + This warning is upgraded to an error by @option{-pedantic-errors}. @opindex Wzero-length-bounds diff --git a/gcc/testsuite/c-c++-common/pr77624-1.c b/gcc/testsuite/c-c++-common/pr77624-1.c index 3567e9b866f..e25469ee2c1 100644 --- a/gcc/testsuite/c-c++-common/pr77624-1.c +++ b/gcc/testsuite/c-c++-common/pr77624-1.c @@ -4,11 +4,11 @@ int foo (int a) { - return __atomic_is_lock_free (2, a); /* { dg-warning "pointer from integer" "" { target c } } */ + return __atomic_is_lock_free (2, a); /* { dg-error "pointer from integer" "" { target c } } */ } /* { dg-error "invalid conversion" "" { target c++ } .-1 } */ int bar (int a) { - return __atomic_always_lock_free (2, a); /* { dg-warning "pointer from integer" "" { target c } } */ + return __atomic_always_lock_free (2, a); /* { dg-error "pointer from integer" "" { target c } } */ } /* { dg-error "invalid conversion" "" { target c++ } .-1 } */ diff --git a/gcc/testsuite/gcc.dg/Wint-conversion-2.c b/gcc/testsuite/gcc.dg/Wint-conversion-2.c index bf590a7bcd7..101e792e5b6 100644 --- a/gcc/testsuite/gcc.dg/Wint-conversion-2.c +++ b/gcc/testsuite/gcc.dg/Wint-conversion-2.c @@ -1,7 +1,7 @@ /* PR middle-end/86202 - ICE in get_range_info calling an invalid memcpy() declaration */ /* { dg-do compile } */ -/* { dg-options "-Wint-conversion" } */ +/* { dg-options "-fpermissive -Wint-conversion" } */ void *memcpy (void *, void *, __SIZE_TYPE__ *); /* { dg-warning "conflicting types for built-in function .memcpy." } */ void *a, *b; diff --git a/gcc/testsuite/gcc.dg/Wint-conversion-3.c b/gcc/testsuite/gcc.dg/Wint-conversion-3.c index 4e514769c01..4614c015db4 100644 --- a/gcc/testsuite/gcc.dg/Wint-conversion-3.c +++ b/gcc/testsuite/gcc.dg/Wint-conversion-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-fpermissive" } */ const char * f1 (int flag) diff --git a/gcc/testsuite/gcc.dg/Wint-conversion-4.c b/gcc/testsuite/gcc.dg/Wint-conversion-4.c new file mode 100644 index 00000000000..6ded61aed9c --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wint-conversion-4.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "" } */ + +const char * +f1 (int flag) +{ + return flag ? "" : 1; /* { dg-error "pointer/integer type mismatch in conditional expression \\\[-Wint-conversion\\\]" } */ +} + +const char * +f2 (int flag) +{ + return flag ? 1 : ""; /* { dg-error "pointer/integer type mismatch in conditional expression \\\[-Wint-conversion\\\]" } */ +} diff --git a/gcc/testsuite/gcc.dg/assign-warn-1.c b/gcc/testsuite/gcc.dg/assign-warn-1.c index 365025724c4..c483276a913 100644 --- a/gcc/testsuite/gcc.dg/assign-warn-1.c +++ b/gcc/testsuite/gcc.dg/assign-warn-1.c @@ -1,7 +1,7 @@ /* Test diagnostics for bad implicit type conversions. */ /* Origin: Joseph Myers */ /* { dg-do compile } */ -/* { dg-options "-pedantic -ftrack-macro-expansion=0" } */ +/* { dg-options "-pedantic -fpermissive -ftrack-macro-expansion=0" } */ #define TESTARG(ID, TL, TR) void ID##F(TL); void ID##F2(TR x) { ID##F(x); } extern int dummy #define TESTARP(ID, TL, TR) struct { void (*x)(TL); } ID##Fp; void ID##F2(TR x) { ID##Fp.x(x); } extern int dummy diff --git a/gcc/testsuite/gcc.dg/assign-warn-4.c b/gcc/testsuite/gcc.dg/assign-warn-4.c new file mode 100644 index 00000000000..da834f7d29d --- /dev/null +++ b/gcc/testsuite/gcc.dg/assign-warn-4.c @@ -0,0 +1,21 @@ +/* Test diagnostics for bad implicit type conversions. Error variant. */ +/* { dg-do compile } */ +/* { dg-options "-ftrack-macro-expansion=0" } */ + +#define TESTARG(ID, TL, TR) void ID##F(TL); void ID##F2(TR x) { ID##F(x); } extern int dummy +#define TESTARP(ID, TL, TR) struct { void (*x)(TL); } ID##Fp; void ID##F2(TR x) { ID##Fp.x(x); } extern int dummy +#define TESTASS(ID, TL, TR) void ID##F(TR x) { TL y; y = x; } extern int dummy +#define TESTINI(ID, TL, TR) void ID##F(TR x) { TL y = x; } extern int dummy +#define TESTRET(ID, TL, TR) TR ID##V; TL ID##F(void) { return ID##V; } extern int dummy + +TESTARG(ciia, char *, int); /* { dg-error "passing argument 1 of 'ciiaF' makes pointer from integer without a cast" } */ +TESTARP(ciib, char *, int); /* { dg-error "passing argument 1 of 'ciibFp.x' makes pointer from integer without a cast" } */ +TESTASS(ciic, char *, int); /* { dg-error "assignment to 'char \\*' from 'int' makes pointer from integer without a cast" } */ +TESTINI(ciid, char *, int); /* { dg-error "initialization of 'char \\*' from 'int' makes pointer from integer without a cast" } */ +TESTRET(ciie, char *, int); /* { dg-error "returning 'int' from a function with return type 'char \\*' makes pointer from integer without a cast" } */ + +TESTARG(iica, int, char *); /* { dg-error "passing argument 1 of 'iicaF' makes integer from pointer without a cast" } */ +TESTARP(iicb, int, char *); /* { dg-error "passing argument 1 of 'iicbFp.x' makes integer from pointer without a cast" } */ +TESTASS(iicc, int, char *); /* { dg-error "assignment to 'int' from 'char \\*' makes integer from pointer without a cast" } */ +TESTINI(iicd, int, char *); /* { dg-error "initialization of 'int' from 'char \\*' makes integer from pointer without a cast" } */ +TESTRET(iice, int, char *); /* { dg-error "returning 'char \\*' from a function with return type 'int' makes integer from pointer without a cast" } */ diff --git a/gcc/testsuite/gcc.dg/diagnostic-types-1.c b/gcc/testsuite/gcc.dg/diagnostic-types-1.c index fc4b104df05..94b67c6ae8d 100644 --- a/gcc/testsuite/gcc.dg/diagnostic-types-1.c +++ b/gcc/testsuite/gcc.dg/diagnostic-types-1.c @@ -1,6 +1,6 @@ /* PR c/81233 */ /* { dg-do compile } */ -/* { dg-options "-Wc++-compat -Wpedantic" } */ +/* { dg-options "-fpermissive -Wc++-compat -Wpedantic" } */ /* Test we're printing the types, like the good compiler we are. */ enum E1 { A } e; diff --git a/gcc/testsuite/gcc.dg/diagnostic-types-2.c b/gcc/testsuite/gcc.dg/diagnostic-types-2.c new file mode 100644 index 00000000000..e6d284d2c5f --- /dev/null +++ b/gcc/testsuite/gcc.dg/diagnostic-types-2.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-Wpedantic" } */ +/* Test we're printing the types, like the good compiler we are. */ + +extern void foo2 (int *); /* { dg-message "expected 'int \\*' but argument is of type 'int'" } */ +extern void foo3 (int); /* { dg-message "expected 'int' but argument is of type 'int \\*'" } */ + +int * +fn1 (int *p) +{ + p = 1; /* { dg-error "assignment to 'int \\*' from 'int' makes pointer from integer without a cast" } */ + int *q = 1; /* { dg-error "initialization of 'int \\*' from 'int' makes pointer from integer without a cast" } */ + foo2 (1); /* { dg-error "passing argument 1 of 'foo2' makes pointer from integer without a cast" } */ + return 1; /* { dg-error "returning 'int' from a function with return type 'int \\*' makes pointer from integer without a cast" } */ +} + +int +fn2 (int i, int *p) +{ + i = p; /* { dg-error "assignment to 'int' from 'int \\*' makes integer from pointer without a cast" } */ + int j = p; /* { dg-error "initialization of 'int' from 'int \\*' makes integer from pointer without a cast" } */ + foo3 (p); /* { dg-error "passing argument 1 of 'foo3' makes integer from pointer without a cast" } */ + return p; /* { dg-error "returning 'int \\*' from a function with return type 'int' makes integer from pointer without a cast" } */ +} diff --git a/gcc/testsuite/gcc.dg/gomp/pr35738-2.c b/gcc/testsuite/gcc.dg/gomp/pr35738-2.c new file mode 100644 index 00000000000..846afe7e778 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr35738-2.c @@ -0,0 +1,18 @@ +/* PR c/35738 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ + +void foo (void); + +void +bar (void *p) +{ + int i = 0; + char q[10]; +#pragma omp atomic + i += q; /* { dg-error "makes integer from pointer without a cast" } */ +#pragma omp atomic + i += foo; /* { dg-error "makes integer from pointer without a cast" } */ +#pragma omp atomic + i += p; /* { dg-error "makes integer from pointer without a cast" } */ +} diff --git a/gcc/testsuite/gcc.dg/gomp/pr35738.c b/gcc/testsuite/gcc.dg/gomp/pr35738.c index 0b3866eae3b..954cfa43ece 100644 --- a/gcc/testsuite/gcc.dg/gomp/pr35738.c +++ b/gcc/testsuite/gcc.dg/gomp/pr35738.c @@ -1,6 +1,6 @@ /* PR c/35738 */ /* { dg-do compile } */ -/* { dg-options "-fopenmp" } */ +/* { dg-options "-fpermissive -fopenmp" } */ void foo (void); diff --git a/gcc/testsuite/gcc.dg/init-excess-3.c b/gcc/testsuite/gcc.dg/init-excess-3.c index c03a98487b4..6ea7858a1c9 100644 --- a/gcc/testsuite/gcc.dg/init-excess-3.c +++ b/gcc/testsuite/gcc.dg/init-excess-3.c @@ -7,9 +7,9 @@ char s0[] = {"abc",1}; /* { dg-error "'char..' initializer|near init" } */ char s1[] = {"abc","a"}; /* { dg-error "'char..' initializer|near init" } */ char s2[] = {1,"abc"}; /* { dg-error "'char..' initializer|near init|computable at load time" } */ -/* { dg-warning "integer from pointer without a cast" "" { target *-*-* } .-1 } */ +/* { dg-error "integer from pointer without a cast" "" { target *-*-* } .-1 } */ char s3[5] = {"abc",1}; /* { dg-error "'char.5.' initializer|near init" } */ char s4[5] = {"abc","a"}; /* { dg-error "'char.5.' initializer|near init" } */ char s5[5] = {1,"abc"}; /* { dg-error "'char.5.' initializer|near init|computable at load time" } */ -/* { dg-warning "integer from pointer without a cast" "" { target *-*-* } .-1 } */ +/* { dg-error "integer from pointer without a cast" "" { target *-*-* } .-1 } */ diff --git a/gcc/testsuite/gcc.dg/overflow-warn-1.c b/gcc/testsuite/gcc.dg/overflow-warn-1.c index a9d9fbae148..90eb43b35e2 100644 --- a/gcc/testsuite/gcc.dg/overflow-warn-1.c +++ b/gcc/testsuite/gcc.dg/overflow-warn-1.c @@ -47,10 +47,10 @@ static int sc = INT_MAX + 1; /* { dg-warning "25:integer overflow in expression" constants. The third has the overflow in an unevaluated subexpression, so is a null pointer constant. */ void *p = 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */ -/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-1 } */ +/* { dg-error "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-1 } */ void *q = 0 * (1 / 0); /* { dg-warning "division by zero" } */ /* { dg-error "initializer element is not constant" "constant" { target *-*-* } .-1 } */ -/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */ +/* { dg-error "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */ void *r = (1 ? 0 : INT_MAX+1); void diff --git a/gcc/testsuite/gcc.dg/overflow-warn-3.c b/gcc/testsuite/gcc.dg/overflow-warn-3.c index f64047795c7..a2ead836964 100644 --- a/gcc/testsuite/gcc.dg/overflow-warn-3.c +++ b/gcc/testsuite/gcc.dg/overflow-warn-3.c @@ -53,10 +53,10 @@ static int sc = INT_MAX + 1; /* { dg-warning "integer overflow in expression" } subexpression, so is a null pointer constant. */ void *p = 0 * (INT_MAX + 1); /* { dg-warning "integer overflow in expression" } */ /* { dg-warning "overflow in constant expression" "constant" { target *-*-* } .-1 } */ -/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */ +/* { dg-error "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */ void *q = 0 * (1 / 0); /* { dg-warning "division by zero" } */ /* { dg-error "initializer element is not constant" "constant" { target *-*-* } .-1 } */ -/* { dg-warning "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */ +/* { dg-error "initialization of 'void \\*' from 'int' makes pointer from integer without a cast" "null" { target *-*-* } .-2 } */ void *r = (1 ? 0 : INT_MAX+1); void diff --git a/gcc/testsuite/gcc.dg/param-type-mismatch-2.c b/gcc/testsuite/gcc.dg/param-type-mismatch-2.c new file mode 100644 index 00000000000..91d998437d1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/param-type-mismatch-2.c @@ -0,0 +1,187 @@ +/* { dg-options "-fdiagnostics-show-caret -Wpointer-sign" } */ + +/* A collection of calls where argument 2 is of the wrong type. + Like param-type-mismatch.c, but expecting errors. */ + +/* decl, with argname. */ + +extern int callee_1 (int one, const char *two, float three); /* { dg-line callee_1 } */ + +int test_1 (int first, int second, float third) +{ + return callee_1 (first, second, third); /* { dg-error "passing argument 2 of 'callee_1' makes pointer from integer without a cast" } */ + /* { dg-begin-multiline-output "" } + return callee_1 (first, second, third); + ^~~~~~ + | + int + { dg-end-multiline-output "" } */ + /* { dg-message "expected 'const char \\*' but argument is of type 'int'" "" { target *-*-* } callee_1 } */ + /* { dg-begin-multiline-output "" } + extern int callee_1 (int one, const char *two, float three); + ~~~~~~~~~~~~^~~ + { dg-end-multiline-output "" } */ +} + +/* decl, without argname. */ + +extern int callee_2 (int, const char *, float); /* { dg-line callee_2 } */ + +int test_2 (int first, int second, float third) +{ + return callee_2 (first, second, third); /* { dg-error "passing argument 2 of 'callee_2' makes pointer from integer without a cast" } */ + /* { dg-begin-multiline-output "" } + return callee_2 (first, second, third); + ^~~~~~ + | + int + { dg-end-multiline-output "" } */ + /* { dg-message "expected 'const char \\*' but argument is of type 'int'" "" { target *-*-* } callee_2 } */ + /* { dg-begin-multiline-output "" } + extern int callee_2 (int, const char *, float); + ^~~~~~~~~~~~ + { dg-end-multiline-output "" } */ +} + +/* defn, with argname. */ + +static int callee_3 (int one, const char *two, float three) /* { dg-line callee_3 } */ +{ + return callee_2 (one, two, three); +} + +int test_3 (int first, int second, float third) +{ + return callee_3 (first, second, third); // { dg-error "passing argument 2 of 'callee_3' makes pointer from integer without a cast" } + /* { dg-begin-multiline-output "" } + return callee_3 (first, second, third); + ^~~~~~ + | + int + { dg-end-multiline-output "" } */ + /* { dg-message "expected 'const char \\*' but argument is of type 'int'" "" { target *-*-* } callee_3 } */ + /* { dg-begin-multiline-output "" } + static int callee_3 (int one, const char *two, float three) + ~~~~~~~~~~~~^~~ + { dg-end-multiline-output "" } */ +} + +/* Trivial decl, with argname. */ + +extern int callee_4 (int one, float two, float three); /* { dg-line callee_4 } */ + +int test_4 (int first, const char *second, float third) +{ + return callee_4 (first, second, third); /* { dg-error "incompatible type for argument 2 of 'callee_4'" } */ + /* { dg-begin-multiline-output "" } + return callee_4 (first, second, third); + ^~~~~~ + | + const char * + { dg-end-multiline-output "" } */ + /* { dg-message "expected 'float' but argument is of type 'const char \\*'" "" { target *-*-* } callee_4 } */ + /* { dg-begin-multiline-output "" } + extern int callee_4 (int one, float two, float three); + ~~~~~~^~~ + { dg-end-multiline-output "" } */ +} + +/* Trivial decl, without argname. */ + +extern int callee_5 (int, float, float); /* { dg-line callee_5 } */ + +int test_5 (int first, const char *second, float third) +{ + return callee_5 (first, second, third); /* { dg-error "incompatible type for argument 2 of 'callee_5'" } */ + /* { dg-begin-multiline-output "" } + return callee_5 (first, second, third); + ^~~~~~ + | + const char * + { dg-end-multiline-output "" } */ + /* { dg-message "expected 'float' but argument is of type 'const char \\*'" "" { target *-*-* } callee_5 } */ + /* { dg-begin-multiline-output "" } + extern int callee_5 (int, float, float); + ^~~~~ + { dg-end-multiline-output "" } */ +} + +/* Callback with name. */ + +extern int callee_6 (int one, int (*two)(int, int), float three); /* { dg-line callee_6 } */ + +int test_6 (int first, int second, float third) +{ + return callee_6 (first, second, third); /* { dg-error "passing argument 2 of 'callee_6' makes pointer from integer without a cast" } */ + /* { dg-begin-multiline-output "" } + return callee_6 (first, second, third); + ^~~~~~ + | + int + { dg-end-multiline-output "" } */ + /* { dg-message " expected 'int \\(\\*\\)\\(int, int\\)' but argument is of type 'int'" "" { target *-*-* } callee_6 } */ + /* { dg-begin-multiline-output "" } + extern int callee_6 (int one, int (*two)(int, int), float three); + ~~~~~~^~~~~~~~~~~~~~ + { dg-end-multiline-output "" } */ +} + +/* Callback without name. */ + +extern int callee_7 (int one, int (*)(int, int), float three); /* { dg-line callee_7 } */ + +int test_7 (int first, int second, float third) +{ + return callee_7 (first, second, third); /* { dg-error "passing argument 2 of 'callee_7' makes pointer from integer without a cast" } */ + /* { dg-begin-multiline-output "" } + return callee_7 (first, second, third); + ^~~~~~ + | + int + { dg-end-multiline-output "" } */ + /* { dg-message " expected 'int \\(\\*\\)\\(int, int\\)' but argument is of type 'int'" "" { target *-*-* } callee_7 } */ + /* { dg-begin-multiline-output "" } + extern int callee_7 (int one, int (*)(int, int), float three); + ^~~~~~~~~~~~~~~~~ + { dg-end-multiline-output "" } */ +} + +/* -Wincompatible-pointer-types for a parameter. */ + +extern int callee_8 (int one, float *two, float (three)); /* { dg-line callee_8 } */ + +int test_8 (int first, int *second, float third) +{ + return callee_8 (first, second, third); /* { dg-warning "passing argument 2 of 'callee_8' from incompatible pointer type" } */ + /* { dg-begin-multiline-output "" } + return callee_8 (first, second, third); + ^~~~~~ + | + int * + { dg-end-multiline-output "" } */ + /* { dg-message "expected 'float \\*' but argument is of type 'int \\*'" "" { target *-*-* } callee_8 } */ + /* { dg-begin-multiline-output "" } + extern int callee_8 (int one, float *two, float (three)); + ~~~~~~~^~~ + { dg-end-multiline-output "" } */ +} + +/* -Wpointer-sign for a parameter. */ + +extern int callee_9 (int one, int *two, float (three)); /* { dg-line callee_9 } */ + +int test_9 (int first, unsigned int *second, float third) +{ + return callee_9 (first, second, third); /* { dg-warning "pointer targets in passing argument 2 of 'callee_9' differ in signedness" } */ + /* { dg-begin-multiline-output "" } + return callee_9 (first, second, third); + ^~~~~~ + | + unsigned int * + { dg-end-multiline-output "" } */ + /* { dg-message "expected 'int \\*' but argument is of type 'unsigned int \\*'" "" { target *-*-* } callee_9 } */ + /* { dg-begin-multiline-output "" } + extern int callee_9 (int one, int *two, float (three)); + ~~~~~^~~ + { dg-end-multiline-output "" } */ +} diff --git a/gcc/testsuite/gcc.dg/param-type-mismatch.c b/gcc/testsuite/gcc.dg/param-type-mismatch.c index 9e654a9e9c6..f6d68749cd8 100644 --- a/gcc/testsuite/gcc.dg/param-type-mismatch.c +++ b/gcc/testsuite/gcc.dg/param-type-mismatch.c @@ -1,4 +1,4 @@ -/* { dg-options "-fdiagnostics-show-caret -Wpointer-sign" } */ +/* { dg-options "-fpermissive -fdiagnostics-show-caret -Wpointer-sign" } */ /* A collection of calls where argument 2 is of the wrong type. */ diff --git a/gcc/testsuite/gcc.dg/pr61162-2.c b/gcc/testsuite/gcc.dg/pr61162-2.c index 4aa8493d1a3..a7d0b45a310 100644 --- a/gcc/testsuite/gcc.dg/pr61162-2.c +++ b/gcc/testsuite/gcc.dg/pr61162-2.c @@ -1,6 +1,6 @@ /* PR c/61162 */ /* { dg-do compile } */ -/* { dg-options "-Wc++-compat -Wpointer-sign -Wpedantic" } */ +/* { dg-options "-fpermissive -Wc++-compat -Wpointer-sign -Wpedantic" } */ enum e { A }; struct s { int a; }; diff --git a/gcc/testsuite/gcc.dg/pr61162-3.c b/gcc/testsuite/gcc.dg/pr61162-3.c new file mode 100644 index 00000000000..c48625797d8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr61162-3.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ + +int +fn4 (int *a) +{ + return a; /* { dg-error "10:returning 'int \\*' from a function with return type 'int' makes integer from pointer without a cast" } */ +} + +int * +fn5 (int a) +{ + return a; /* { dg-error "10:returning 'int' from a function with return type 'int \\*' makes pointer from integer without a cast" } */ +} diff --git a/gcc/testsuite/gcc.dg/spec-barrier-3.c b/gcc/testsuite/gcc.dg/spec-barrier-3.c index 3ed4d39061a..0940a2105c6 100644 --- a/gcc/testsuite/gcc.dg/spec-barrier-3.c +++ b/gcc/testsuite/gcc.dg/spec-barrier-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-Wpedantic" } */ +/* { dg-options "-fpermissive -Wpedantic" } */ /* __builtin_speculation_safe_value returns a value with the same type as its first argument. There should be a warning if that isn't diff --git a/gcc/testsuite/gcc.dg/spec-barrier-3a.c b/gcc/testsuite/gcc.dg/spec-barrier-3a.c new file mode 100644 index 00000000000..ee98ad0ca50 --- /dev/null +++ b/gcc/testsuite/gcc.dg/spec-barrier-3a.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-Wpedantic" } */ + +/* __builtin_speculation_safe_value returns a value with the same type + as its first argument. There should be an error if that isn't + type-compatible with the use. */ +int * +f (int x) +{ + return __builtin_speculation_safe_value (x); /* { dg-error "returning 'int' from a function with return type 'int \\*' makes pointer from integer without a cast" } */ +} + +/* { dg-prune-output "this target does not define a speculation barrier;" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/acle/memtag_2.c b/gcc/testsuite/gcc.target/aarch64/acle/memtag_2.c index fcab05b7abe..806e0750fd1 100644 --- a/gcc/testsuite/gcc.target/aarch64/acle/memtag_2.c +++ b/gcc/testsuite/gcc.target/aarch64/acle/memtag_2.c @@ -2,7 +2,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O3 -march=armv8.5-a+memtag" } */ +/* { dg-options "-fpermissive -O3 -march=armv8.5-a+memtag" } */ #include "arm_acle.h" @@ -67,4 +67,4 @@ test_memtag_error_argument (void) __arm_mte_ptrdiff(no_decl2, 0); /* { dg-error {} } */ __arm_mte_ptrdiff(0); /* { dg-error {} } */ __arm_mte_ptrdiff(); /* { dg-error {} } */ -} \ No newline at end of file +} diff --git a/gcc/testsuite/gcc.target/aarch64/acle/memtag_2a.c b/gcc/testsuite/gcc.target/aarch64/acle/memtag_2a.c new file mode 100644 index 00000000000..16db40df663 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/acle/memtag_2a.c @@ -0,0 +1,71 @@ +/* Test the MEMTAG intrinsic qualifier warnings and argument errors. */ + +/* { dg-do compile } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-O3 -march=armv8.5-a+memtag" } */ + +#include "arm_acle.h" + +void +test_memtag_warning_return_qualifier (void) +{ + const char *c; + volatile char *v; + char *n; + int *i; + int64_t d; + + v = __arm_mte_get_tag(c); /* { dg-warning {assignment} } */ + n = __arm_mte_get_tag(c); /* { dg-warning {assignment} } */ + i = __arm_mte_get_tag(c); /* { dg-warning {assignment} } */ + c = __arm_mte_get_tag(v); /* { dg-warning {assignment} } */ + n = __arm_mte_get_tag(v); /* { dg-warning {assignment} } */ + + i = __arm_mte_create_random_tag (c, 0); /* { dg-warning {assignment} } */ + i = __arm_mte_increment_tag (c, 0); /* { dg-warning {assignment} } */ + + c = __arm_mte_get_tag(n); /* No warning. */ + d = __arm_mte_ptrdiff(c, i); /* No warning. */ +} + +void +test_memtag_warning_argument (void) +{ + const char *c; + __arm_mte_exclude_tag(0, 0); /* No warning. */ + __arm_mte_create_random_tag (0, 0); /* No warning. */ + __arm_mte_set_tag(0); /* No warning. */ + __arm_mte_get_tag(0); /* No warning. */ + __arm_mte_increment_tag (0, 15); /* No warning. */ + __arm_mte_ptrdiff(c, 0); /* No warning. */ + __arm_mte_ptrdiff(0, c); /* No warning. */ +} + +void +test_memtag_error_argument (void) +{ + /* Produce errors properly for invalid arguments. */ + __arm_mte_exclude_tag(no_decl, 0); /* { dg-error {} } */ + __arm_mte_exclude_tag(); /* { dg-error {} } */ + __arm_mte_ptrdiff(no_decl2, 0); /* { dg-error {} } */ + __arm_mte_ptrdiff(0); /* { dg-error {} } */ + __arm_mte_ptrdiff(); /* { dg-error {} } */ + + const char *c; + uint64_t i; + __arm_mte_exclude_tag(i, 0); /* { dg-error {argument} } */ + __arm_mte_create_random_tag (i, 0); /* { dg-error {argument} } */ + __arm_mte_set_tag(i); /* { dg-error {argument} } */ + __arm_mte_get_tag(i); /* { dg-error {argument} } */ + __arm_mte_increment_tag (i, 15); /* { dg-error {argument} } */ + __arm_mte_ptrdiff(c, i); /* { dg-error {argument} } */ + __arm_mte_ptrdiff(i, c); /* { dg-error {argument} } */ + + __arm_mte_exclude_tag(1, 0); /* { dg-error {argument} } */ + __arm_mte_create_random_tag (1, 0); /* { dg-error {argument} } */ + __arm_mte_set_tag(1); /* { dg-error {argument} } */ + __arm_mte_get_tag(1); /* { dg-error {argument} } */ + __arm_mte_increment_tag (1, 15); /* { dg-error {argument} } */ + __arm_mte_ptrdiff(c, 1); /* { dg-error {argument} } */ + __arm_mte_ptrdiff(1, c); /* { dg-error {argument} } */ +} diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_3.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_3.c index 770203f64c8..34166395ecc 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_3.c @@ -13,6 +13,6 @@ f1 (svbool_t pg, signed char *s8_ptr, svint8_t s8) svld1_vnum (pg, s8_ptr, 0, 0); /* { dg-error {too many arguments to function 'svld1_vnum'} } */ svld1_vnum (0, s8_ptr, 0); /* { dg-error {passing 'int' to argument 1 of 'svld1_vnum', which expects 'svbool_t'} } */ svld1_vnum (pg, 0, 0); /* { dg-error {passing 'int' to argument 2 of 'svld1_vnum', which expects a pointer type} } */ - svld1_vnum (pg, s8_ptr, s8_ptr); /* { dg-warning "passing argument 3 of 'svld1_vnum_s8' makes integer from pointer without a cast" } */ + svld1_vnum (pg, s8_ptr, s8_ptr); /* { dg-error "passing argument 3 of 'svld1_vnum_s8' makes integer from pointer without a cast" } */ svld1_vnum (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svld1_vnum', which expects 'int64_t'} } */ } diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_2.c index c718b3ee04e..669f8844bc1 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_2.c @@ -14,7 +14,7 @@ f1 (svbool_t pg, signed char *s8_ptr, void *void_ptr, struct s *s_ptr, svst1_vnum (0, s8_ptr, 0, s8); /* { dg-error {passing 'int' to argument 1 of 'svst1_vnum', which expects 'svbool_t'} } */ svst1_vnum (pg, s8_ptr, pg, s8); /* { dg-error {passing 'svbool_t' to argument 3 of 'svst1_vnum', which expects 'int64_t'} } */ svst1_vnum (pg, s8_ptr, s8, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svst1_vnum', which expects 'int64_t'} } */ - svst1_vnum (pg, s8_ptr, void_ptr, s8); /* { dg-warning "passing argument 3 of 'svst1_vnum_s8' makes integer from pointer without a cast" } */ + svst1_vnum (pg, s8_ptr, void_ptr, s8); /* { dg-error "passing argument 3 of 'svst1_vnum_s8' makes integer from pointer without a cast" } */ svst1_vnum (pg, void_ptr, 0, 0); /* { dg-error {passing 'int' to argument 4 of 'svst1_vnum', which expects an SVE vector type} } */ svst1_vnum (pg, void_ptr, 0, pg); /* { dg-error {'svst1_vnum' has no form that takes 'svbool_t' arguments} } */ svst1_vnum (pg, 0, 0, s8); diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c index 89528237522..29f4510c49b 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c @@ -26,7 +26,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svst1_scatter_index (pg, cf32_ptr, s32, f32); /* { dg-warning "passing argument 2 of 'svst1_scatter_s32index_f32' from incompatible pointer type" } */ svst1_scatter_index (pg, s, s32, s32); /* { dg-error {passing 'struct s' to argument 2 of 'svst1_scatter_index', which expects a vector or pointer base address} } */ - svst1_scatter_index (pg, u32, void_ptr, s32); /* { dg-warning "passing argument 3 of 'svst1_scatter_u32base_index_s32' makes integer from pointer without a cast" } */ + svst1_scatter_index (pg, u32, void_ptr, s32); /* { dg-error "passing argument 3 of 'svst1_scatter_u32base_index_s32' makes integer from pointer without a cast" } */ svst1_scatter_index (pg, u32, pg, s32); /* { dg-error {passing 'svbool_t' to argument 3 of 'svst1_scatter_index', which expects 'int64_t'} } */ svst1_scatter_index (pg, u32, s32, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svst1_scatter_index', which expects 'int64_t'} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c index 5e31362c412..ab718b5eeee 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c @@ -28,7 +28,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svstnt1_scatter_index (pg, cf64_ptr, s64, f64); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_s64index_f64' from incompatible pointer type" } */ svstnt1_scatter_index (pg, s, s64, s64); /* { dg-error {passing 'struct s' to argument 2 of 'svstnt1_scatter_index', which expects a vector or pointer base address} } */ - svstnt1_scatter_index (pg, u32, void_ptr, s32); /* { dg-warning "passing argument 3 of 'svstnt1_scatter_u32base_index_s32' makes integer from pointer without a cast" } */ + svstnt1_scatter_index (pg, u32, void_ptr, s32); /* { dg-error "passing argument 3 of 'svstnt1_scatter_u32base_index_s32' makes integer from pointer without a cast" } */ svstnt1_scatter_index (pg, u32, pg, s32); /* { dg-error {passing 'svbool_t' to argument 3 of 'svstnt1_scatter_index', which expects 'int64_t'} } */ svstnt1_scatter_index (pg, u32, s32, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_index', which expects 'int64_t'} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c index 4854818cae6..311b1744c91 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c @@ -26,7 +26,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svst1_scatter_offset (pg, cf32_ptr, s32, f32); /* { dg-warning "passing argument 2 of 'svst1_scatter_s32offset_f32' from incompatible pointer type" } */ svst1_scatter_offset (pg, s, s32, s32); /* { dg-error {passing 'struct s' to argument 2 of 'svst1_scatter_offset', which expects a vector or pointer base address} } */ - svst1_scatter_offset (pg, u32, void_ptr, s32); /* { dg-warning "passing argument 3 of 'svst1_scatter_u32base_offset_s32' makes integer from pointer without a cast" } */ + svst1_scatter_offset (pg, u32, void_ptr, s32); /* { dg-error "passing argument 3 of 'svst1_scatter_u32base_offset_s32' makes integer from pointer without a cast" } */ svst1_scatter_offset (pg, u32, pg, s32); /* { dg-error {passing 'svbool_t' to argument 3 of 'svst1_scatter_offset', which expects 'int64_t'} } */ svst1_scatter_offset (pg, u32, s32, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svst1_scatter_offset', which expects 'int64_t'} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c index 100624b7b03..5b251127a47 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c @@ -28,7 +28,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svstnt1_scatter_offset (pg, cf32_ptr, u32, f32); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_u32offset_f32' from incompatible pointer type" } */ svstnt1_scatter_offset (pg, s, u32, s32); /* { dg-error {passing 'struct s' to argument 2 of 'svstnt1_scatter_offset', which expects a vector or pointer base address} } */ - svstnt1_scatter_offset (pg, u32, void_ptr, s32); /* { dg-warning "passing argument 3 of 'svstnt1_scatter_u32base_offset_s32' makes integer from pointer without a cast" } */ + svstnt1_scatter_offset (pg, u32, void_ptr, s32); /* { dg-error "passing argument 3 of 'svstnt1_scatter_u32base_offset_s32' makes integer from pointer without a cast" } */ svstnt1_scatter_offset (pg, u32, pg, s32); /* { dg-error {passing 'svbool_t' to argument 3 of 'svstnt1_scatter_offset', which expects 'int64_t'} } */ svstnt1_scatter_offset (pg, u32, s32, s32); /* { dg-error {passing 'svint32_t' to argument 3 of 'svstnt1_scatter_offset', which expects 'int64_t'} } */ From patchwork Mon Nov 13 13:11:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 164474 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b909:0:b0:403:3b70:6f57 with SMTP id t9csp1190191vqg; Mon, 13 Nov 2023 05:11:44 -0800 (PST) X-Google-Smtp-Source: AGHT+IE9acSkrA+YfHrTllPWPvFYghN5zI3T+3D1aYcVRpr4aRXFC/aoKxzz4IcoFRskwt632bIa X-Received: by 2002:a05:620a:2914:b0:778:b72d:6518 with SMTP id m20-20020a05620a291400b00778b72d6518mr7752931qkp.35.1699881104359; Mon, 13 Nov 2023 05:11:44 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1699881104; cv=pass; d=google.com; s=arc-20160816; b=bySD+6HkxsSD0iwwTaQj1VP/n0PumnCYcGxxOB+FcLsqkcgHLlqwHrp74xrcUHb1O0 MljFM+ErwOvldnoiUu0bVLEycDUR1nVWsk+ZAUq6OVlIoxAtSSDg8bcXkrTn/GX4W6rM gLJLJ5grxJ10diq8UFZUnxzW5gNYqprxKo7EFvh0y7kieTm/C8VMQ6qhTO2bcE+s/YlA BNmEg5FXI02a+Nh/gGiheJHTech3x39qiBfyHvAiQZbb0jOJBS80BdVt2XzjncYFAW5u SVn7v0UsUyxtI06DW2XNp2j4yjFXIwpk7r0zLEGdC+uVSDkKlyMlRVoSd/qc9dRyUCum OC7A== ARC-Message-Signature: i=2; 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:content-transfer-encoding :mime-version:user-agent:date:references:message-id:in-reply-to :subject:to:from:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=953E8EgiO8wK06j2cGoNse4m69kMqmP1W4vlMj01P2w=; fh=hPrbWPhweUx4V0GV9uXJqbyAzg2ABmTz7kczrAQqMmM=; b=V9KryDTvxOX/39QIQdFoIn+5HPw0U1h2tmog/TnlFgqsl8cTkUsRCW1miMD0mfotcd NmQQpQraGT8ywLXAncGjrKwURppjU9tI2OOWu8WGtXQS94O0dHDj3cit1wt27jgE0sgF P6DWBKFVIZelfSBWf7G490qSALvZP6nuEHDgXpys7TB6XiApUQlHm32IiO8Um3t6UDZc FVZdEionLUombDkFk7f1VTkNTteGdF6Qd8k01l9U+t7xZdo5hAThzlC8hkeE28eTjAPA pSMxWvhQSxpwybtbSH57WPU6kvDFZY/K0mXqzSb2/JegW7MRFPSTS4IH6d65x1zZUP70 /BFg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Cpr8Cr0o; arc=pass (i=1); 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=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id o14-20020a05620a2a0e00b007742b023d3esi4858399qkp.99.2023.11.13.05.11.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Nov 2023 05:11:44 -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=@redhat.com header.s=mimecast20190719 header.b=Cpr8Cr0o; arc=pass (i=1); 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=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B6BF83883008 for ; Mon, 13 Nov 2023 13:11:36 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 2C4A73861894 for ; Mon, 13 Nov 2023 13:11:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2C4A73861894 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2C4A73861894 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881071; cv=none; b=j000P9hY4YX8S8Gd5dxpBuEVO8uLd48cStz7gUoroJXuDA5/tcZTQfKGL0nmmLpYCkW0LM0CyKXEpJXds6oulPYQFvBJ2uZD+RGyPF5MlB3i2tdAqXDg4J+I3WpZ6wx+yUiRtKiF+JGDiF/qcgpjEM2vSpciVv7cYHfV9WaF04U= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881071; c=relaxed/simple; bh=+NY3tomtrPc/AVAMP3vKI/frnRGUG8l9a+XKdPm1mjE=; h=DKIM-Signature:From:To:Subject:Message-ID:Date:MIME-Version; b=FG/GL9zpyRrJNfBMhP04HUWvbKX+iJ1hcL0RC1eZOKAo8ayk8G7BhaYx2NKeBU7I0nZsnd26QtoWU6cys+aorgMnBKRY/ioJR795NFZ/Dy7z15JZrWhIA/GWSEWko9RpX0a/kf+5Xs4WiDVTFlUeDhN/iM5cPfVmKq5lXltBfXo= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699881068; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=953E8EgiO8wK06j2cGoNse4m69kMqmP1W4vlMj01P2w=; b=Cpr8Cr0oikhzOIimjNbNCwpjCc4u7gwAOagbT2bcY4zG81qT3JVuWl3sSniK5E3rYcMt/o K1fEqEaHVhVL84qWcbpLPRSVr8Ypplx1GFz6uPRvKdCoYvOeuPBtBy9Y9NRLcodqUjWfcX YURNGAZ+9fy09KBbzd3qdwnIA3lBjKE= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-434-EKAIlt2lP_i48Oaghg8QbA-1; Mon, 13 Nov 2023 08:11:07 -0500 X-MC-Unique: EKAIlt2lP_i48Oaghg8QbA-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 7A7522810D49 for ; Mon, 13 Nov 2023 13:11:07 +0000 (UTC) Received: from oldenburg.str.redhat.com (unknown [10.2.16.3]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B936B3D3 for ; Mon, 13 Nov 2023 13:11:06 +0000 (UTC) From: Florian Weimer To: gcc-patches@gcc.gnu.org Subject: [PATCH 4/6] c: Turn -Wimplicit-int into a pedpermerror In-Reply-To: Message-ID: <309d163cd3eff4b3fbe9be5198443ccf231d65ba.1699879818.git.fweimer@redhat.com> References: X-From-Line: 309d163cd3eff4b3fbe9be5198443ccf231d65ba Mon Sep 17 00:00:00 2001 Date: Mon, 13 Nov 2023 14:11:05 +0100 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: 1782454528465777441 X-GMAIL-MSGID: 1782454528465777441 There is a missed opportunity here to issue spelling diagnostics in prototype declarations (e.g., for “extern int foo (int32t);”). gcc/ * doc/invoke.texi (Warning Options): Document changes. gcc/c/ * c-decl.cc (warn_defaults_to): Call emit_diagnostic_valist instead of reimplementing it. Issue a pedpermerror for C99 and later. (store_parm_decls_oldstyle): Call pedpermerror for OPT_Wimplicit_int. gcc/testsuite/ * gcc.dg/Wimplicit-int-1.c: Compile with -fpermissive due to expected warning. * gcc.dg/Wimplicit-int-4.c: Likewise. * gcc.dg/Wimplicit-int-1a.c: New test. Copied from gcc.dg/Wimplicit-int-1.c, but expect errors. * gcc.dg/Wimplicit-int-4a.c: New test. Copied from gcc.dg/Wimplicit-int-4.c, but expect errors. * gcc.dg/gnu23-attr-syntax-2.c: Compile with -fpermissive due to expected implicit-int error. * gcc.dg/gnu23-attr-syntax-3.c: New test. Copied from gcc.dg/gnu23-attr-syntax-2.c, but expect an error. * gcc.dg/pr105635.c: Build with -fpermissive due to implicit int. * gcc.dg/pr105635-2.c: New test. Copied from gcc.dg/pr105635.c. Expect implicit int error. * gcc.dg/noncompile/pr79758.c: Build with -fpermissive due to implicit int. * gcc.dg/noncompile/pr79758-2.c: New test. Copied from gcc.dg/noncompile/pr79758.c. Expect implicit int error. --- gcc/c/c-decl.cc | 20 +++++++++++--------- gcc/doc/invoke.texi | 7 +++++-- gcc/testsuite/gcc.dg/Wimplicit-int-1.c | 2 +- gcc/testsuite/gcc.dg/Wimplicit-int-1a.c | 11 +++++++++++ gcc/testsuite/gcc.dg/Wimplicit-int-4.c | 2 +- gcc/testsuite/gcc.dg/Wimplicit-int-4a.c | 11 +++++++++++ gcc/testsuite/gcc.dg/gnu23-attr-syntax-2.c | 2 +- gcc/testsuite/gcc.dg/gnu23-attr-syntax-3.c | 17 +++++++++++++++++ gcc/testsuite/gcc.dg/noncompile/pr79758-2.c | 6 ++++++ gcc/testsuite/gcc.dg/noncompile/pr79758.c | 1 + gcc/testsuite/gcc.dg/pr105635-2.c | 11 +++++++++++ gcc/testsuite/gcc.dg/pr105635.c | 2 +- 12 files changed, 77 insertions(+), 15 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/Wimplicit-int-1a.c create mode 100644 gcc/testsuite/gcc.dg/Wimplicit-int-4a.c create mode 100644 gcc/testsuite/gcc.dg/gnu23-attr-syntax-3.c create mode 100644 gcc/testsuite/gcc.dg/noncompile/pr79758-2.c create mode 100644 gcc/testsuite/gcc.dg/pr105635-2.c diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index e8387bfa984..f787d213cfe 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -6577,16 +6577,18 @@ warn_defaults_to (location_t location, int opt, const char *gmsgid, ...) { diagnostic_info diagnostic; va_list ap; - rich_location richloc (line_table, location); + diagnostic_t kind; va_start (ap, gmsgid); - diagnostic_set_info (&diagnostic, gmsgid, &ap, &richloc, - flag_isoc99 ? DK_PEDWARN : DK_WARNING); - diagnostic.option_index = opt; - diagnostic_report_diagnostic (global_dc, &diagnostic); + if (flag_isoc99 && !flag_pedantic_errors && opt) + kind = DK_PERMERROR; + else if (flag_isoc99) + kind = DK_PEDWARN; + else + kind = DK_WARNING; + emit_diagnostic_valist (kind, location, opt, gmsgid, &ap); va_end (ap); } - /* Returns the smallest location != UNKNOWN_LOCATION in LOCATIONS, considering only those c_declspec_words found in LIST, which must be terminated by cdw_number_of_elements. */ @@ -10635,9 +10637,9 @@ store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info) warn_if_shadowing (decl); if (flag_isoc99) - pedwarn (DECL_SOURCE_LOCATION (decl), - OPT_Wimplicit_int, "type of %qD defaults to %", - decl); + pedpermerror (DECL_SOURCE_LOCATION (decl), + OPT_Wimplicit_int, "type of %qD defaults to %", + decl); else warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wmissing_parameter_type, diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 1a15af29f01..3a1b9b00f24 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -6180,6 +6180,7 @@ that have their own flag: @gccoptlist{ -Wimplicit-function-declaration @r{(C)} +-Wimplicit-int @r{(C)} -Wint-conversion @r{(C)} -Wnarrowing @r{(C++)} } @@ -6851,8 +6852,10 @@ This warning is enabled by @option{-Wall} in C++. @opindex Wno-implicit-int @item -Wno-implicit-int @r{(C and Objective-C only)} This option controls warnings when a declaration does not specify a type. -This warning is enabled by default in C99 and later dialects of C, -and also by @option{-Wall}. +This warning is enabled by default, as an error, in C99 and later +dialects of C, and also by @option{-Wall}. The error can be downgraded +to a warning using @option{-fpermissive} (along with certain other +errors), or for this error alone, with @option{-Wno-error=implicit-int}. This warning is upgraded to an error by @option{-pedantic-errors}. diff --git a/gcc/testsuite/gcc.dg/Wimplicit-int-1.c b/gcc/testsuite/gcc.dg/Wimplicit-int-1.c index 4a96e8f505d..fc7726c517e 100644 --- a/gcc/testsuite/gcc.dg/Wimplicit-int-1.c +++ b/gcc/testsuite/gcc.dg/Wimplicit-int-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-fpermissive" } */ static l; /* { dg-warning "type defaults to" } */ diff --git a/gcc/testsuite/gcc.dg/Wimplicit-int-1a.c b/gcc/testsuite/gcc.dg/Wimplicit-int-1a.c new file mode 100644 index 00000000000..ef1835e2d3a --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wimplicit-int-1a.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "" } */ + +static l; /* { dg-error "type defaults to" } */ + +foo (a) /* { dg-error "return type defaults to" } */ +/* { dg-error "type of .a. defaults to .int." "type" { target *-*-* } .-1 } */ +{ + auto p; /* { dg-error "type defaults to" } */ + typedef bar; /* { dg-error "type defaults to" } */ +} diff --git a/gcc/testsuite/gcc.dg/Wimplicit-int-4.c b/gcc/testsuite/gcc.dg/Wimplicit-int-4.c index c9c6e8e5e95..99c61a76ecf 100644 --- a/gcc/testsuite/gcc.dg/Wimplicit-int-4.c +++ b/gcc/testsuite/gcc.dg/Wimplicit-int-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-Wno-implicit -Wimplicit-int" } */ +/* { dg-options "-fpermissive -Wno-implicit -Wimplicit-int" } */ static l; /* { dg-warning "type defaults to" } */ diff --git a/gcc/testsuite/gcc.dg/Wimplicit-int-4a.c b/gcc/testsuite/gcc.dg/Wimplicit-int-4a.c new file mode 100644 index 00000000000..920a088f02b --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wimplicit-int-4a.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-Wno-implicit -Wimplicit-int" } */ + +static l; /* { dg-error "type defaults to" } */ + +foo (a) /* { dg-error "return type defaults to" } */ +/* { dg-error "type of .a. defaults to .int." "type" { target *-*-* } .-1 } */ +{ + auto p; /* { dg-error "type defaults to" } */ + typedef bar; /* { dg-error "type defaults to" } */ +} diff --git a/gcc/testsuite/gcc.dg/gnu23-attr-syntax-2.c b/gcc/testsuite/gcc.dg/gnu23-attr-syntax-2.c index ba60f7a095a..8943534f2b2 100644 --- a/gcc/testsuite/gcc.dg/gnu23-attr-syntax-2.c +++ b/gcc/testsuite/gcc.dg/gnu23-attr-syntax-2.c @@ -1,7 +1,7 @@ /* Test C23 attribute syntax. Invalid uses of attributes with GNU C features. */ /* { dg-do compile } */ -/* { dg-options "-std=gnu23 -w" } */ +/* { dg-options "-fpermissive -std=gnu23 -w" } */ /* Attributes cannot be used as prefix attributes on old-style parameter declarations or on function declarators with identifier diff --git a/gcc/testsuite/gcc.dg/gnu23-attr-syntax-3.c b/gcc/testsuite/gcc.dg/gnu23-attr-syntax-3.c new file mode 100644 index 00000000000..d73d6a3cfa8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gnu23-attr-syntax-3.c @@ -0,0 +1,17 @@ +/* Test C23 attribute syntax. Invalid uses of attributes with GNU C + features. Non-permissive variant. */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu23 -w" } */ + +/* Attributes cannot be used as prefix attributes on old-style + parameter declarations or on function declarators with identifier + lists (removed from C23). */ + +void (*f(a, b) [[]])() int a, b; { } /* { dg-error "expected" } */ + +void f(x, y) int x; [[]] int y; { } /* { dg-error "expected" } */ +/* { dg-error "type of 'y' defaults to 'int'" "" { target *-*-* } .-1 } */ + +/* Nonempty attributes cannot be used as postfix attributes with + __auto_type. */ +__auto_type [[gnu::no_such_attr]] x = 1; /* { dg-error "'__auto_type' followed by" } */ diff --git a/gcc/testsuite/gcc.dg/noncompile/pr79758-2.c b/gcc/testsuite/gcc.dg/noncompile/pr79758-2.c new file mode 100644 index 00000000000..e6a27f952ef --- /dev/null +++ b/gcc/testsuite/gcc.dg/noncompile/pr79758-2.c @@ -0,0 +1,6 @@ +/* PR c/79758 */ +/* { dg-do compile } */ + +void fn1 (int[a]) { }; /* { dg-error "undeclared here" } */ +void fn1 (b) { }; /* { dg-error "redefinition" } */ +/* { dg-error "defaults to 'int'" "" { target *-*-* } .-1 } */ diff --git a/gcc/testsuite/gcc.dg/noncompile/pr79758.c b/gcc/testsuite/gcc.dg/noncompile/pr79758.c index a31216068f0..e42a44380fa 100644 --- a/gcc/testsuite/gcc.dg/noncompile/pr79758.c +++ b/gcc/testsuite/gcc.dg/noncompile/pr79758.c @@ -1,5 +1,6 @@ /* PR c/79758 */ /* { dg-do compile } */ +/* { dg-additional-options "-fpermissive" } */ void fn1 (int[a]) { }; /* { dg-error "undeclared here" } */ void fn1 (b) { }; /* { dg-error "redefinition" } */ diff --git a/gcc/testsuite/gcc.dg/pr105635-2.c b/gcc/testsuite/gcc.dg/pr105635-2.c new file mode 100644 index 00000000000..807eef0b7cd --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr105635-2.c @@ -0,0 +1,11 @@ +/* PR c/105635 */ +/* { dg-do compile } */ +/* { dg-options "-Wall" } */ + +void foo (int, int[*]); /* { dg-message "previous declaration of 'foo' with type" } */ + +foo (int x, int y) /* { dg-error "return type defaults to 'int'" } */ +{ /* { dg-warning "conflicting types for 'foo'" "" { target *-*-* } .-1 } */ + /* { dg-message "declared here" "" { target *-*-* } .-2 } */ + return (x >= 0) != (y < 0); /* { dg-warning "'return' with a value, in function returning void" } */ +} diff --git a/gcc/testsuite/gcc.dg/pr105635.c b/gcc/testsuite/gcc.dg/pr105635.c index aa02f593bfa..b98ea1b3c3b 100644 --- a/gcc/testsuite/gcc.dg/pr105635.c +++ b/gcc/testsuite/gcc.dg/pr105635.c @@ -1,6 +1,6 @@ /* PR c/105635 */ /* { dg-do compile } */ -/* { dg-options "-Wall" } */ +/* { dg-options "-fpermissive -Wall" } */ void foo (int, int[*]); /* { dg-message "previous declaration of 'foo' with type" } */ From patchwork Mon Nov 13 13:11:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 164476 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b909:0:b0:403:3b70:6f57 with SMTP id t9csp1190529vqg; Mon, 13 Nov 2023 05:12:13 -0800 (PST) X-Google-Smtp-Source: AGHT+IGfgRZL550C4DvzYxmr6CsnfCPYlXlYwcz9T/J3FA1Hudh1L1wRmcjuk+4rOnnWfze3xhuF X-Received: by 2002:a05:622a:11cc:b0:421:b37c:fdf6 with SMTP id n12-20020a05622a11cc00b00421b37cfdf6mr8693392qtk.43.1699881133193; Mon, 13 Nov 2023 05:12:13 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1699881133; cv=pass; d=google.com; s=arc-20160816; b=ZcQ8n41KP4fiaNjd5WIyBazT1Ad88F54b5S0GiqnJNAwpctLaGFvykMlT5hNrAznU5 /qoAlvA0RVLFQmKekWiTA4d3roCNGqjCHkt0+BofPd1tcL0B8oZfXSs+P5e9ugeBQlbY VvlO/c082wd62xlhoiX7sPjonmz29x/jhrf2oAFRDJ9W/yU4SFiGhiavB6Y/cY95ra4J LU2C5qqrowKRRWWRgTN0T+eRl1ZtEhUivIn8EnxsY1kX0v732NAtIIIC7N53LCmIiJiI 4FHF8Q4upgGI+A9t5c5kPjhzJeU0564Qqq6J8FtbtQaiv3i53evBk+jZYzkQVQhHVc6p /+Mg== ARC-Message-Signature: i=2; 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:mime-version:user-agent:date :references:message-id:in-reply-to:subject:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=/R1WyRYEKtD++R6AYAefvr2eevcygZxClsrrmhxSiyQ=; fh=hPrbWPhweUx4V0GV9uXJqbyAzg2ABmTz7kczrAQqMmM=; b=MAkJ9120ZBAGttp35RNKUB+jJ3LwbkY8naKGvUYZINENQoDOzzY7Z1p3+eI5U757v1 jODtfuf7k1dk/6GHTfko4++zQQXOSbwR8FJDh4WYY++Kj942KumhVg+X+4mXPMMKqOtk 5+gaQhQ3mfPclLLnhGRUyh16nuJY/4zUxIqDdQrMUpOD5wdeBTP+pnk/CXQblkj2BdpP LDLcaEdVp4Mz/uLoaIZ8B9z3XgKthexx2Fz9SKnoW+6+cGFKm/6l0xtOUdlvxQk70YkQ 2Z9nxsw2rlmGcooGX8V2c+l3wBMjKXKeRdOdEM081UVyPeqf6Q+tTLvLFFSJzhZhr5qB dXnQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=IvYopvEd; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id j7-20020ac85f87000000b00418070c227dsi4794963qta.349.2023.11.13.05.12.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Nov 2023 05:12:13 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=IvYopvEd; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 970EC388B686 for ; Mon, 13 Nov 2023 13:11:47 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 32846383DF9F for ; Mon, 13 Nov 2023 13:11:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 32846383DF9F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 32846383DF9F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881081; cv=none; b=cP9eiNKsCr8E9uZ6jr9VL3ZUOEvmaGLeTIIcXwif3sRs8716DSFu0o8F6NBE+C92NqQSxChSh0Q2+Qtl2BYr/RhnVtvEjNNf+FQTeEfKRHXdqoEuSoTR4dPpXkpsIlbz4dr7l8v0FIUPisEQes9Q3D9mmL2Tic1TNrbG+5zLijY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881081; c=relaxed/simple; bh=xRCB1DV7tY60/JTwn+qs4TAnTy0TZszn6zkDXBdN/3U=; h=DKIM-Signature:From:To:Subject:Message-ID:Date:MIME-Version; b=An1ESR70zxLmMivFapO0rceffvCuQxNnjAJf7M5j5josPAWFffGG/AhSMO06BYA1hv9AJ8SBsg6GqEEb+z2uIci0804VqyyIsf8z47nYrfH5pZJayZVGCwNfFLhYrf7+RfiNEIndElLf6woZ/JWJKlmKNIPKBM/uWYZi85QXf70= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699881078; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=/R1WyRYEKtD++R6AYAefvr2eevcygZxClsrrmhxSiyQ=; b=IvYopvEdgfQrQPWpYrrWzXDqIrwcY0SzEQqmMgvnjHrhnArMijLaON3X14/LQkScN8hqhw sMl8svY/CTcP0xWyJAKmXYJqTV91MSg087a5NeBTG72hI9bnO2xWagzQVkYeDAm/pMFt73 cmRNZsLxezKWlMRVFXG9+OyFBkb6+A4= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-496-5rH8oJOANYO3DpA5oViuPA-1; Mon, 13 Nov 2023 08:11:17 -0500 X-MC-Unique: 5rH8oJOANYO3DpA5oViuPA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 30B69280D463 for ; Mon, 13 Nov 2023 13:11:17 +0000 (UTC) Received: from oldenburg.str.redhat.com (unknown [10.2.16.3]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0476BC0FE05 for ; Mon, 13 Nov 2023 13:11:15 +0000 (UTC) From: Florian Weimer To: gcc-patches@gcc.gnu.org Subject: [PATCH 5/6] c: Turn -Wreturn-mismatch into a pedpermerror In-Reply-To: Message-ID: References: X-From-Line: f036ee4b116bfe608ff3cf094f1f42f2c8235761 Mon Sep 17 00:00:00 2001 Date: Mon, 13 Nov 2023 14:11:14 +0100 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: 1782454559148724146 X-GMAIL-MSGID: 1782454559148724146 gcc/ * doc/invoke.texi (Warning Options): Document changes. gcc/c/ * c-typeck.cc (c_finish_return): Issue a permerror for mismatching pointers to builtins. For mismatching other pointers, issue a pedpermerror. gcc/testsuite/ * gcc.dg/20030906-1.c: Compile with -fpermissive due to expected -Wreturn-mismatch error. * gcc.dg/20030906-1a.c: New test. Copied from gcc.dg/20030906-1.c. Expect the error. * gcc.dg/20030906-2.c: Compile with -fpermissive due to expected -Wreturn-mismatch error. * gcc.dg/20030906-2a.c: New test. Copied from gcc.dg/20030906-2.c. Expect the error. * gcc.dg/Wreturn-mismatch-1.c: Compile with -fpermissive due to expected -Wreturn-mismatch error. * gcc.dg/Wreturn-mismatch-1a.c: New test. Copied from gcc.dg/Wreturn-mismatch-1.c. Expect the error. * gcc.dg/Wreturn-mismatch-2.c: Compile with -fpermissive due to expected -Wreturn-mismatch error. * gcc.dg/Wreturn-mismatch-2a.c: New test. Copied from gcc.dg/Wreturn-mismatch-2.c. Expect the error. * gcc.dg/diagnostic-range-bad-return.c: Compile with -fpermissive due to expected -Wreturn-mismatch error. * gcc.dg/diagnostic-range-bad-return-2.c: New test. Copied from gcc.dg/diagnostic-range-bad-return.c. Expect the error. * gcc.dg/pr105635-2.c: Expect -Wreturn-mismatch error. * gcc.dg/pr23075.c: Build with -fpermissive due to expected -Wreturn-mismatch error. * gcc.dg/pr23075-2.c: New test. Copied from gcc.dg/pr23075.c. Expect the error. * gcc.dg/pr29521.c: Compile with -fpermissive due to expected -Wreturn-mismatch error. * gcc.dg/pr29521-a.c: New test. Copied from gcc.dg/pr29521.c. Expect error. * gcc.dg/pr67730.c: Compile with -fpermissive due to expected -Wreturn-mismatch error. * gcc.dg/pr67730-a.c: New test. Copied from gcc.dg/pr67730-a.c. Expect error. * gcc.target/powerpc/conditional-return.c: Compile with -fpermissive due to expected -Wreturn-mismatch error. --- gcc/c/c-typeck.cc | 6 ++- gcc/doc/invoke.texi | 6 ++- gcc/testsuite/gcc.dg/20030906-1.c | 2 +- gcc/testsuite/gcc.dg/20030906-1a.c | 21 ++++++++ gcc/testsuite/gcc.dg/20030906-2.c | 2 +- gcc/testsuite/gcc.dg/20030906-2a.c | 21 ++++++++ gcc/testsuite/gcc.dg/Wreturn-mismatch-1.c | 2 +- gcc/testsuite/gcc.dg/Wreturn-mismatch-1a.c | 40 ++++++++++++++ gcc/testsuite/gcc.dg/Wreturn-mismatch-2.c | 2 +- gcc/testsuite/gcc.dg/Wreturn-mismatch-2a.c | 41 +++++++++++++++ .../gcc.dg/diagnostic-range-bad-return-2.c | 52 +++++++++++++++++++ .../gcc.dg/diagnostic-range-bad-return.c | 2 +- gcc/testsuite/gcc.dg/pr105635-2.c | 2 +- gcc/testsuite/gcc.dg/pr23075-2.c | 14 +++++ gcc/testsuite/gcc.dg/pr23075.c | 2 +- gcc/testsuite/gcc.dg/pr29521-a.c | 15 ++++++ gcc/testsuite/gcc.dg/pr29521.c | 2 +- gcc/testsuite/gcc.dg/pr67730-a.c | 11 ++++ gcc/testsuite/gcc.dg/pr67730.c | 2 +- .../gcc.target/powerpc/conditional-return.c | 2 +- 20 files changed, 234 insertions(+), 13 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/20030906-1a.c create mode 100644 gcc/testsuite/gcc.dg/20030906-2a.c create mode 100644 gcc/testsuite/gcc.dg/Wreturn-mismatch-1a.c create mode 100644 gcc/testsuite/gcc.dg/Wreturn-mismatch-2a.c create mode 100644 gcc/testsuite/gcc.dg/diagnostic-range-bad-return-2.c create mode 100644 gcc/testsuite/gcc.dg/pr23075-2.c create mode 100644 gcc/testsuite/gcc.dg/pr29521-a.c create mode 100644 gcc/testsuite/gcc.dg/pr67730-a.c diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 9d7bdbb4523..be376758b82 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -11192,7 +11192,9 @@ c_finish_return (location_t loc, tree retval, tree origtype) && valtype != NULL_TREE && TREE_CODE (valtype) != VOID_TYPE) { no_warning = true; - if (emit_diagnostic (flag_isoc99 ? DK_PEDWARN : DK_WARNING, + if (emit_diagnostic (flag_isoc99 && !flag_pedantic_errors + ? DK_PERMERROR + : flag_isoc99 ? DK_PEDWARN : DK_WARNING, loc, OPT_Wreturn_mismatch, "% with no value," " in function returning non-void")) @@ -11205,7 +11207,7 @@ c_finish_return (location_t loc, tree retval, tree origtype) current_function_returns_null = 1; bool warned_here; if (TREE_CODE (TREE_TYPE (retval)) != VOID_TYPE) - warned_here = pedwarn + warned_here = pedpermerror (xloc, OPT_Wreturn_mismatch, "% with a value, in function returning void"); else diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 3a1b9b00f24..6635a136cd9 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -6183,6 +6183,7 @@ that have their own flag: -Wimplicit-int @r{(C)} -Wint-conversion @r{(C)} -Wnarrowing @r{(C++)} +-Wreturn-mismatch @r{(C)} } The @option{-fpermissive} option is the default for historic C language @@ -7373,7 +7374,10 @@ Attempting to use the return value of a non-@code{void} function other than @code{main} that flows off the end by reaching the closing curly brace that terminates the function is undefined. -This warning is specific to C and enabled by default. +This warning is specific to C and enabled by default. In C99 and later +language dialects, it is treated as an error. It an be downgraded +to a warning using @option{-fpermissive} (along with other warnings), +or for just this warning, with @option{-Wno-error=return-mismatch}. @opindex Wreturn-type @opindex Wno-return-type diff --git a/gcc/testsuite/gcc.dg/20030906-1.c b/gcc/testsuite/gcc.dg/20030906-1.c index c416f55ee75..6ba5b3d770a 100644 --- a/gcc/testsuite/gcc.dg/20030906-1.c +++ b/gcc/testsuite/gcc.dg/20030906-1.c @@ -2,7 +2,7 @@ Copyright (C) 2003 Free Software Foundation Inc. */ /* { dg-do compile } */ -/* { dg-options "-O -finline-functions -Wreturn-type" } */ +/* { dg-options "-fpermissive -O -finline-functions -Wreturn-type" } */ extern int i; extern int foo (void); diff --git a/gcc/testsuite/gcc.dg/20030906-1a.c b/gcc/testsuite/gcc.dg/20030906-1a.c new file mode 100644 index 00000000000..46ca1771a4d --- /dev/null +++ b/gcc/testsuite/gcc.dg/20030906-1a.c @@ -0,0 +1,21 @@ +/* Bug 9862 -- Spurious warnings with -finline-functions. + Copyright (C) 2003 Free Software Foundation Inc. */ + +/* { dg-do compile } */ +/* { dg-options "-O -finline-functions -Wreturn-type" } */ + +extern int i; +extern int foo (void); +extern int bar (void); + +int foo (void) +{ + if( i ) return 0; + else return 1; +} + +int bar (void) +{ + if( i ) return; /* { dg-error "'return' with no value, in function returning non-void" } */ + else return 1; +} diff --git a/gcc/testsuite/gcc.dg/20030906-2.c b/gcc/testsuite/gcc.dg/20030906-2.c index 1191133e6a0..a85d91f46f3 100644 --- a/gcc/testsuite/gcc.dg/20030906-2.c +++ b/gcc/testsuite/gcc.dg/20030906-2.c @@ -2,7 +2,7 @@ Copyright (C) 2003 Free Software Foundation Inc. */ /* { dg-do compile } */ -/* { dg-options "-O -finline-functions -Wreturn-type" } */ +/* { dg-options "-fpermissive -O -finline-functions -Wreturn-type" } */ extern int i; extern int foo (void); diff --git a/gcc/testsuite/gcc.dg/20030906-2a.c b/gcc/testsuite/gcc.dg/20030906-2a.c new file mode 100644 index 00000000000..a6ffbacb46d --- /dev/null +++ b/gcc/testsuite/gcc.dg/20030906-2a.c @@ -0,0 +1,21 @@ +/* Bug 9862 -- Spurious warnings with -finline-functions. + Copyright (C) 2003 Free Software Foundation Inc. */ + +/* { dg-do compile } */ +/* { dg-options "-O -finline-functions -Wreturn-type" } */ + +extern int i; +extern int foo (void); +extern int bar (void); + +int foo (void) +{ + if( i ) return; /* { dg-error "'return' with no value, in function returning non-void" } */ + else return 1; +} + +int bar (void) +{ + if( i ) return 0; + else return 1; +} diff --git a/gcc/testsuite/gcc.dg/Wreturn-mismatch-1.c b/gcc/testsuite/gcc.dg/Wreturn-mismatch-1.c index 3bad847ecf7..aef6782cbeb 100644 --- a/gcc/testsuite/gcc.dg/Wreturn-mismatch-1.c +++ b/gcc/testsuite/gcc.dg/Wreturn-mismatch-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-fpermissive" } */ void f1 (void); diff --git a/gcc/testsuite/gcc.dg/Wreturn-mismatch-1a.c b/gcc/testsuite/gcc.dg/Wreturn-mismatch-1a.c new file mode 100644 index 00000000000..70c7c9ddb86 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wreturn-mismatch-1a.c @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-options "" } */ + +void f1 (void); + +int +f2 (void) +{ + f1 (); +} + +static inline int +f3 (void) +{ + f1 (); +} + +void +f4 (void) +{ + return 1; /* { dg-error "'return' with a value\[^\n\r\]*-Wreturn-mismatch" } */ +} + +void +f5 (void) +{ + return f1 (); /* { dg-bogus "ISO C" } */ +} + +int +f6 (void) +{ + return; /* { dg-error "'return' with no value\[^\n\r\]*-Wreturn-mismatch" } */ +} + +int +f7 (void) +{ + return f1 (); /* { dg-error "void value not ignored as it ought to be" } */ +} diff --git a/gcc/testsuite/gcc.dg/Wreturn-mismatch-2.c b/gcc/testsuite/gcc.dg/Wreturn-mismatch-2.c index 49eb5a5a95c..08811024b7e 100644 --- a/gcc/testsuite/gcc.dg/Wreturn-mismatch-2.c +++ b/gcc/testsuite/gcc.dg/Wreturn-mismatch-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-Wall" } */ +/* { dg-options "-fpermissive -Wall" } */ void f1 (void); diff --git a/gcc/testsuite/gcc.dg/Wreturn-mismatch-2a.c b/gcc/testsuite/gcc.dg/Wreturn-mismatch-2a.c new file mode 100644 index 00000000000..836651ed925 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wreturn-mismatch-2a.c @@ -0,0 +1,41 @@ +/* { dg-do compile } */ +/* { dg-options "-Wall" } */ + +void f1 (void); + +int +f2 (void) +{ + f1 (); +} /* { dg-warning "control reaches end of non-void\[^\n\r\]*-Wreturn-type" } */ + +static inline int +f3 (void) +{ + f1 (); +} /* { dg-warning "no return statement in function\[^\n\r\]*-Wreturn-type" } */ + +void +f4 (void) +{ + return 1; /* { dg-error "with a value,\[^\n\r\]*-Wreturn-mismatch" } */ +} + +void +f5 (void) +{ + return f1 (); +} + +int +f6 (void) +{ + return; /* { dg-error "with no value,\[^\n\r\]*Wreturn-mismatch" } */ +} + +int +f7 (void) +{ + return f1 (); /* { dg-error "void value not ignored as it ought to be" } */ +} /* { dg-warning "control reaches end of non-void\[^\n\r\]*-Wreturn-type" } */ + diff --git a/gcc/testsuite/gcc.dg/diagnostic-range-bad-return-2.c b/gcc/testsuite/gcc.dg/diagnostic-range-bad-return-2.c new file mode 100644 index 00000000000..2fe8d341dba --- /dev/null +++ b/gcc/testsuite/gcc.dg/diagnostic-range-bad-return-2.c @@ -0,0 +1,52 @@ +/* { dg-options "-fdiagnostics-show-caret -Wreturn-local-addr" } */ + +int *address_of_local (void) +{ + int some_local; + return &some_local; /* { dg-warning "function returns address of local variable" } */ +/* { dg-begin-multiline-output "" } + return &some_local; + ^~~~~~~~~~~ + { dg-end-multiline-output "" } */ +} + +void surplus_return_when_void_1 (void) +{ + return 500; /* { dg-error "'return' with a value, in function returning void" } */ +/* { dg-begin-multiline-output "" } + return 500; + ^~~ + { dg-end-multiline-output "" } */ +/* { dg-begin-multiline-output "" } + void surplus_return_when_void_1 (void) + ^~~~~~~~~~~~~~~~~~~~~~~~~~ + { dg-end-multiline-output "" } */ +} + +void surplus_return_when_void_2 (int i, int j) +{ + return i * j; /* { dg-error "'return' with a value, in function returning void" } */ +/* { dg-begin-multiline-output "" } + return i * j; + ~~^~~ + { dg-end-multiline-output "" } */ +/* { dg-begin-multiline-output "" } + void surplus_return_when_void_2 (int i, int j) + ^~~~~~~~~~~~~~~~~~~~~~~~~~ + { dg-end-multiline-output "" } */ +} + +int missing_return_value (void) +{ + return; /* { dg-error "'return' with no value, in function returning non-void" } */ +/* { dg-begin-multiline-output "" } + return; + ^~~~~~ + { dg-end-multiline-output "" } */ +/* { dg-begin-multiline-output "" } + int missing_return_value (void) + ^~~~~~~~~~~~~~~~~~~~ + { dg-end-multiline-output "" } */ +/* TODO: ideally we'd underline the return type i.e. "int", but that + location isn't captured. */ +} diff --git a/gcc/testsuite/gcc.dg/diagnostic-range-bad-return.c b/gcc/testsuite/gcc.dg/diagnostic-range-bad-return.c index 063fdf1f636..b74481b870c 100644 --- a/gcc/testsuite/gcc.dg/diagnostic-range-bad-return.c +++ b/gcc/testsuite/gcc.dg/diagnostic-range-bad-return.c @@ -1,4 +1,4 @@ -/* { dg-options "-fdiagnostics-show-caret -Wreturn-local-addr" } */ +/* { dg-options "-fpermissive -fdiagnostics-show-caret -Wreturn-local-addr" } */ int *address_of_local (void) { diff --git a/gcc/testsuite/gcc.dg/pr105635-2.c b/gcc/testsuite/gcc.dg/pr105635-2.c index 807eef0b7cd..019dbc7e557 100644 --- a/gcc/testsuite/gcc.dg/pr105635-2.c +++ b/gcc/testsuite/gcc.dg/pr105635-2.c @@ -7,5 +7,5 @@ void foo (int, int[*]); /* { dg-message "previous declaration of 'foo' with type foo (int x, int y) /* { dg-error "return type defaults to 'int'" } */ { /* { dg-warning "conflicting types for 'foo'" "" { target *-*-* } .-1 } */ /* { dg-message "declared here" "" { target *-*-* } .-2 } */ - return (x >= 0) != (y < 0); /* { dg-warning "'return' with a value, in function returning void" } */ + return (x >= 0) != (y < 0); /* { dg-error "'return' with a value, in function returning void" } */ } diff --git a/gcc/testsuite/gcc.dg/pr23075-2.c b/gcc/testsuite/gcc.dg/pr23075-2.c new file mode 100644 index 00000000000..0702ddf1a66 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr23075-2.c @@ -0,0 +1,14 @@ +/* PR c/23075 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wreturn-type" } */ + +int +foo (void) +{ + return; /* { dg-error "with no value" } */ +} /* { dg-bogus "control reaches end" } */ + +int +bar (void) +{ +} /* { dg-warning "control reaches end" } */ diff --git a/gcc/testsuite/gcc.dg/pr23075.c b/gcc/testsuite/gcc.dg/pr23075.c index 2d85fb0650f..28baf41006a 100644 --- a/gcc/testsuite/gcc.dg/pr23075.c +++ b/gcc/testsuite/gcc.dg/pr23075.c @@ -1,6 +1,6 @@ /* PR c/23075 */ /* { dg-do compile } */ -/* { dg-options "-O2 -Wreturn-type" } */ +/* { dg-options "-O2 -fpermissive -Wreturn-type" } */ int foo (void) diff --git a/gcc/testsuite/gcc.dg/pr29521-a.c b/gcc/testsuite/gcc.dg/pr29521-a.c new file mode 100644 index 00000000000..2c6a48b7e30 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr29521-a.c @@ -0,0 +1,15 @@ +/* PR 29521 : warning for return with expression in function returning void */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +void func (void) { } + +void func2 (void) +{ + return func (); +} + +void func3 (void) +{ + return 1; /* { dg-error "'return' with a value" } */ +} diff --git a/gcc/testsuite/gcc.dg/pr29521.c b/gcc/testsuite/gcc.dg/pr29521.c index b6fb535fab7..cd431514ed2 100644 --- a/gcc/testsuite/gcc.dg/pr29521.c +++ b/gcc/testsuite/gcc.dg/pr29521.c @@ -1,6 +1,6 @@ /* PR 29521 : warning for return with expression in function returning void */ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-fpermissive" } */ void func (void) { } diff --git a/gcc/testsuite/gcc.dg/pr67730-a.c b/gcc/testsuite/gcc.dg/pr67730-a.c new file mode 100644 index 00000000000..08737cc9811 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr67730-a.c @@ -0,0 +1,11 @@ +/* PR c/67730 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +#include + +void +fn1 (void) +{ + return NULL; /* { dg-error "10:.return. with a value" } */ +} diff --git a/gcc/testsuite/gcc.dg/pr67730.c b/gcc/testsuite/gcc.dg/pr67730.c index 54d73a62cf8..cc51858c531 100644 --- a/gcc/testsuite/gcc.dg/pr67730.c +++ b/gcc/testsuite/gcc.dg/pr67730.c @@ -1,6 +1,6 @@ /* PR c/67730 */ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-fpermissive" } */ #include diff --git a/gcc/testsuite/gcc.target/powerpc/conditional-return.c b/gcc/testsuite/gcc.target/powerpc/conditional-return.c index 6b3ef5f52ca..c6491216752 100644 --- a/gcc/testsuite/gcc.target/powerpc/conditional-return.c +++ b/gcc/testsuite/gcc.target/powerpc/conditional-return.c @@ -1,7 +1,7 @@ /* Check that a conditional return is used. */ /* { dg-do compile } */ -/* { dg-options "-O2 -w" } */ +/* { dg-options "-O2 -fpermissive -w" } */ /* { dg-final { scan-assembler {\mbeqlr\M} } } */ From patchwork Mon Nov 13 13:11:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 164478 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b909:0:b0:403:3b70:6f57 with SMTP id t9csp1190755vqg; Mon, 13 Nov 2023 05:12:38 -0800 (PST) X-Google-Smtp-Source: AGHT+IEdKae0C3wmsREXdcrYzDs+6RPhZ1ZtJEHRllhUj1cRpK/olYXz5oMY/rNQyB+tLu3ZOGG9 X-Received: by 2002:a05:620a:2995:b0:778:b153:dacd with SMTP id r21-20020a05620a299500b00778b153dacdmr16247580qkp.20.1699881158141; Mon, 13 Nov 2023 05:12:38 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1699881158; cv=pass; d=google.com; s=arc-20160816; b=pUAEtaW1GC797OtlI/a0X0wBpbe62OSPofanEBn3dVxP7BUsLrtBFC8KVdeqaZSsSZ UksfadPYJsBRwwzSSR3d0rJH50LMxcC/t9aCOuytgvSKfGQC6r39GXfG+whoQAqrqSBh WA8r+7+eJlFmqa491NPlUsESQZ9It4cVO3xIV5qbujwccLD9lQV6d8lPe21Dlz1R8Iy5 xmUo1BP4SO73Y0tCoHfq89qtQ/o+5i+DQ3LOKZ2xsCFxAiWehYONtFYL2wMRO4dmpewu 6ZpXhiF8lSutXnT1JftpBM12nmfLITvnYHWYGRs4aMnGRYHKyx+z8IUKZX51S9de0kt7 8Zdg== ARC-Message-Signature: i=2; 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:mime-version:user-agent:date :references:message-id:in-reply-to:subject:to:from:dkim-signature :arc-filter:dmarc-filter:delivered-to; bh=ISE44ZMiA+MPXuehsfptIHsYDEmwkUvpj6yOtpJwGgg=; fh=hPrbWPhweUx4V0GV9uXJqbyAzg2ABmTz7kczrAQqMmM=; b=eDg1OpPGN+zjx03H9fq9pr4QFRliI7gi1dpcn8uSswbJZs02OU1L+qD9UWMXZdeDMx B7+sf/rVvgSkOlvbvnCfNE17UP4kUustTDfE5w/2vRLyGN1FFq/PTWZMe6FIFfOyZRUW wO4a/sLiUICaHSksFb5zqwZ18ysvlYQ9GpozQARraUDSKEJizpFM6INZbUFHb25/HoVC GawjuqRKVLcvfZJi1cJY43wMMZmdjmR0KBPtJomjme88kfjndRfCdW9y8Eyi3gh/QEDD yU2TiICeodAZYEgVGp/LRbv2gb3SYJJO34lRyrHWNaT+6dZcUPHf5ZxdHXH/E1e+6Qdb YMlg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MdUbupXZ; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id c4-20020a05622a024400b004181e759a6csi4441119qtx.597.2023.11.13.05.12.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Nov 2023 05:12:38 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=MdUbupXZ; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BB1143938275 for ; Mon, 13 Nov 2023 13:12:09 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id E2CAF38319D2 for ; Mon, 13 Nov 2023 13:11:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E2CAF38319D2 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E2CAF38319D2 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881092; cv=none; b=RMfcLbo/MW1H84YwGNomVP9X0jO+2ZS1VZIQ1OaA2BkbTt3/k/5E2zNjS+0EKEw+7PKqBOt3qj8Gl+TpmNuIVuSJBqb3B6mR8VFnZhhrWF4fgp1BUeylBEh8y91EI563sepE8bjzlM2v2RFh2PFD6/U8dp5E6DhF/H64/hMfR/A= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699881092; c=relaxed/simple; bh=+lgjBtANY3cWPKjsTRsnL8Hv2Q1wkEzqC7eTeHD/vu8=; h=DKIM-Signature:From:To:Subject:Message-ID:Date:MIME-Version; b=e4w2V6MfYGC8L/J/yZRwgtHtqEobxjEK7raPqpqIQcKgclGHK5jVsFUE/IMLq52FIxVIqLqDnorAkUihWyKAjXCTUjBaL9PWudIdZthub+sj9FCkmre0jU5SOzwARE24egS2RA35yM+OJm+uIzg27UJnso1RMpczJEmpAFSCfbU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699881086; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=ISE44ZMiA+MPXuehsfptIHsYDEmwkUvpj6yOtpJwGgg=; b=MdUbupXZtBOd+Z7qq5TrGYU6jIEGVS2P1ggttcwObMF4JTDc572mJBhfj03NtkGzICEdxN cj/8fuemjwgYE0QWfANJ2prSJ87UF7IR/aoa038Fz5XTAqgKrvryFHM27SU6H48zQo/h6K oMAOzxD+JCRMAsdYcmAfgCtRmKTlDCA= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-433-Fl5jC77uPdSV3c60XvCZFA-1; Mon, 13 Nov 2023 08:11:24 -0500 X-MC-Unique: Fl5jC77uPdSV3c60XvCZFA-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8E189101A550 for ; Mon, 13 Nov 2023 13:11:24 +0000 (UTC) Received: from oldenburg.str.redhat.com (unknown [10.2.16.3]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 52D6740C6EBA for ; Mon, 13 Nov 2023 13:11:23 +0000 (UTC) From: Florian Weimer To: gcc-patches@gcc.gnu.org Subject: [PATCH 6/6] c: Turn -Wincompatible-pointer-types into a pedpermerror In-Reply-To: Message-ID: <212c5e6a96543257d45471b92a8c4e994ff33151.1699879818.git.fweimer@redhat.com> References: X-From-Line: 212c5e6a96543257d45471b92a8c4e994ff33151 Mon Sep 17 00:00:00 2001 Date: Mon, 13 Nov 2023 14:11:21 +0100 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.2 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, 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: 1782454584816534161 X-GMAIL-MSGID: 1782454584816534161 gcc/ * doc/invoke.texi (Warning Options): Document changes. gcc/c/ * c-typeck.cc (build_conditional_expr): Use pedpermerror- equivalent for pointer type mismatches in conditional expression. (convert_for_assignment): Use pedpermerror and pedpermerror_init for OPT_Wincompatible_pointer_types warnings. gcc/testsuite/ * gcc.dg/Wincompatible-pointer-types-2.c: Compile with -fpermissive due to expected errors. * gcc.dg/Wincompatible-pointer-types-4.c: Likewise. * gcc.dg/Wincompatible-pointer-types-5.c: New test. Copied from gcc.dg/Wincompatible-pointer-types-2.c. Expect errors. * gcc.dg/Wincompatible-pointer-types-6.c: New test. Copied from gcc.dg/Wincompatible-pointer-types-4.c. Expect errors. * gcc.dg/anon-struct-11.c: Compile with -fpermissive due to expected errors. * gcc.dg/anon-struct-11a.c: New test. Copied from gcc.dg/anon-struct-11.c. Expect errors. * gcc.dg/anon-struct-13.c: Compile with -fpermissive due to expected errors. * gcc.dg/anon-struct-13a.c: New test. Copied from gcc.dg/anon-struct-13.c. Expect errors. * gcc.dg/builtin-arith-overflow-4.c: Compile with -fpermissive due to expected errors. * gcc.dg/builtin-arith-overflow-4a.c: New test. Copied from gcc.dg/builtin-arith-overflow-4.c. Expect errors. * gcc.dg/c23-qual-4.c: Expect -Wincompatible-pointer-types errors. * gcc.dg/dfp/composite-type.c: Compile with -fpermissive due to expected errors. * gcc.dg/dfp/composite-type-2.c: New test. Copied from gcc.dg/dfp/composite-type.c. Expect errors. * gcc.dg/diag-aka-1.c: Compile with -fpermissive due to expected errors. * gcc.dg/diag-aka-1a.c: New test. Copied from gcc.dg/diag-aka-1a.c. Expect errors. * gcc.dg/enum-compat-1.c: Compile with -fpermissive due to expected errors. * gcc.dg/enum-compat-2.c: New test. Copied from gcc.dg/enum-compat-1.c. Expect errors. * gcc.dg/func-ptr-conv-1.c: Compile with -fpermissive due to expected errors. * gcc.dg/func-ptr-conv-2.c: New test. Copied from gcc.dg/func-ptr-conv-1.c. Expect errors. * gcc.dg/init-bad-7.c: Compile with -fpermissive due to expected errors. * gcc.dg/init-bad-7a.c: New test. Copied from gcc.dg/init-bad-7.c. Expect errors. * gcc.dg/noncompile/incomplete-3.c (foo): Expect -Wincompatible-pointer-types error. * gcc.dg/param-type-mismatch-2.c (test8): Likewise. * gcc.dg/pointer-array-atomic.c: Compile with -fpermissive due to expected errors. * gcc.dg/pointer-array-atomic-2.c: New test. Copied from gcc.dg/pointer-array-atomic.c. Expect errors. * gcc.dg/pointer-array-quals-1.c (test): Expect -Wincompatible-pointer-types errors. * gcc.dg/transparent-union-1.c: Compile with -fpermissive due to expected errors. * gcc.dg/transparent-union-1a.c: New test. Copied from gcc.dg/transparent-union-1.c. Expect errors. * gcc.target/aarch64/acle/memtag_2a.c (test_memtag_warning_return_qualifier): Expect additional errors. * gcc.target/aarch64/sve/acle/general-c/load_2.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_1.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_2.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_3.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_4.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_5.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_1.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_2.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_3.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_4.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/sizeless-1.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/sizeless-2.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_1.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_2.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c (f1): Likewise. * gcc.target/aarch64/sve/acle/general/attributes_7.c (f1): Likewise. * gcc.target/i386/sse2-bfloat16-scalar-typecheck.c (footest): Expect -Wincompatible-pointer-types errors. * gcc.target/i386/vect-bfloat16-typecheck_1.c (footest): Likewise. * gcc.target/i386/vect-bfloat16-typecheck_2.c (footest): Likewise. --- gcc/c/c-typeck.cc | 60 ++++++---- gcc/doc/invoke.texi | 6 + .../gcc.dg/Wincompatible-pointer-types-2.c | 2 +- .../gcc.dg/Wincompatible-pointer-types-4.c | 2 +- .../gcc.dg/Wincompatible-pointer-types-5.c | 10 ++ .../gcc.dg/Wincompatible-pointer-types-6.c | 10 ++ gcc/testsuite/gcc.dg/anon-struct-11.c | 5 +- gcc/testsuite/gcc.dg/anon-struct-11a.c | 111 ++++++++++++++++++ gcc/testsuite/gcc.dg/anon-struct-13.c | 2 +- gcc/testsuite/gcc.dg/anon-struct-13a.c | 76 ++++++++++++ .../gcc.dg/builtin-arith-overflow-4.c | 2 +- .../gcc.dg/builtin-arith-overflow-4a.c | 43 +++++++ gcc/testsuite/gcc.dg/c23-qual-4.c | 6 +- gcc/testsuite/gcc.dg/dfp/composite-type-2.c | 58 +++++++++ gcc/testsuite/gcc.dg/dfp/composite-type.c | 2 +- gcc/testsuite/gcc.dg/diag-aka-1.c | 2 +- gcc/testsuite/gcc.dg/diag-aka-1a.c | 29 +++++ gcc/testsuite/gcc.dg/enum-compat-1.c | 2 +- gcc/testsuite/gcc.dg/enum-compat-2.c | 32 +++++ gcc/testsuite/gcc.dg/func-ptr-conv-1.c | 2 +- gcc/testsuite/gcc.dg/func-ptr-conv-2.c | 56 +++++++++ gcc/testsuite/gcc.dg/init-bad-7.c | 2 +- gcc/testsuite/gcc.dg/init-bad-7a.c | 12 ++ .../gcc.dg/noncompile/incomplete-3.c | 2 +- gcc/testsuite/gcc.dg/param-type-mismatch-2.c | 2 +- gcc/testsuite/gcc.dg/pointer-array-atomic-2.c | 60 ++++++++++ gcc/testsuite/gcc.dg/pointer-array-atomic.c | 2 +- gcc/testsuite/gcc.dg/pointer-array-quals-1.c | 6 +- gcc/testsuite/gcc.dg/transparent-union-1.c | 2 +- gcc/testsuite/gcc.dg/transparent-union-1a.c | 85 ++++++++++++++ .../gcc.target/aarch64/acle/memtag_2a.c | 6 +- .../aarch64/sve/acle/general-c/load_2.c | 4 +- .../acle/general-c/load_ext_gather_offset_1.c | 2 +- .../acle/general-c/load_ext_gather_offset_2.c | 2 +- .../acle/general-c/load_ext_gather_offset_3.c | 2 +- .../acle/general-c/load_ext_gather_offset_4.c | 2 +- .../acle/general-c/load_ext_gather_offset_5.c | 2 +- .../load_ext_gather_offset_restricted_1.c | 2 +- .../load_ext_gather_offset_restricted_2.c | 2 +- .../load_ext_gather_offset_restricted_3.c | 2 +- .../load_ext_gather_offset_restricted_4.c | 2 +- .../aarch64/sve/acle/general-c/sizeless-1.c | 8 +- .../aarch64/sve/acle/general-c/sizeless-2.c | 8 +- .../aarch64/sve/acle/general-c/store_1.c | 8 +- .../aarch64/sve/acle/general-c/store_2.c | 8 +- .../acle/general-c/store_scatter_index_1.c | 6 +- .../store_scatter_index_restricted_1.c | 6 +- .../acle/general-c/store_scatter_offset_2.c | 6 +- .../store_scatter_offset_restricted_1.c | 6 +- .../aarch64/sve/acle/general/attributes_7.c | 28 ++--- .../i386/sse2-bfloat16-scalar-typecheck.c | 4 +- .../i386/vect-bfloat16-typecheck_1.c | 4 +- .../i386/vect-bfloat16-typecheck_2.c | 4 +- 53 files changed, 705 insertions(+), 110 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/Wincompatible-pointer-types-5.c create mode 100644 gcc/testsuite/gcc.dg/Wincompatible-pointer-types-6.c create mode 100644 gcc/testsuite/gcc.dg/anon-struct-11a.c create mode 100644 gcc/testsuite/gcc.dg/anon-struct-13a.c create mode 100644 gcc/testsuite/gcc.dg/builtin-arith-overflow-4a.c create mode 100644 gcc/testsuite/gcc.dg/dfp/composite-type-2.c create mode 100644 gcc/testsuite/gcc.dg/diag-aka-1a.c create mode 100644 gcc/testsuite/gcc.dg/enum-compat-2.c create mode 100644 gcc/testsuite/gcc.dg/func-ptr-conv-2.c create mode 100644 gcc/testsuite/gcc.dg/init-bad-7a.c create mode 100644 gcc/testsuite/gcc.dg/pointer-array-atomic-2.c create mode 100644 gcc/testsuite/gcc.dg/transparent-union-1a.c diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index be376758b82..f25770827ff 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -5420,7 +5420,13 @@ build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp, else { int qual = ENCODE_QUAL_ADDR_SPACE (as_common); - if (emit_diagnostic (bltin1 && bltin2 ? DK_WARNING : DK_PEDWARN, + /* Historically, builtin/builtin pointer conflicts have not + been covered by -pedantic-errors. It is still possible + to turn of the permissive error in -pedantic-errors mode + using -Wno-error=incompatible_pointer_types. */ + if (emit_diagnostic (bltin1 && bltin2 ? DK_PERMERROR + : flag_pedantic_errors ? DK_PEDWARN + : DK_PERMERROR, colon_loc, OPT_Wincompatible_pointer_types, "pointer type mismatch " "in conditional expression")) @@ -7560,46 +7566,48 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type, auto_diagnostic_group d; range_label_for_type_mismatch rhs_label (rhstype, type); gcc_rich_location richloc (expr_loc, &rhs_label); - if (pedwarn (&richloc, OPT_Wincompatible_pointer_types, - "passing argument %d of %qE from incompatible " - "pointer type", parmnum, rname)) + if (pedpermerror (&richloc, OPT_Wincompatible_pointer_types, + "passing argument %d of %qE from " + "incompatible pointer type", + parmnum, rname)) inform_for_arg (fundecl, expr_loc, parmnum, type, rhstype); } break; case ic_assign: if (bltin) - pedwarn (location, OPT_Wincompatible_pointer_types, - "assignment to %qT from pointer to " - "%qD with incompatible type %qT", - type, bltin, rhstype); + pedpermerror (location, OPT_Wincompatible_pointer_types, + "assignment to %qT from pointer to " + "%qD with incompatible type %qT", + type, bltin, rhstype); else - pedwarn (location, OPT_Wincompatible_pointer_types, - "assignment to %qT from incompatible pointer type %qT", - type, rhstype); + pedpermerror (location, OPT_Wincompatible_pointer_types, + "assignment to %qT from incompatible pointer " + "type %qT", + type, rhstype); break; case ic_init: case ic_init_const: if (bltin) - pedwarn_init (location, OPT_Wincompatible_pointer_types, - "initialization of %qT from pointer to " - "%qD with incompatible type %qT", - type, bltin, rhstype); + pedpermerror_init (location, OPT_Wincompatible_pointer_types, + "initialization of %qT from pointer to " + "%qD with incompatible type %qT", + type, bltin, rhstype); else - pedwarn_init (location, OPT_Wincompatible_pointer_types, - "initialization of %qT from incompatible " - "pointer type %qT", - type, rhstype); + pedpermerror_init (location, OPT_Wincompatible_pointer_types, + "initialization of %qT from incompatible " + "pointer type %qT", + type, rhstype); break; case ic_return: if (bltin) - pedwarn (location, OPT_Wincompatible_pointer_types, - "returning pointer to %qD of type %qT from " - "a function with incompatible type %qT", - bltin, rhstype, type); + pedpermerror (location, OPT_Wincompatible_pointer_types, + "returning pointer to %qD of type %qT from " + "a function with incompatible type %qT", + bltin, rhstype, type); else - pedwarn (location, OPT_Wincompatible_pointer_types, - "returning %qT from a function with incompatible " - "return type %qT", rhstype, type); + pedpermerror (location, OPT_Wincompatible_pointer_types, + "returning %qT from a function with incompatible " + "return type %qT", rhstype, type); break; default: gcc_unreachable (); diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 6635a136cd9..49fab5799d0 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -6181,6 +6181,7 @@ that have their own flag: @gccoptlist{ -Wimplicit-function-declaration @r{(C)} -Wimplicit-int @r{(C)} +-Wincompatible-pointer-types @r{(C)} -Wint-conversion @r{(C)} -Wnarrowing @r{(C++)} -Wreturn-mismatch @r{(C)} @@ -8547,6 +8548,11 @@ types. This warning is for cases not covered by @option{-Wno-pointer-sign}, which warns for pointer argument passing or assignment with different signedness. +By default, in C99 and later dialects of C, GCC treats this issue as an +error. The error can be downgraded to a warning using +@option{-fpermissive} (along with certain other errors), or for this +error alone, with @option{-Wno-error=incompatible-pointer-types}. + This warning is upgraded to an error by @option{-pedantic-errors}. @opindex Wno-int-conversion diff --git a/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-2.c b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-2.c index 19276bbcfba..bbf983c1536 100644 --- a/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-2.c +++ b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-fpermissive" } */ void * f1 (int flag, int *a, long *b) diff --git a/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-4.c b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-4.c index c62a7e02bb9..55a9f67b2b1 100644 --- a/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-4.c +++ b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-4.c @@ -4,7 +4,7 @@ void * f1 (int flag) { - return flag ? __builtin_memcpy : __builtin_memcmp; /* { dg-warning "pointer type mismatch in conditional expression \\\[-Wincompatible-pointer-types\\\]" } */ + return flag ? __builtin_memcpy : __builtin_memcmp; /* { dg-error "pointer type mismatch in conditional expression \\\[-Wincompatible-pointer-types\\\]" } */ /* { dg-note "first expression has type 'void \\* \\(\\*\\)\\(void \\*," "" { target *-*-* } .-1 } */ /* { dg-note "second expression has type 'int \\(\\*\\)\\(const void \\*," "" { target *-*-* } .-2 } */ } diff --git a/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-5.c b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-5.c new file mode 100644 index 00000000000..dcbfa4767de --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-5.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "" } */ + +void * +f1 (int flag, int *a, long *b) +{ + return flag ? a : b; /* { dg-error "pointer type mismatch in conditional expression \\\[-Wincompatible-pointer-types\\\]" } */ + /* { dg-note "first expression has type 'int \\*'" "" { target *-*-* } .-1 } */ + /* { dg-note "second expression has type 'long int \\*'" "" { target *-*-* } .-2 } */ +} diff --git a/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-6.c b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-6.c new file mode 100644 index 00000000000..15b37e447ff --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types-6.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c90 -pedantic-errors -Wno-error=incompatible-pointer-types" } */ + +void * +f1 (int flag) +{ + return flag ? __builtin_memcpy : __builtin_memcmp; /* { dg-warning "pointer type mismatch in conditional expression \\\[-Wincompatible-pointer-types\\\]" } */ + /* { dg-note "first expression has type 'void \\* \\(\\*\\)\\(void \\*," "" { target *-*-* } .-1 } */ + /* { dg-note "second expression has type 'int \\(\\*\\)\\(const void \\*," "" { target *-*-* } .-2 } */ +} diff --git a/gcc/testsuite/gcc.dg/anon-struct-11.c b/gcc/testsuite/gcc.dg/anon-struct-11.c index c2f85fc24e4..622fb7cacc6 100644 --- a/gcc/testsuite/gcc.dg/anon-struct-11.c +++ b/gcc/testsuite/gcc.dg/anon-struct-11.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ -/* No special options--in particular, turn off the default - -pedantic-errors option. */ -/* { dg-options "" } */ +/* Also turn off the default -pedantic-errors option. */ +/* { dg-options "-fpermissive" } */ /* When not using -fplan9-extensions, we don't support automatic conversion of pointer types, and we don't support referring to a diff --git a/gcc/testsuite/gcc.dg/anon-struct-11a.c b/gcc/testsuite/gcc.dg/anon-struct-11a.c new file mode 100644 index 00000000000..9ee3bb63ebf --- /dev/null +++ b/gcc/testsuite/gcc.dg/anon-struct-11a.c @@ -0,0 +1,111 @@ +/* { dg-do compile } */ + +/* No special options--in particular, turn off the default + -pedantic-errors option. */ +/* { dg-options "" } */ + +/* When not using -fplan9-extensions, we don't support automatic + conversion of pointer types, and we don't support referring to a + typedef name directly. */ + +extern void exit (int); +extern void abort (void); + +struct A { char a; }; + +struct B { + char b; + struct A; /* { dg-warning "does not declare anything" } */ + char c; +}; + +void +f1 (struct A *p) /* { dg-message "expected" } */ +{ + p->a = 1; +} + +void +test1 (void) +{ + struct B b; + struct A *p; + + b.b = 2; + b.c = 3; + f1 (&b); /* { dg-error "incompatible pointer type" } */ + if (b.a != 1) /* { dg-error "no member" } */ + abort (); + if (b.b != 2 || b.c != 3) + abort (); + p = &b; /* { dg-error "incompatible pointer type" } */ + if (p->a != 1) + abort (); +} + +typedef struct { char d; } D; + +struct E { + char b; + struct F { char f; }; /* { dg-warning "does not declare anything" } */ + char c; + union { + D; /* { dg-warning "does not declare anything" } */ + }; + char e; +}; + +void +f2 (struct F *p) /* { dg-message "expected" } */ +{ + p->f = 6; +} + +void +f3 (D *p) /* { dg-message "expected" } */ +{ + p->d = 4; +} + +void +f4 (D d) +{ +} + +void +test2 (void) +{ + struct E e; + struct F *pf; + D *pd; + D d; + + e.b = 2; + e.c = 3; + e.e = 5; + f2 (&e); /* { dg-error "incompatible pointer type" } */ + f3 (&e); /* { dg-error "incompatible pointer type" } */ + if (e.d != 4) /* { dg-error "no member" } */ + abort (); + if (e.f != 6) /* { dg-error "no member" } */ + abort (); + if (e.b != 2 || e.c != 3 || e.e != 5) + abort (); + pf = &e; /* { dg-error "incompatible pointer type" } */ + if (pf->f != 6) + abort (); + pd = &e; /* { dg-error "incompatible pointer type" } */ + if (pd->d != 4) + abort (); + d = e.D; /* { dg-error "no member" } */ + f3 (&e.D); /* { dg-error "no member" } */ + f4 (e.D); /* { dg-error "no member" } */ +} + +int +main () +{ + test1 (); + test2 (); + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/anon-struct-13.c b/gcc/testsuite/gcc.dg/anon-struct-13.c index 6a508141bac..de478b9684b 100644 --- a/gcc/testsuite/gcc.dg/anon-struct-13.c +++ b/gcc/testsuite/gcc.dg/anon-struct-13.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-fplan9-extensions" } */ +/* { dg-options "-fpermissive -fplan9-extensions" } */ /* Test for ambiguity when using the Plan 9 extensions. */ diff --git a/gcc/testsuite/gcc.dg/anon-struct-13a.c b/gcc/testsuite/gcc.dg/anon-struct-13a.c new file mode 100644 index 00000000000..9e6c5d96595 --- /dev/null +++ b/gcc/testsuite/gcc.dg/anon-struct-13a.c @@ -0,0 +1,76 @@ +/* { dg-do compile } */ +/* { dg-options "-fplan9-extensions" } */ + +/* Test for ambiguity when using the Plan 9 extensions. */ + +struct A { + char a; /* { dg-error "duplicate member" } */ +}; + +struct B +{ + struct A; + struct A; +}; + +char +f1 (struct B *p) +{ + return p->a; /* { dg-error "no member" } */ +} + +void +f2 (struct A *p) /* { dg-message "expected" } */ +{ +} + +void +f3 (struct B *p) +{ + f2 (p); /* { dg-error "incompatible pointer type" } */ +} + +struct C +{ + char c; /* { dg-error "duplicate member" } */ +}; + +struct D +{ + struct C; +}; + +struct E +{ + struct C; + struct D; +}; + +char +f4 (struct E *p) +{ + return p->c; /* { dg-error "no member" } */ +} + +void +f6 (struct C *p) /* { dg-message "expected" } */ +{ +} + +void +f7 (struct E *p) +{ + f6 (p); /* { dg-error "incompatible pointer type" } */ +} + +struct A +f8 (struct B *p) +{ + return p->A; /* { dg-error "no member" } */ +} + +struct C +f9 (struct E *p) +{ + return p->C; /* { dg-error "no member" } */ +} diff --git a/gcc/testsuite/gcc.dg/builtin-arith-overflow-4.c b/gcc/testsuite/gcc.dg/builtin-arith-overflow-4.c index ab7d82a8d83..4c2c89ff616 100644 --- a/gcc/testsuite/gcc.dg/builtin-arith-overflow-4.c +++ b/gcc/testsuite/gcc.dg/builtin-arith-overflow-4.c @@ -1,6 +1,6 @@ /* PR c/90628 */ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-fpermissive" } */ _Atomic int a = 1, b = 2, c = 3; _Atomic long d = 4, e = 5, f = 6; diff --git a/gcc/testsuite/gcc.dg/builtin-arith-overflow-4a.c b/gcc/testsuite/gcc.dg/builtin-arith-overflow-4a.c new file mode 100644 index 00000000000..c021cabdc24 --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtin-arith-overflow-4a.c @@ -0,0 +1,43 @@ +/* PR c/90628 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +_Atomic int a = 1, b = 2, c = 3; +_Atomic long d = 4, e = 5, f = 6; +_Atomic long long g = 7, h = 8, i = 9; + +void +f1 () +{ + __builtin_add_overflow (a, b, &c); /* { dg-error "argument 3 in call to function '__builtin_add_overflow' has pointer to '_Atomic' type" } */ +} + +void +f2 () +{ + __builtin_sub_overflow (d, e, &f); /* { dg-error "argument 3 in call to function '__builtin_sub_overflow' has pointer to '_Atomic' type" } */ +} + +void +f3 () +{ + __builtin_mul_overflow (g, h, &i); /* { dg-error "argument 3 in call to function '__builtin_mul_overflow' has pointer to '_Atomic' type" } */ +} + +void +f4 () +{ + __builtin_sadd_overflow (a, b, &c); /* { dg-error "passing argument 3 of '__builtin_sadd_overflow' from incompatible pointer type" } */ +} + +void +f5 () +{ + __builtin_ssubl_overflow (d, e, &f); /* { dg-error "passing argument 3 of '__builtin_ssubl_overflow' from incompatible pointer type" } */ +} + +void +f6 () +{ + __builtin_smulll_overflow (g, h, &i); /* { dg-error "passing argument 3 of '__builtin_smulll_overflow' from incompatible pointer type" } */ +} diff --git a/gcc/testsuite/gcc.dg/c23-qual-4.c b/gcc/testsuite/gcc.dg/c23-qual-4.c index 8a7a9f2be35..a8538de74e8 100644 --- a/gcc/testsuite/gcc.dg/c23-qual-4.c +++ b/gcc/testsuite/gcc.dg/c23-qual-4.c @@ -83,9 +83,9 @@ void test(void) (void)(1 ? x0 : z0); (void)(1 ? x1 : z1); (void)(1 ? x2 : z2); - (void)(1 ? x0 : x1); /* { dg-warning "pointer type mismatch in conditional expression" } */ - (void)(1 ? x1 : x2); /* { dg-warning "pointer type mismatch in conditional expression" } */ - (void)(1 ? x2 : x0); /* { dg-warning "pointer type mismatch in conditional expression" } */ + (void)(1 ? x0 : x1); /* { dg-error "pointer type mismatch in conditional expression" } */ + (void)(1 ? x1 : x2); /* { dg-error "pointer type mismatch in conditional expression" } */ + (void)(1 ? x2 : x0); /* { dg-error "pointer type mismatch in conditional expression" } */ v0p = (1 ? z0 : v0p); /* { dg-warning "assignment discards 'const' qualifier from pointer target type" } */ v1p = (1 ? z1 : v1p); /* { dg-warning "assignment discards 'const' qualifier from pointer target type" } */ v2p = (1 ? z2 : v2p); /* { dg-warning "assignment discards 'const' qualifier from pointer target type" } */ diff --git a/gcc/testsuite/gcc.dg/dfp/composite-type-2.c b/gcc/testsuite/gcc.dg/dfp/composite-type-2.c new file mode 100644 index 00000000000..5c6d95cc200 --- /dev/null +++ b/gcc/testsuite/gcc.dg/dfp/composite-type-2.c @@ -0,0 +1,58 @@ +/* { dg-do compile } */ +/* { dg-options "-O -Wall -ftrack-macro-expansion=0" } */ + +/* C99 6.2.7: Compatible type and composite type. */ + +#define DECIMAL_COMPOSITE_DECL(TYPE) \ + _Decimal##TYPE g1_##TYPE(); \ + _Decimal##TYPE g2_##TYPE(); \ + _Decimal##TYPE (*h1_##TYPE)[2]; \ + _Decimal##TYPE (*h2_##TYPE)[3]; \ + _Decimal##TYPE (*h3_##TYPE)[4]; \ + _Decimal##TYPE f1_##TYPE(_Decimal##TYPE(*)()); \ + _Decimal##TYPE f1_##TYPE(_Decimal##TYPE(*)(_Decimal##TYPE*)); \ + _Decimal##TYPE f1_##TYPE (_Decimal##TYPE(*g)(_Decimal##TYPE*)) \ + { \ + _Decimal##TYPE d##TYPE; \ + d##TYPE = ((_Decimal##TYPE (*) (_Decimal##TYPE*)) g)(&d##TYPE); \ + d##TYPE = ((_Decimal##TYPE (*) ()) g); \ + return d##TYPE; \ + } \ + _Decimal##TYPE f2_##TYPE(_Decimal##TYPE(*)[]); \ + _Decimal##TYPE f2_##TYPE(_Decimal##TYPE(*)[3]); + +#define DECIMAL_COMPOSITE_TEST(TYPE) \ +do \ +{ \ + _Decimal##TYPE d##TYPE; \ + d##TYPE = f1_##TYPE(g1_##TYPE); \ + d##TYPE = f1_##TYPE(g2_##TYPE); \ + d##TYPE = f2_##TYPE(h1_##TYPE); \ + d##TYPE = f2_##TYPE(h2_##TYPE); \ + d##TYPE = f2_##TYPE(h3_##TYPE); \ + (void) d##TYPE; \ +} while(0) + +DECIMAL_COMPOSITE_DECL(32); /* { dg-error "incompatible types when assigning to type '\[^\n\]*' from type '\[^\n\]*'" } */ +/* { dg-message "note: expected '\[^'\n\]*' but argument is of type '\[^'\n\]*'" "note: expected" { target *-*-* } .-1 } */ + + +DECIMAL_COMPOSITE_DECL(64); /* { dg-error "incompatible types when assigning to type '\[^\n\]*' from type '\[^\n\]*'" } */ +/* { dg-message "note: expected '\[^'\n\]*' but argument is of type '\[^'\n\]*'" "note: expected" { target *-*-* } .-1 } */ + + +DECIMAL_COMPOSITE_DECL(128); /* { dg-error "incompatible types when assigning to type '\[^\n\]*' from type '\[^\n\]*'" } */ +/* { dg-message "note: expected '\[^'\n\]*' but argument is of type '\[^'\n\]*'" "note: expected" { target *-*-* } .-1 } */ + + +int main() +{ + DECIMAL_COMPOSITE_TEST(32); /* { dg-error "incompatible pointer type" } */ + DECIMAL_COMPOSITE_TEST(64); /* { dg-error "incompatible pointer type" } */ + DECIMAL_COMPOSITE_TEST(128); /* { dg-error "incompatible pointer type" } */ + + return 0; +} + +/* The invalid function redeclarations might also trigger: + { dg-prune-output "-Warray-parameter" } */ diff --git a/gcc/testsuite/gcc.dg/dfp/composite-type.c b/gcc/testsuite/gcc.dg/dfp/composite-type.c index ce7d5c1a0a0..2eb601400b5 100644 --- a/gcc/testsuite/gcc.dg/dfp/composite-type.c +++ b/gcc/testsuite/gcc.dg/dfp/composite-type.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -Wall -ftrack-macro-expansion=0" } */ +/* { dg-options "-fpermissive -O -Wall -ftrack-macro-expansion=0" } */ /* C99 6.2.7: Compatible type and composite type. */ diff --git a/gcc/testsuite/gcc.dg/diag-aka-1.c b/gcc/testsuite/gcc.dg/diag-aka-1.c index 3383c1c263b..485a8a5f85d 100644 --- a/gcc/testsuite/gcc.dg/diag-aka-1.c +++ b/gcc/testsuite/gcc.dg/diag-aka-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-Wc++-compat" } */ +/* { dg-options "-fpermissive -Wc++-compat" } */ typedef struct A { int i; } B; typedef struct T { int i; } *T; /* { dg-warning "using 'T' as both a typedef and a tag is invalid" } */ diff --git a/gcc/testsuite/gcc.dg/diag-aka-1a.c b/gcc/testsuite/gcc.dg/diag-aka-1a.c new file mode 100644 index 00000000000..d161b785e7d --- /dev/null +++ b/gcc/testsuite/gcc.dg/diag-aka-1a.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-Wc++-compat" } */ + +typedef struct A { int i; } B; +typedef struct T { int i; } *T; /* { dg-warning "using 'T' as both a typedef and a tag is invalid" } */ +typedef const float TFA; +typedef TFA TFB; +typedef TFB TFC; +typedef int IA[]; +typedef IA *IAP; +extern IAP arr[]; + +void fn1 (B *); /* { dg-message "expected 'B \\*' {aka 'struct A \\*'} but argument is of type 'struct B \\*'" } */ +void fn2 (TFC *); + +void +bar (B *b, int *i) +{ + fn1 ((struct B *) b); /* { dg-error "passing argument" } */ + fn2 (i); /* { dg-error "passing argument" } */ + sizeof (arr); /* { dg-error "invalid application of .sizeof. to incomplete type .int \\(\\*\\\[\\\]\\)\\\[\\\]." } */ +} + +int +foo (void *a) +{ + T t = a; /* { dg-warning "request for implicit conversion from 'void \\*' to 'T' {aka 'struct T \\*'} not" } */ + return t->i; +} diff --git a/gcc/testsuite/gcc.dg/enum-compat-1.c b/gcc/testsuite/gcc.dg/enum-compat-1.c index 5fb150cee79..b7352f6ddc3 100644 --- a/gcc/testsuite/gcc.dg/enum-compat-1.c +++ b/gcc/testsuite/gcc.dg/enum-compat-1.c @@ -3,7 +3,7 @@ /* Origin: Joseph Myers , based on PR c/6024 from Richard Earnshaw */ /* { dg-do compile } */ -/* { dg-options "" } */ +/* { dg-options "-fpermissive" } */ /* Original test from PR c/6024. */ enum e1 {a, b}; diff --git a/gcc/testsuite/gcc.dg/enum-compat-2.c b/gcc/testsuite/gcc.dg/enum-compat-2.c new file mode 100644 index 00000000000..69509012480 --- /dev/null +++ b/gcc/testsuite/gcc.dg/enum-compat-2.c @@ -0,0 +1,32 @@ +/* Test that enumerated types are only considered compatible when they + are the same type. PR c/6024. */ +/* Origin: Joseph Myers , based on + PR c/6024 from Richard Earnshaw */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +/* Original test from PR c/6024. */ +enum e1 {a, b}; +enum e2 {c, d}; + +void f(enum e1); /* { dg-error "prototype" "error at decl" } */ + +void f(x) + enum e2 x; /* { dg-error "doesn't match prototype" } */ +{ + return; +} + +/* Other compatibility tests. */ +enum e3 { A }; +enum e4 { B }; + +enum e3 v3; +enum e4 *p = &v3; /* { dg-error "incompatible" "incompatible pointer" } */ +enum e3 *q = &v3; + +void g(enum e3); /* { dg-message "note: previous declaration" "error at first decl" } */ +void g(enum e4); /* { dg-error "conflicting types" "error at second decl" } */ + +void h(enum e3); +void h(enum e3); diff --git a/gcc/testsuite/gcc.dg/func-ptr-conv-1.c b/gcc/testsuite/gcc.dg/func-ptr-conv-1.c index 5c8a101343e..7c2876cc998 100644 --- a/gcc/testsuite/gcc.dg/func-ptr-conv-1.c +++ b/gcc/testsuite/gcc.dg/func-ptr-conv-1.c @@ -5,7 +5,7 @@ are not permitted. PR c/11234. */ /* Origin: Joseph Myers */ /* { dg-do compile } */ -/* { dg-options "-pedantic" } */ +/* { dg-options "-fpermissive -pedantic" } */ void f(void); diff --git a/gcc/testsuite/gcc.dg/func-ptr-conv-2.c b/gcc/testsuite/gcc.dg/func-ptr-conv-2.c new file mode 100644 index 00000000000..a9884a6c919 --- /dev/null +++ b/gcc/testsuite/gcc.dg/func-ptr-conv-2.c @@ -0,0 +1,56 @@ +/* Conversions between function and object pointers are not permitted + in any version of ISO C, even with casts, except for the special + case of converting a null pointer constant to function pointer + type. Likewise, comparisons between function and object pointers + are not permitted. PR c/11234. */ +/* Origin: Joseph Myers */ +/* { dg-do compile } */ +/* { dg-options "-pedantic" } */ + +void f(void); + +void *v1 = f; /* { dg-warning "12:pointer" "bad conversion" } */ +void *v2 = &f; /* { dg-warning "12:pointer" "bad conversion" } */ +void *v3 = (void *)f; /* { dg-warning "12:pointer" "bad conversion" } */ +void *v4 = (void *)&f; /* { dg-warning "12:pointer" "bad conversion" } */ +void *v5; +char *c1 = f; /* { dg-error "12:pointer" "bad conversion" } */ +char *c2 = &f; /* { dg-error "12:pointer" "bad conversion" } */ +char *c3 = (char *)f; /* { dg-warning "12:pointer" "bad conversion" } */ +char *c4 = (char *)&f; /* { dg-warning "12:pointer" "bad conversion" } */ +char *c5; +void (*fp)(void); +int a; + +void +g(void) +{ + v5 = f; /* { dg-warning "6:pointer" "bad conversion" } */ + v5 = &f; /* { dg-warning "6:pointer" "bad conversion" } */ + v5 = (void *)f; /* { dg-warning "8:pointer" "bad conversion" } */ + v5 = (void *)&f; /* { dg-warning "8:pointer" "bad conversion" } */ + c5 = f; /* { dg-error "6:pointer" "bad conversion" } */ + c5 = &f; /* { dg-error "6:pointer" "bad conversion" } */ + c5 = (char *)f; /* { dg-warning "8:pointer" "bad conversion" } */ + c5 = (char *)&f; /* { dg-warning "8:pointer" "bad conversion" } */ + fp = v5; /* { dg-warning "6:pointer" "bad conversion" } */ + fp = c5; /* { dg-error "6:pointer" "bad conversion" } */ + fp = (void (*)(void))v5; /* { dg-warning "8:pointer" "bad conversion" } */ + fp = (void (*)(void))c5; /* { dg-warning "8:pointer" "bad conversion" } */ + (a ? f : v3); /* { dg-warning "10:pointer" "bad conversion" } */ + (a ? v2 : fp); /* { dg-warning "11:pointer" "bad conversion" } */ + /* The following are OK. */ + fp = 0; + fp = (void *)0; + fp = 0L; + fp = (void (*)(void))0; + fp = (void (*)(void))(void *)0; + (a ? f : 0); + (a ? f : (void *)0); + (a ? (void *)0 : fp); + (a ? 0 : fp); +} + +/* The following are OK. */ +void (*fp2)(void) = 0; +void (*fp3)(void) = (void *)0; diff --git a/gcc/testsuite/gcc.dg/init-bad-7.c b/gcc/testsuite/gcc.dg/init-bad-7.c index de5e570978c..caa8c783d65 100644 --- a/gcc/testsuite/gcc.dg/init-bad-7.c +++ b/gcc/testsuite/gcc.dg/init-bad-7.c @@ -1,6 +1,6 @@ /* PR c/37724 */ /* { dg-do compile } */ -/* { dg-options "-std=gnu99 -pedantic" } */ +/* { dg-options "-fpermissive -std=gnu99 -pedantic" } */ struct f { diff --git a/gcc/testsuite/gcc.dg/init-bad-7a.c b/gcc/testsuite/gcc.dg/init-bad-7a.c new file mode 100644 index 00000000000..9ead2901c4c --- /dev/null +++ b/gcc/testsuite/gcc.dg/init-bad-7a.c @@ -0,0 +1,12 @@ +/* PR c/37724 */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +struct f +{ + int *a; +}; + +char b[10]; +struct f g = {b}; /* { dg-error "initialization of 'int \\*' from incompatible pointer type" } */ +/* { dg-note "near initialization for" "" { target *-*-* } .-1 } */ diff --git a/gcc/testsuite/gcc.dg/noncompile/incomplete-3.c b/gcc/testsuite/gcc.dg/noncompile/incomplete-3.c index 0618b4d8170..b783052d145 100644 --- a/gcc/testsuite/gcc.dg/noncompile/incomplete-3.c +++ b/gcc/testsuite/gcc.dg/noncompile/incomplete-3.c @@ -4,6 +4,6 @@ typedef struct { int a; } b_t; int foo (void) { b_t d; - struct b_t *c = &d; /* { dg-warning "incompatible pointer type" } */ + struct b_t *c = &d; /* { dg-error "incompatible pointer type" } */ c->a; /* { dg-error "invalid use of undefined type" } */ } diff --git a/gcc/testsuite/gcc.dg/param-type-mismatch-2.c b/gcc/testsuite/gcc.dg/param-type-mismatch-2.c index 91d998437d1..83bc360fbc9 100644 --- a/gcc/testsuite/gcc.dg/param-type-mismatch-2.c +++ b/gcc/testsuite/gcc.dg/param-type-mismatch-2.c @@ -152,7 +152,7 @@ extern int callee_8 (int one, float *two, float (three)); /* { dg-line callee_8 int test_8 (int first, int *second, float third) { - return callee_8 (first, second, third); /* { dg-warning "passing argument 2 of 'callee_8' from incompatible pointer type" } */ + return callee_8 (first, second, third); /* { dg-error "passing argument 2 of 'callee_8' from incompatible pointer type" } */ /* { dg-begin-multiline-output "" } return callee_8 (first, second, third); ^~~~~~ diff --git a/gcc/testsuite/gcc.dg/pointer-array-atomic-2.c b/gcc/testsuite/gcc.dg/pointer-array-atomic-2.c new file mode 100644 index 00000000000..de63ff141a3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pointer-array-atomic-2.c @@ -0,0 +1,60 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c11" } */ +/* Origin: Martin Uecker */ +void tvoid(void* x); +void transpose0(double* out, _Atomic double* in) { } +void transpose1(double out[2][2], _Atomic double in[2][2]) { } +void transpose2(double out[2][2][2], _Atomic double in[2][2][2]) { } +// return +int (*x2(_Atomic int x[3][3]))[3] { return x; } /* { dg-error "returning '_Atomic int \\(\\*\\)\\\[3\\\]' from a function with incompatible return type" } */ +_Atomic int (*x3(int x[3][3]))[3] { return x; } /* { dg-error "returning 'int \\(\\*\\)\\\[3\\\]' from a function with incompatible return type" } */ +void test(void) +{ + double x0[2]; + double y0[2]; + _Atomic double z0[4]; + double x1[2][2]; + double y1[2][2]; + double o1[2][3]; + _Atomic double z1[2][2]; + double x2[2][2][2]; + double y2[2][2][2]; + double o2[2][2][3]; + _Atomic double z2[2][2][2]; + tvoid(z0); + tvoid(z1); + tvoid(z2); + // passing as arguments + transpose0(y0, x0); /* { dg-error "passing argument 2 of 'transpose0' from incompatible pointer type" } */ + transpose1(y1, o1); /* { dg-error "passing argument 2 of 'transpose1' from incompatible pointer type" } */ + transpose1(y1, x1); /* { dg-error "passing argument 2 of 'transpose1' from incompatible pointer type" } */ + transpose2(y2, o2); /* { dg-error "passing argument 2 of 'transpose2' from incompatible pointer type" } */ + transpose2(y2, x2); /* { dg-error "passing argument 2 of 'transpose2' from incompatible pointer type" } */ + // initialization + _Atomic double (*x0p) = x0; /* { dg-error "initialization of '_Atomic double \\*' from incompatible pointer type" } */ + _Atomic double (*x1p)[2] = x1; /* { dg-error "initialization of '_Atomic double \\(\\*\\)\\\[2\\\]' from incompatible pointer type" } */ + _Atomic double (*x2p)[2][2] = x2; /* { dg-error "initialization of '_Atomic double \\(\\*\\)\\\[2\\\]\\\[2\\\]' from incompatible pointer type" } */ + // assignment + x0p = x0; /* { dg-error "assignment to '_Atomic double \\*' from incompatible pointer type" } */ + x1p = x1; /* { dg-error "assignment to '_Atomic double \\(\\*\\)\\\[2\\\]' from incompatible pointer type" } */ + x2p = x2; /* { dg-error "assignment to '_Atomic double \\(\\*\\)\\\[2\\\]\\\[2\\\]' from incompatible pointer type" } */ + // subtraction + &(x0[1]) - &(z0[0]); /* { dg-error "invalid operands to binary" } */ + &(x1[1]) - &(z1[0]); /* { dg-error "invalid operands to binary" } */ + &(x2[1]) - &(z2[0]); /* { dg-error "invalid operands to binary" } */ + // comparison + x0 == z0; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */ + x1 == z1; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */ + x2 == z2; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */ + x0 > z0; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */ + x1 > z1; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */ + x2 > z2; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */ + x0 < z0; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */ + x1 < z1; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */ + x2 < z2; /* { dg-warning "comparison of distinct pointer types lacks a cast" } */ + // conditional expressions + (void)(1 ? x0 : z0); /* { dg-error "pointer type mismatch in conditional expression" } */ + (void)(1 ? x1 : z1); /* { dg-error "pointer type mismatch in conditional expression" } */ + (void)(1 ? x2 : z2); /* { dg-error "pointer type mismatch in conditional expression" } */ +} + diff --git a/gcc/testsuite/gcc.dg/pointer-array-atomic.c b/gcc/testsuite/gcc.dg/pointer-array-atomic.c index bb63797b237..87d177a71a4 100644 --- a/gcc/testsuite/gcc.dg/pointer-array-atomic.c +++ b/gcc/testsuite/gcc.dg/pointer-array-atomic.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-std=c11" } */ +/* { dg-options "-fpermissive -std=c11" } */ /* Origin: Martin Uecker */ void tvoid(void* x); void transpose0(double* out, _Atomic double* in) { } diff --git a/gcc/testsuite/gcc.dg/pointer-array-quals-1.c b/gcc/testsuite/gcc.dg/pointer-array-quals-1.c index 498ab223162..be80912723a 100644 --- a/gcc/testsuite/gcc.dg/pointer-array-quals-1.c +++ b/gcc/testsuite/gcc.dg/pointer-array-quals-1.c @@ -84,9 +84,9 @@ void test(void) (void)(1 ? x0 : z0); (void)(1 ? x1 : z1); (void)(1 ? x2 : z2); - (void)(1 ? x0 : x1); /* { dg-warning "pointer type mismatch in conditional expression" } */ - (void)(1 ? x1 : x2); /* { dg-warning "pointer type mismatch in conditional expression" } */ - (void)(1 ? x2 : x0); /* { dg-warning "pointer type mismatch in conditional expression" } */ + (void)(1 ? x0 : x1); /* { dg-error "pointer type mismatch in conditional expression" } */ + (void)(1 ? x1 : x2); /* { dg-error "pointer type mismatch in conditional expression" } */ + (void)(1 ? x2 : x0); /* { dg-error "pointer type mismatch in conditional expression" } */ v0p = (1 ? z0 : v0p); /* { dg-warning "assignment discards 'const' qualifier from pointer target type" } */ v1p = (1 ? z1 : v1p); /* { dg-warning "assignment discards 'const' qualifier from pointer target type" } */ v2p = (1 ? z2 : v2p); /* { dg-warning "assignment discards 'const' qualifier from pointer target type" } */ diff --git a/gcc/testsuite/gcc.dg/transparent-union-1.c b/gcc/testsuite/gcc.dg/transparent-union-1.c index 3f0c260c906..518adfb6ce0 100644 --- a/gcc/testsuite/gcc.dg/transparent-union-1.c +++ b/gcc/testsuite/gcc.dg/transparent-union-1.c @@ -1,6 +1,6 @@ /* PR c/20043 */ /* { dg-do compile } */ -/* { dg-options "-std=gnu99" } */ +/* { dg-options "-fpermissive -std=gnu99" } */ extern void f0 (int *); extern void f0 (int *__restrict); diff --git a/gcc/testsuite/gcc.dg/transparent-union-1a.c b/gcc/testsuite/gcc.dg/transparent-union-1a.c new file mode 100644 index 00000000000..9796ceab490 --- /dev/null +++ b/gcc/testsuite/gcc.dg/transparent-union-1a.c @@ -0,0 +1,85 @@ +/* PR c/20043 */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99" } */ + +extern void f0 (int *); +extern void f0 (int *__restrict); + +extern void f1 (int *__restrict); +extern void f1 (int *); + +typedef union { int *i; long *l; } U2 + __attribute__((transparent_union)); +extern void f2 (U2); +extern void f2 (int *); + +typedef union { int *__restrict i; long *__restrict l; } U3 + __attribute__((transparent_union)); +extern void f3 (U3); +extern void f3 (int *__restrict); + +extern void f4 (U3); +extern void f4 (int *); + +extern void f5 (U2); +extern void f5 (int *__restrict); + +typedef union { long *l; int *i; } U6 + __attribute__((transparent_union)); +extern void f6 (U6); +extern void f6 (int *); + +typedef union { long *__restrict l; int *__restrict i; } U7 + __attribute__((transparent_union)); +extern void f7 (U7); +extern void f7 (int *__restrict); + +extern void f8 (U7); +extern void f8 (int *); + +extern void f9 (U6); +extern void f9 (int *__restrict); + +extern void f10 (U2); +extern void f11 (U3); +extern void f12 (U6); +extern void f13 (U7); + +int i; +long l; + +int +main (void) +{ + f0 (&i); + f0 (&l); /* { dg-error "passing argument 1 of 'f0' from incompatible pointer type" } */ + f1 (&i); + f1 (&l); /* { dg-error "passing argument 1 of 'f1' from incompatible pointer type" } */ + f2 (&i); + f2 (&l); /* { dg-error "passing argument 1 of 'f2' from incompatible pointer type" } */ + f3 (&i); + f3 (&l); /* { dg-error "passing argument 1 of 'f3' from incompatible pointer type" } */ + f4 (&i); + f4 (&l); /* { dg-error "passing argument 1 of 'f4' from incompatible pointer type" } */ + f5 (&i); + f5 (&l); /* { dg-error "passing argument 1 of 'f5' from incompatible pointer type" } */ + f6 (&i); + f6 (&l); /* { dg-error "passing argument 1 of 'f6' from incompatible pointer type" } */ + f7 (&i); + f7 (&l); /* { dg-error "passing argument 1 of 'f7' from incompatible pointer type" } */ + f8 (&i); + f8 (&l); /* { dg-error "passing argument 1 of 'f8' from incompatible pointer type" } */ + f9 (&i); + f9 (&l); /* { dg-error "passing argument 1 of 'f9' from incompatible pointer type" } */ + f10 (&i); + f10 (&l); + f11 (&i); + f11 (&l); + f12 (&i); + f12 (&l); + f13 (&i); + f13 (&l); + return 0; +} + +/* { dg-message "note: expected '\[^\n'\]*' but argument is of type '\[^\n'\]*'" "note: expected" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/gcc.target/aarch64/acle/memtag_2a.c b/gcc/testsuite/gcc.target/aarch64/acle/memtag_2a.c index 16db40df663..9ae371d8867 100644 --- a/gcc/testsuite/gcc.target/aarch64/acle/memtag_2a.c +++ b/gcc/testsuite/gcc.target/aarch64/acle/memtag_2a.c @@ -17,12 +17,12 @@ test_memtag_warning_return_qualifier (void) v = __arm_mte_get_tag(c); /* { dg-warning {assignment} } */ n = __arm_mte_get_tag(c); /* { dg-warning {assignment} } */ - i = __arm_mte_get_tag(c); /* { dg-warning {assignment} } */ + i = __arm_mte_get_tag(c); /* { dg-error {assignment} } */ c = __arm_mte_get_tag(v); /* { dg-warning {assignment} } */ n = __arm_mte_get_tag(v); /* { dg-warning {assignment} } */ - i = __arm_mte_create_random_tag (c, 0); /* { dg-warning {assignment} } */ - i = __arm_mte_increment_tag (c, 0); /* { dg-warning {assignment} } */ + i = __arm_mte_create_random_tag (c, 0); /* { dg-error {assignment} } */ + i = __arm_mte_increment_tag (c, 0); /* { dg-error {assignment} } */ c = __arm_mte_get_tag(n); /* No warning. */ d = __arm_mte_ptrdiff(c, i); /* No warning. */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_2.c index a8288762695..5f4cbeaea2e 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_2.c @@ -15,8 +15,8 @@ f1 (svbool_t pg, signed char *s8_ptr, void *void_ptr, struct s *s_ptr, svld1_s8 (pg, 0); svld1_s32 (pg, (int32_t *) 0); svld1_s8 (pg, void_ptr); - svld1_s8 (pg, s_ptr); /* { dg-warning {passing argument 2 of 'svld1_s8' from incompatible pointer type} } */ + svld1_s8 (pg, s_ptr); /* { dg-error {passing argument 2 of 'svld1_s8' from incompatible pointer type} } */ svld1_f32 (pg, f32_ptr); - svld1_f32 (pg, cf32_ptr); /* { dg-warning {passing argument 2 of 'svld1_f32' from incompatible pointer type} } */ + svld1_f32 (pg, cf32_ptr); /* { dg-error {passing argument 2 of 'svld1_f32' from incompatible pointer type} } */ return svld1_s8 (pg, s8_ptr); /* { dg-error {incompatible types when returning type 'svint8_t' but 'svuint8_t' was expected} } */ } diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_1.c index cd849f89941..41bf2da0fab 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_1.c @@ -14,7 +14,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svld1sb_gather_offset (pg, s8_ptr, s32); /* { dg-error {implicit declaration of function 'svld1sb_gather_offset'; did you mean 'svld1_gather_offset'} } */ svld1sb_gather_offset_s32 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svld1sb_gather_offset_s32'} } */ svld1sb_gather_offset_s32 (pg, s8_ptr, s32, 0); /* { dg-error {too many arguments to function 'svld1sb_gather_offset_s32'} } */ - svld1sb_gather_offset_s32 (pg, s16_ptr, s32); /* { dg-warning {passing argument 2 of 'svld1sb_gather_s32offset_s32' from incompatible pointer type} } */ + svld1sb_gather_offset_s32 (pg, s16_ptr, s32); /* { dg-error {passing argument 2 of 'svld1sb_gather_s32offset_s32' from incompatible pointer type} } */ svld1sb_gather_offset_s32 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svld1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */ svld1sb_gather_offset_s32 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svld1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */ svld1sb_gather_offset_s32 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svld1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_2.c index 850eecf99f6..1261b49d487 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_2.c @@ -14,7 +14,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svld1sb_gather_offset (pg, s8_ptr, s32); /* { dg-error {implicit declaration of function 'svld1sb_gather_offset'; did you mean 'svld1_gather_offset'} } */ svld1sb_gather_offset_u32 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svld1sb_gather_offset_u32'} } */ svld1sb_gather_offset_u32 (pg, s8_ptr, s32, 0); /* { dg-error {too many arguments to function 'svld1sb_gather_offset_u32'} } */ - svld1sb_gather_offset_u32 (pg, s16_ptr, s32); /* { dg-warning {passing argument 2 of 'svld1sb_gather_s32offset_u32' from incompatible pointer type} } */ + svld1sb_gather_offset_u32 (pg, s16_ptr, s32); /* { dg-error {passing argument 2 of 'svld1sb_gather_s32offset_u32' from incompatible pointer type} } */ svld1sb_gather_offset_u32 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svld1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */ svld1sb_gather_offset_u32 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svld1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */ svld1sb_gather_offset_u32 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svld1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_3.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_3.c index 93a728593f9..518348d1146 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_3.c @@ -14,7 +14,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svld1sb_gather_offset (pg, s8_ptr, s64); /* { dg-error {implicit declaration of function 'svld1sb_gather_offset'; did you mean 'svld1_gather_offset'} } */ svld1sb_gather_offset_s64 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svld1sb_gather_offset_s64'} } */ svld1sb_gather_offset_s64 (pg, s8_ptr, s64, 0); /* { dg-error {too many arguments to function 'svld1sb_gather_offset_s64'} } */ - svld1sb_gather_offset_s64 (pg, s16_ptr, s64); /* { dg-warning {passing argument 2 of 'svld1sb_gather_s64offset_s64' from incompatible pointer type} } */ + svld1sb_gather_offset_s64 (pg, s16_ptr, s64); /* { dg-error {passing argument 2 of 'svld1sb_gather_s64offset_s64' from incompatible pointer type} } */ svld1sb_gather_offset_s64 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svld1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */ svld1sb_gather_offset_s64 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svld1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */ svld1sb_gather_offset_s64 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svld1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_4.c index d54dc8eafab..6086911fd5d 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_4.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_4.c @@ -14,7 +14,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svld1sb_gather_offset (pg, s8_ptr, s64); /* { dg-error {implicit declaration of function 'svld1sb_gather_offset'; did you mean 'svld1_gather_offset'} } */ svld1sb_gather_offset_u64 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svld1sb_gather_offset_u64'} } */ svld1sb_gather_offset_u64 (pg, s8_ptr, s64, 0); /* { dg-error {too many arguments to function 'svld1sb_gather_offset_u64'} } */ - svld1sb_gather_offset_u64 (pg, s16_ptr, s64); /* { dg-warning {passing argument 2 of 'svld1sb_gather_s64offset_u64' from incompatible pointer type} } */ + svld1sb_gather_offset_u64 (pg, s16_ptr, s64); /* { dg-error {passing argument 2 of 'svld1sb_gather_s64offset_u64' from incompatible pointer type} } */ svld1sb_gather_offset_u64 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svld1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */ svld1sb_gather_offset_u64 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svld1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */ svld1sb_gather_offset_u64 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svld1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_5.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_5.c index 3b521d5c141..9e2cceec2e9 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_5.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_5.c @@ -14,7 +14,7 @@ f1 (svbool_t pg, unsigned char *s8_ptr, unsigned short *s16_ptr, svld1ub_gather_offset (pg, s8_ptr, s32); /* { dg-error {implicit declaration of function 'svld1ub_gather_offset'; did you mean 'svld1_gather_offset'} } */ svld1ub_gather_offset_s32 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svld1ub_gather_offset_s32'} } */ svld1ub_gather_offset_s32 (pg, s8_ptr, s32, 0); /* { dg-error {too many arguments to function 'svld1ub_gather_offset_s32'} } */ - svld1ub_gather_offset_s32 (pg, s16_ptr, s32); /* { dg-warning {passing argument 2 of 'svld1ub_gather_s32offset_s32' from incompatible pointer type} } */ + svld1ub_gather_offset_s32 (pg, s16_ptr, s32); /* { dg-error {passing argument 2 of 'svld1ub_gather_s32offset_s32' from incompatible pointer type} } */ svld1ub_gather_offset_s32 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svld1ub_gather_offset_s32', which expects a vector of 32-bit integers} } */ svld1ub_gather_offset_s32 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svld1ub_gather_offset_s32', which expects a vector of 32-bit integers} } */ svld1ub_gather_offset_s32 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svld1ub_gather_offset_s32', which expects a vector of 32-bit integers} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_1.c index 96d8ad55074..18e16630944 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_1.c @@ -16,7 +16,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svldnt1sb_gather_offset (pg, s8_ptr, s32); /* { dg-error {implicit declaration of function 'svldnt1sb_gather_offset'; did you mean 'svldnt1_gather_offset'} } */ svldnt1sb_gather_offset_s32 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svldnt1sb_gather_offset_s32'} } */ svldnt1sb_gather_offset_s32 (pg, s8_ptr, u32, 0); /* { dg-error {too many arguments to function 'svldnt1sb_gather_offset_s32'} } */ - svldnt1sb_gather_offset_s32 (pg, s16_ptr, u32); /* { dg-warning {passing argument 2 of 'svldnt1sb_gather_u32offset_s32' from incompatible pointer type} } */ + svldnt1sb_gather_offset_s32 (pg, s16_ptr, u32); /* { dg-error {passing argument 2 of 'svldnt1sb_gather_u32offset_s32' from incompatible pointer type} } */ svldnt1sb_gather_offset_s32 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */ svldnt1sb_gather_offset_s32 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */ svldnt1sb_gather_offset_s32 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svldnt1sb_gather_offset_s32', which expects a vector of 32-bit integers} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_2.c index 25ce7268a1e..6bb9998bff5 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_2.c @@ -16,7 +16,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svldnt1sb_gather_offset (pg, s8_ptr, s32); /* { dg-error {implicit declaration of function 'svldnt1sb_gather_offset'; did you mean 'svldnt1_gather_offset'} } */ svldnt1sb_gather_offset_u32 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svldnt1sb_gather_offset_u32'} } */ svldnt1sb_gather_offset_u32 (pg, s8_ptr, u32, 0); /* { dg-error {too many arguments to function 'svldnt1sb_gather_offset_u32'} } */ - svldnt1sb_gather_offset_u32 (pg, s16_ptr, u32); /* { dg-warning {passing argument 2 of 'svldnt1sb_gather_u32offset_u32' from incompatible pointer type} } */ + svldnt1sb_gather_offset_u32 (pg, s16_ptr, u32); /* { dg-error {passing argument 2 of 'svldnt1sb_gather_u32offset_u32' from incompatible pointer type} } */ svldnt1sb_gather_offset_u32 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */ svldnt1sb_gather_offset_u32 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */ svldnt1sb_gather_offset_u32 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svldnt1sb_gather_offset_u32', which expects a vector of 32-bit integers} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_3.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_3.c index 04465f251b1..8dc160ce9c3 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_3.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_3.c @@ -16,7 +16,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svldnt1sb_gather_offset (pg, s8_ptr, s64); /* { dg-error {implicit declaration of function 'svldnt1sb_gather_offset'; did you mean 'svldnt1_gather_offset'} } */ svldnt1sb_gather_offset_s64 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svldnt1sb_gather_offset_s64'} } */ svldnt1sb_gather_offset_s64 (pg, s8_ptr, s64, 0); /* { dg-error {too many arguments to function 'svldnt1sb_gather_offset_s64'} } */ - svldnt1sb_gather_offset_s64 (pg, s16_ptr, s64); /* { dg-warning {passing argument 2 of 'svldnt1sb_gather_s64offset_s64' from incompatible pointer type} } */ + svldnt1sb_gather_offset_s64 (pg, s16_ptr, s64); /* { dg-error {passing argument 2 of 'svldnt1sb_gather_s64offset_s64' from incompatible pointer type} } */ svldnt1sb_gather_offset_s64 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */ svldnt1sb_gather_offset_s64 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */ svldnt1sb_gather_offset_s64 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svldnt1sb_gather_offset_s64', which expects a vector of 64-bit integers} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_4.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_4.c index 479be66996d..9a418f28089 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_4.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/load_ext_gather_offset_restricted_4.c @@ -16,7 +16,7 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svldnt1sb_gather_offset (pg, s8_ptr, s64); /* { dg-error {implicit declaration of function 'svldnt1sb_gather_offset'; did you mean 'svldnt1_gather_offset'} } */ svldnt1sb_gather_offset_u64 (pg, s8_ptr); /* { dg-error {too few arguments to function 'svldnt1sb_gather_offset_u64'} } */ svldnt1sb_gather_offset_u64 (pg, s8_ptr, s64, 0); /* { dg-error {too many arguments to function 'svldnt1sb_gather_offset_u64'} } */ - svldnt1sb_gather_offset_u64 (pg, s16_ptr, s64); /* { dg-warning {passing argument 2 of 'svldnt1sb_gather_s64offset_u64' from incompatible pointer type} } */ + svldnt1sb_gather_offset_u64 (pg, s16_ptr, s64); /* { dg-error {passing argument 2 of 'svldnt1sb_gather_s64offset_u64' from incompatible pointer type} } */ svldnt1sb_gather_offset_u64 (pg, s8_ptr, pg); /* { dg-error {passing 'svbool_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */ svldnt1sb_gather_offset_u64 (pg, s8_ptr, s8); /* { dg-error {passing 'svint8_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */ svldnt1sb_gather_offset_u64 (pg, s8_ptr, s16); /* { dg-error {passing 'svint16_t' to argument 3 of 'svldnt1sb_gather_offset_u64', which expects a vector of 64-bit integers} } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/sizeless-1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/sizeless-1.c index 01cfd14f873..b0389fa00a8 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/sizeless-1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/sizeless-1.c @@ -105,8 +105,8 @@ statements (int n) /* Pointer assignment. */ - gnu_sc_ptr = sve_sc_ptr; /* { dg-warning {assignment to [^\n]* from incompatible pointer type} } */ - sve_sc_ptr = gnu_sc_ptr; /* { dg-warning {assignment to [^\n]* from incompatible pointer type} } */ + gnu_sc_ptr = sve_sc_ptr; /* { dg-error {assignment to [^\n]* from incompatible pointer type} } */ + sve_sc_ptr = gnu_sc_ptr; /* { dg-error {assignment to [^\n]* from incompatible pointer type} } */ /* Pointer arithmetic. */ @@ -153,8 +153,8 @@ statements (int n) 0 ? 0 : sve_sc1; /* { dg-error {type mismatch in conditional expression} } */ 0 ?: sve_sc1; /* { dg-error {type mismatch in conditional expression} } */ 0 ? sve_sc_ptr : sve_sc_ptr; - 0 ? sve_sc_ptr : gnu_sc_ptr; /* { dg-warning {pointer type mismatch in conditional expression} } */ - 0 ? gnu_sc_ptr : sve_sc_ptr; /* { dg-warning {pointer type mismatch in conditional expression} } */ + 0 ? sve_sc_ptr : gnu_sc_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */ + 0 ? gnu_sc_ptr : sve_sc_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */ /* Generic associations. */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/sizeless-2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/sizeless-2.c index 613b9c47878..d16f40b5f2a 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/sizeless-2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/sizeless-2.c @@ -105,8 +105,8 @@ statements (int n) /* Pointer assignment. */ - gnu_sc_ptr = sve_sc_ptr; /* { dg-warning {incompatible pointer type} } */ - sve_sc_ptr = gnu_sc_ptr; /* { dg-warning {incompatible pointer type} } */ + gnu_sc_ptr = sve_sc_ptr; /* { dg-error {incompatible pointer type} } */ + sve_sc_ptr = gnu_sc_ptr; /* { dg-error {incompatible pointer type} } */ /* Pointer arithmetic. */ @@ -153,8 +153,8 @@ statements (int n) 0 ? 0 : sve_sc1; /* { dg-error {type mismatch in conditional expression} } */ 0 ?: sve_sc1; /* { dg-error {type mismatch in conditional expression} } */ 0 ? sve_sc_ptr : sve_sc_ptr; - 0 ? sve_sc_ptr : gnu_sc_ptr; /* { dg-warning {pointer type mismatch} } */ - 0 ? gnu_sc_ptr : sve_sc_ptr; /* { dg-warning {pointer type mismatch} } */ + 0 ? sve_sc_ptr : gnu_sc_ptr; /* { dg-error {pointer type mismatch} } */ + 0 ? gnu_sc_ptr : sve_sc_ptr; /* { dg-error {pointer type mismatch} } */ /* Generic associations. */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_1.c index 625f059af44..3669b3088a7 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_1.c @@ -16,11 +16,11 @@ f1 (svbool_t pg, signed char *s8_ptr, void *void_ptr, struct s *s_ptr, svst1 (pg, void_ptr, 0); /* { dg-error {passing 'int' to argument 3 of 'svst1', which expects an SVE vector type} } */ svst1 (pg, void_ptr, pg); /* { dg-error {'svst1' has no form that takes 'svbool_t' arguments} } */ svst1 (pg, 0, s8); - svst1 (pg, (int32_t *) 0, s8); /* { dg-warning "passing argument 2 of 'svst1_s8' from incompatible pointer type" } */ + svst1 (pg, (int32_t *) 0, s8); /* { dg-error "passing argument 2 of 'svst1_s8' from incompatible pointer type" } */ svst1 (pg, void_ptr, s8); - svst1 (pg, s_ptr, s8); /* { dg-warning "passing argument 2 of 'svst1_s8' from incompatible pointer type" } */ - svst1 (pg, f32_ptr, s8); /* { dg-warning "passing argument 2 of 'svst1_s8' from incompatible pointer type" } */ + svst1 (pg, s_ptr, s8); /* { dg-error "passing argument 2 of 'svst1_s8' from incompatible pointer type" } */ + svst1 (pg, f32_ptr, s8); /* { dg-error "passing argument 2 of 'svst1_s8' from incompatible pointer type" } */ svst1 (pg, f32_ptr, f32); - svst1 (pg, cf32_ptr, f32); /* { dg-warning "passing argument 2 of 'svst1_f32' from incompatible pointer type" } */ + svst1 (pg, cf32_ptr, f32); /* { dg-error "passing argument 2 of 'svst1_f32' from incompatible pointer type" } */ svst1 (pg, s, s8); /* { dg-error {passing 'struct s' to argument 2 of 'svst1', which expects a scalar pointer} } */ } diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_2.c index 669f8844bc1..30a0a4c8586 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_2.c @@ -18,10 +18,10 @@ f1 (svbool_t pg, signed char *s8_ptr, void *void_ptr, struct s *s_ptr, svst1_vnum (pg, void_ptr, 0, 0); /* { dg-error {passing 'int' to argument 4 of 'svst1_vnum', which expects an SVE vector type} } */ svst1_vnum (pg, void_ptr, 0, pg); /* { dg-error {'svst1_vnum' has no form that takes 'svbool_t' arguments} } */ svst1_vnum (pg, 0, 0, s8); - svst1_vnum (pg, (int32_t *) 0, 0, s8); /* { dg-warning "passing argument 2 of 'svst1_vnum_s8' from incompatible pointer type" } */ + svst1_vnum (pg, (int32_t *) 0, 0, s8); /* { dg-error "passing argument 2 of 'svst1_vnum_s8' from incompatible pointer type" } */ svst1_vnum (pg, void_ptr, 0, s8); - svst1_vnum (pg, s_ptr, 0, s8); /* { dg-warning "passing argument 2 of 'svst1_vnum_s8' from incompatible pointer type" } */ - svst1_vnum (pg, f32_ptr, 0, s8); /* { dg-warning "passing argument 2 of 'svst1_vnum_s8' from incompatible pointer type" } */ + svst1_vnum (pg, s_ptr, 0, s8); /* { dg-error "passing argument 2 of 'svst1_vnum_s8' from incompatible pointer type" } */ + svst1_vnum (pg, f32_ptr, 0, s8); /* { dg-error "passing argument 2 of 'svst1_vnum_s8' from incompatible pointer type" } */ svst1_vnum (pg, f32_ptr, 0, f32); - svst1_vnum (pg, cf32_ptr, 0, f32); /* { dg-warning "passing argument 2 of 'svst1_vnum_f32' from incompatible pointer type" } */ + svst1_vnum (pg, cf32_ptr, 0, f32); /* { dg-error "passing argument 2 of 'svst1_vnum_f32' from incompatible pointer type" } */ } diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c index 29f4510c49b..21bd93afb3f 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_1.c @@ -20,10 +20,10 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svst1_scatter_index (pg, 0, s32, s32); svst1_scatter_index (pg, (int32_t *) 0, s32, s32); svst1_scatter_index (pg, void_ptr, s32, s32); - svst1_scatter_index (pg, s_ptr, s32, s32); /* { dg-warning "passing argument 2 of 'svst1_scatter_s32index_s32' from incompatible pointer type" } */ - svst1_scatter_index (pg, f32_ptr, s32, s32); /* { dg-warning "passing argument 2 of 'svst1_scatter_s32index_s32' from incompatible pointer type" } */ + svst1_scatter_index (pg, s_ptr, s32, s32); /* { dg-error "passing argument 2 of 'svst1_scatter_s32index_s32' from incompatible pointer type" } */ + svst1_scatter_index (pg, f32_ptr, s32, s32); /* { dg-error "passing argument 2 of 'svst1_scatter_s32index_s32' from incompatible pointer type" } */ svst1_scatter_index (pg, f32_ptr, s32, f32); - svst1_scatter_index (pg, cf32_ptr, s32, f32); /* { dg-warning "passing argument 2 of 'svst1_scatter_s32index_f32' from incompatible pointer type" } */ + svst1_scatter_index (pg, cf32_ptr, s32, f32); /* { dg-error "passing argument 2 of 'svst1_scatter_s32index_f32' from incompatible pointer type" } */ svst1_scatter_index (pg, s, s32, s32); /* { dg-error {passing 'struct s' to argument 2 of 'svst1_scatter_index', which expects a vector or pointer base address} } */ svst1_scatter_index (pg, u32, void_ptr, s32); /* { dg-error "passing argument 3 of 'svst1_scatter_u32base_index_s32' makes integer from pointer without a cast" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c index ab718b5eeee..ec99f8af23e 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_index_restricted_1.c @@ -22,10 +22,10 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svstnt1_scatter_index (pg, 0, s64, s64); svstnt1_scatter_index (pg, (int64_t *) 0, s64, s64); svstnt1_scatter_index (pg, void_ptr, s64, s64); - svstnt1_scatter_index (pg, s_ptr, s64, s64); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_s64index_s64' from incompatible pointer type" } */ - svstnt1_scatter_index (pg, f32_ptr, s64, s64); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_s64index_s64' from incompatible pointer type" } */ + svstnt1_scatter_index (pg, s_ptr, s64, s64); /* { dg-error "passing argument 2 of 'svstnt1_scatter_s64index_s64' from incompatible pointer type" } */ + svstnt1_scatter_index (pg, f32_ptr, s64, s64); /* { dg-error "passing argument 2 of 'svstnt1_scatter_s64index_s64' from incompatible pointer type" } */ svstnt1_scatter_index (pg, f64_ptr, s64, f64); - svstnt1_scatter_index (pg, cf64_ptr, s64, f64); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_s64index_f64' from incompatible pointer type" } */ + svstnt1_scatter_index (pg, cf64_ptr, s64, f64); /* { dg-error "passing argument 2 of 'svstnt1_scatter_s64index_f64' from incompatible pointer type" } */ svstnt1_scatter_index (pg, s, s64, s64); /* { dg-error {passing 'struct s' to argument 2 of 'svstnt1_scatter_index', which expects a vector or pointer base address} } */ svstnt1_scatter_index (pg, u32, void_ptr, s32); /* { dg-error "passing argument 3 of 'svstnt1_scatter_u32base_index_s32' makes integer from pointer without a cast" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c index 311b1744c91..318f0dddfb1 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_2.c @@ -20,10 +20,10 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svst1_scatter_offset (pg, 0, s32, s32); svst1_scatter_offset (pg, (int32_t *) 0, s32, s32); svst1_scatter_offset (pg, void_ptr, s32, s32); - svst1_scatter_offset (pg, s_ptr, s32, s32); /* { dg-warning "passing argument 2 of 'svst1_scatter_s32offset_s32' from incompatible pointer type" } */ - svst1_scatter_offset (pg, f32_ptr, s32, s32); /* { dg-warning "passing argument 2 of 'svst1_scatter_s32offset_s32' from incompatible pointer type" } */ + svst1_scatter_offset (pg, s_ptr, s32, s32); /* { dg-error "passing argument 2 of 'svst1_scatter_s32offset_s32' from incompatible pointer type" } */ + svst1_scatter_offset (pg, f32_ptr, s32, s32); /* { dg-error "passing argument 2 of 'svst1_scatter_s32offset_s32' from incompatible pointer type" } */ svst1_scatter_offset (pg, f32_ptr, s32, f32); - svst1_scatter_offset (pg, cf32_ptr, s32, f32); /* { dg-warning "passing argument 2 of 'svst1_scatter_s32offset_f32' from incompatible pointer type" } */ + svst1_scatter_offset (pg, cf32_ptr, s32, f32); /* { dg-error "passing argument 2 of 'svst1_scatter_s32offset_f32' from incompatible pointer type" } */ svst1_scatter_offset (pg, s, s32, s32); /* { dg-error {passing 'struct s' to argument 2 of 'svst1_scatter_offset', which expects a vector or pointer base address} } */ svst1_scatter_offset (pg, u32, void_ptr, s32); /* { dg-error "passing argument 3 of 'svst1_scatter_u32base_offset_s32' makes integer from pointer without a cast" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c index 5b251127a47..74bd7aefd70 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general-c/store_scatter_offset_restricted_1.c @@ -22,10 +22,10 @@ f1 (svbool_t pg, signed char *s8_ptr, short *s16_ptr, svstnt1_scatter_offset (pg, 0, u32, s32); svstnt1_scatter_offset (pg, (int32_t *) 0, u32, s32); svstnt1_scatter_offset (pg, void_ptr, u32, s32); - svstnt1_scatter_offset (pg, s_ptr, u32, s32); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_u32offset_s32' from incompatible pointer type" } */ - svstnt1_scatter_offset (pg, f32_ptr, u32, s32); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_u32offset_s32' from incompatible pointer type" } */ + svstnt1_scatter_offset (pg, s_ptr, u32, s32); /* { dg-error "passing argument 2 of 'svstnt1_scatter_u32offset_s32' from incompatible pointer type" } */ + svstnt1_scatter_offset (pg, f32_ptr, u32, s32); /* { dg-error "passing argument 2 of 'svstnt1_scatter_u32offset_s32' from incompatible pointer type" } */ svstnt1_scatter_offset (pg, f32_ptr, u32, f32); - svstnt1_scatter_offset (pg, cf32_ptr, u32, f32); /* { dg-warning "passing argument 2 of 'svstnt1_scatter_u32offset_f32' from incompatible pointer type" } */ + svstnt1_scatter_offset (pg, cf32_ptr, u32, f32); /* { dg-error "passing argument 2 of 'svstnt1_scatter_u32offset_f32' from incompatible pointer type" } */ svstnt1_scatter_offset (pg, s, u32, s32); /* { dg-error {passing 'struct s' to argument 2 of 'svstnt1_scatter_offset', which expects a vector or pointer base address} } */ svstnt1_scatter_offset (pg, u32, void_ptr, s32); /* { dg-error "passing argument 3 of 'svstnt1_scatter_u32base_offset_s32' makes integer from pointer without a cast" } */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_7.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_7.c index 95be60591fb..5658a206fa3 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_7.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_7.c @@ -135,41 +135,41 @@ g (int c) diff = gs8 - gs8; fs8 = ss8; // { dg-error {invalid conversion} "" { target c++ } } - // { dg-warning {incompatible pointer type} "c" { target c } .-1 } + // { dg-error {incompatible pointer type} "c" { target c } .-1 } fs8 = fs8; fs8 = gs8; // { dg-error {invalid conversion} "" { target c++ } } - // { dg-warning {incompatible pointer type} "c" { target c } .-1 } + // { dg-error {incompatible pointer type} "c" { target c } .-1 } fs8 = su8; // { dg-error {cannot convert} "c++" { target c++ } } - // { dg-warning {incompatible pointer type} "c" { target c } .-1 } + // { dg-error {incompatible pointer type} "c" { target c } .-1 } fs8 = fu8; // { dg-error {cannot convert} "c++" { target c++ } } - // { dg-warning {incompatible pointer type} "c" { target c } .-1 } + // { dg-error {incompatible pointer type} "c" { target c } .-1 } fs8 = gu8; // { dg-error {cannot convert} "c++" { target c++ } } - // { dg-warning {incompatible pointer type} "c" { target c } .-1 } + // { dg-error {incompatible pointer type} "c" { target c } .-1 } fs8 = ss16; // { dg-error {cannot convert} "c++" { target c++ } } - // { dg-warning {incompatible pointer type} "c" { target c } .-1 } + // { dg-error {incompatible pointer type} "c" { target c } .-1 } fs8 = fs16; // { dg-error {cannot convert} "c++" { target c++ } } - // { dg-warning {incompatible pointer type} "c" { target c } .-1 } + // { dg-error {incompatible pointer type} "c" { target c } .-1 } fs8 = gs16; // { dg-error {cannot convert} "c++" { target c++ } } - // { dg-warning {incompatible pointer type} "c" { target c } .-1 } + // { dg-error {incompatible pointer type} "c" { target c } .-1 } select = c ? ss8 : ss8; select = c ? ss8 : fs8; // { dg-error {distinct pointer types} "" { target c++ } } - // { dg-warning {pointer type mismatch} "c" { target c } .-1 } + // { dg-error {pointer type mismatch} "c" { target c } .-1 } select = c ? ss8 : gs8; // { dg-error {distinct pointer types} "" { target c++ } } - // { dg-warning {pointer type mismatch} "c" { target c } .-1 } + // { dg-error {pointer type mismatch} "c" { target c } .-1 } select = c ? fs8 : ss8; // { dg-error {distinct pointer types} "" { target c++ } } - // { dg-warning {pointer type mismatch} "c" { target c } .-1 } + // { dg-error {pointer type mismatch} "c" { target c } .-1 } select = c ? fs8 : fs8; select = c ? fs8 : gs8; // { dg-error {distinct pointer types} "" { target c++ } } - // { dg-warning {pointer type mismatch} "c" { target c } .-1 } + // { dg-error {pointer type mismatch} "c" { target c } .-1 } select = c ? gs8 : ss8; // { dg-error {distinct pointer types} "" { target c++ } } - // { dg-warning {pointer type mismatch} "c" { target c } .-1 } + // { dg-error {pointer type mismatch} "c" { target c } .-1 } select = c ? gs8 : fs8; // { dg-error {distinct pointer types} "" { target c++ } } - // { dg-warning {pointer type mismatch} "c" { target c } .-1 } + // { dg-error {pointer type mismatch} "c" { target c } .-1 } select = c ? gs8 : gs8; diff = sb - sb; // { dg-error {arithmetic on pointer to SVE type 'svbool_t'} } diff --git a/gcc/testsuite/gcc.target/i386/sse2-bfloat16-scalar-typecheck.c b/gcc/testsuite/gcc.target/i386/sse2-bfloat16-scalar-typecheck.c index d1a76db25e9..599b02632fd 100644 --- a/gcc/testsuite/gcc.target/i386/sse2-bfloat16-scalar-typecheck.c +++ b/gcc/testsuite/gcc.target/i386/sse2-bfloat16-scalar-typecheck.c @@ -181,8 +181,8 @@ __bf16 footest (__bf16 scalar0) 0 ? 0.1 : scalar0; 0 ? scalar0 : 0.1; 0 ? bfloat_ptr : bfloat_ptr2; - 0 ? bfloat_ptr : float_ptr; /* { dg-warning {pointer type mismatch in conditional expression} } */ - 0 ? float_ptr : bfloat_ptr; /* { dg-warning {pointer type mismatch in conditional expression} } */ + 0 ? bfloat_ptr : float_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */ + 0 ? float_ptr : bfloat_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */ scalar0 ? scalar0 : scalar0; scalar0 ? is_a_float : scalar0; diff --git a/gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_1.c b/gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_1.c index 8bc3f4a7b8f..f8bdf2e71fd 100644 --- a/gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_1.c +++ b/gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_1.c @@ -224,8 +224,8 @@ __m128bf16 footest (__m128bf16 vector0) 0 ? 0.1 : vector0; /* { dg-error {type mismatch in conditional expression} } */ 0 ? vector0 : 0.1; /* { dg-error {type mismatch in conditional expression} } */ 0 ? bfloat_ptr : bfloat_ptr2; - 0 ? bfloat_ptr : float_ptr; /* { dg-warning {pointer type mismatch in conditional expression} } */ - 0 ? float_ptr : bfloat_ptr; /* { dg-warning {pointer type mismatch in conditional expression} } */ + 0 ? bfloat_ptr : float_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */ + 0 ? float_ptr : bfloat_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */ vector0 ? vector0 : vector0; /* { dg-error {used vector type where scalar is required} } */ vector0 ? is_a_float16_vec : vector0; /* { dg-error {used vector type where scalar is required} } */ diff --git a/gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_2.c b/gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_2.c index 2a8a535daae..b6b7a430efa 100644 --- a/gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_2.c +++ b/gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_2.c @@ -214,8 +214,8 @@ __m256bf16 footest (__m256bf16 vector0) 0 ? 0.1 : vector0; /* { dg-error {type mismatch in conditional expression} } */ 0 ? vector0 : 0.1; /* { dg-error {type mismatch in conditional expression} } */ 0 ? bfloat_ptr : bfloat_ptr2; - 0 ? bfloat_ptr : float_ptr; /* { dg-warning {pointer type mismatch in conditional expression} } */ - 0 ? float_ptr : bfloat_ptr; /* { dg-warning {pointer type mismatch in conditional expression} } */ + 0 ? bfloat_ptr : float_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */ + 0 ? float_ptr : bfloat_ptr; /* { dg-error {pointer type mismatch in conditional expression} } */ vector0 ? vector0 : vector0; /* { dg-error {used vector type where scalar is required} } */ vector0 ? is_a_float16_vec : vector0; /* { dg-error {used vector type where scalar is required} } */