From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 758D83858C55 for ; Thu, 13 Oct 2022 15:39:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 758D83858C55 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665675567; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=0ITCmT0lQh9FQsFLEFjv2dTHLJ8oLk66epnpEnVYp9I=; b=ZgRdcd3O+Cyhx+3rWieOhbKBmzwl7uM22V8MuqQ/TPqqtIZJRbYPvSWx8PPRXVK7iO0FLA AsWo2rWy5ADX5MvemJ25O6WXxgaz3Mq/PNId5S5cqgJhyZsxbtSLD7auHBPXOB2NGMLvsb RKCWXGSk4R5MdjnRvK0gbnjOxK7OETI= Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-427-BGzF8KzdMOe-vj48wT7u4Q-1; Thu, 13 Oct 2022 11:39:24 -0400 X-MC-Unique: BGzF8KzdMOe-vj48wT7u4Q-1 Received: by mail-qt1-f197.google.com with SMTP id ff6-20020a05622a4d8600b0039cbf66e8b5so1574081qtb.19 for ; Thu, 13 Oct 2022 08:39:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=0ITCmT0lQh9FQsFLEFjv2dTHLJ8oLk66epnpEnVYp9I=; b=K+VcElqSMHx58aTDbnF6g1D+QJC+3RDIRh4muaQfzYQMQ1Zjxt9R0pqICiTFmTj9FN pjZNPEeKtbo8jX4inbYM6wn1olaTwroToA89HvJ9GOACl1XQUsKPnLxKjJFdEz7ZBGq4 IdJAAReI+Rn50izo933EEz3tsDwTEAkM0nPXQO3PmF7jdN1H0nYiRxCLnVzfZ3oPJqu8 zxjFbHbmUq5EuKJQ4KpWaEcAs+WeNH8kuLdjzl8wqCKW0lGy0zVHGQ6FN9sc0VJP80h0 DJsXgQ7jrL3r2doxlV4EN0hwlSqOdPNLHf/CzjPK+4o8elb9s4EiSZAxZHuguLOSsW7f EX6g== X-Gm-Message-State: ACrzQf0b23wmRVXrO/BG7dyvhgm6MjEdaRKu9EIlOO+X90UOQu7+cR/Q mpXlhhykF5RWFnVBcn6mdXbVT6yhk4sSkawju9g6QVM5gUIEnk6Ie/mj7E8JIfRwdbz8T6HnebP KXdzQ6D6MpDp8cUOm/GYVCCDpSW7EMm97mCM0RDiZMAxNBJabAKjHJC7MNof3wKD6gsI= X-Received: by 2002:a05:6214:c2a:b0:474:2411:b482 with SMTP id a10-20020a0562140c2a00b004742411b482mr208314qvd.128.1665675563482; Thu, 13 Oct 2022 08:39:23 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5NkfLfuO2zUm6kVhxTQx/wxtUsoIUIcXhwNqiLxzNgjG+OU7AWxzWsPR/oA8P4E6aCVuukqw== X-Received: by 2002:a05:6214:c2a:b0:474:2411:b482 with SMTP id a10-20020a0562140c2a00b004742411b482mr208297qvd.128.1665675563235; Thu, 13 Oct 2022 08:39:23 -0700 (PDT) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id u2-20020a05620a454200b006af0ce13499sm19667165qkp.115.2022.10.13.08.39.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Oct 2022 08:39:22 -0700 (PDT) From: Patrick Palka To: gcc-patches@gcc.gnu.org Cc: jason@redhat.com, nathan@acm.org, Patrick Palka Subject: [PATCH] c++ modules: verify_type failure with typedef enum [PR106848] Date: Thu, 13 Oct 2022 11:39:21 -0400 Message-Id: <20221013153921.3795800-1-ppalka@redhat.com> X-Mailer: git-send-email 2.38.0.68.ge85701b4af MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-14.0 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,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Here during stream in we end up having created a type variant for the enum before we read the enum's definition, and thus the variant inherited stale TYPE_VALUES and TYPE_MIN/MAX_VALUES, which leads to an ICE (with -g). The stale variant got created from set_underlying_type during earlier stream in of the (redundant) typedef for the enum. This patch works around this by setting TYPE_VALUES and TYPE_MIN/MAX_VALUES for all variants when reading in an enum definition. Does this look like the right approach? Or perhaps we need to arrange that we read the enum definition before reading in the typedef decl? Note that seems to be an issue only when the typedef name and enum names are the same (thus the typedef is redundant), otherwise we seem to read the enum definition first as desired. PR c++/106848 gcc/cp/ChangeLog: * module.cc (trees_in::read_enum_def): Set the TYPE_VALUES, TYPE_MIN_VALUE and TYPE_MAX_VALUE of all type variants. gcc/testsuite/ChangeLog: * g++.dg/modules/enum-9_a.H: New test. * g++.dg/modules/enum-9_b.C: New test. --- gcc/cp/module.cc | 9 ++++++--- gcc/testsuite/g++.dg/modules/enum-9_a.H | 5 +++++ gcc/testsuite/g++.dg/modules/enum-9_b.C | 6 ++++++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/enum-9_a.H create mode 100644 gcc/testsuite/g++.dg/modules/enum-9_b.C diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 7ffeefa7c1f..97fb80bcd44 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -12303,9 +12303,12 @@ trees_in::read_enum_def (tree defn, tree maybe_template) if (installing) { - TYPE_VALUES (type) = values; - TYPE_MIN_VALUE (type) = min; - TYPE_MAX_VALUE (type) = max; + for (tree t = type; t; t = TYPE_NEXT_VARIANT (t)) + { + TYPE_VALUES (t) = values; + TYPE_MIN_VALUE (t) = min; + TYPE_MAX_VALUE (t) = max; + } rest_of_type_compilation (type, DECL_NAMESPACE_SCOPE_P (defn)); } diff --git a/gcc/testsuite/g++.dg/modules/enum-9_a.H b/gcc/testsuite/g++.dg/modules/enum-9_a.H new file mode 100644 index 00000000000..fb7d10ad3b6 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/enum-9_a.H @@ -0,0 +1,5 @@ +// PR c++/106848 +// { dg-additional-options -fmodule-header } +// { dg-module-cmi {} } + +typedef enum memory_order { memory_order_seq_cst } memory_order; diff --git a/gcc/testsuite/g++.dg/modules/enum-9_b.C b/gcc/testsuite/g++.dg/modules/enum-9_b.C new file mode 100644 index 00000000000..63e81675d0a --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/enum-9_b.C @@ -0,0 +1,6 @@ +// PR c++/106848 +// { dg-additional-options "-fmodules-ts -g" } + +import "enum-9_a.H"; + +memory_order x = memory_order_seq_cst; -- 2.38.0.68.ge85701b4af