From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 58131 invoked by alias); 18 Feb 2020 20:38:20 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 58122 invoked by uid 89); 18 Feb 2020 20:38:20 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-8.1 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS autolearn=ham version=3.3.1 spammy= X-HELO: gateway24.websitewelcome.com Received: from gateway24.websitewelcome.com (HELO gateway24.websitewelcome.com) (192.185.51.253) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 18 Feb 2020 20:38:18 +0000 Received: from cm12.websitewelcome.com (cm12.websitewelcome.com [100.42.49.8]) by gateway24.websitewelcome.com (Postfix) with ESMTP id 26DE41345F for ; Tue, 18 Feb 2020 14:38:17 -0600 (CST) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id 49dIjFNmSvBMd49dJjCoCM; Tue, 18 Feb 2020 14:38:17 -0600 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=M2aXpNgvgPUCrjdHFBang70JdrX8sbnUmx/HMsltY6s=; b=EB/d3aKZpCSnEKi9DCge/2+jZz Y6qWiCPFrRm0p0jgRIkVA+r1ho+1sui16O9E6nQauR7nttH9bMoYrozKPeeuOcQkwYO7wNfAcBsUD TD+GiAYKFzfB8G/kfNsBZyoWO; Received: from 75-166-123-50.hlrn.qwest.net ([75.166.123.50]:49068 helo=murgatroyd) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1j49dI-001j16-Ob; Tue, 18 Feb 2020 13:38:16 -0700 From: Tom Tromey To: Simon Marchi Cc: gdb-patches@sourceware.org Subject: Re: [PATCH 3/5] gdb: allow duplicate enumerators in flag enums References: <20200213203035.30157-1-simon.marchi@efficios.com> <20200213203035.30157-3-simon.marchi@efficios.com> Date: Tue, 18 Feb 2020 20:38:00 -0000 In-Reply-To: <20200213203035.30157-3-simon.marchi@efficios.com> (Simon Marchi's message of "Thu, 13 Feb 2020 15:30:33 -0500") Message-ID: <87a75f7hs7.fsf@tromey.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SW-Source: 2020-02/txt/msg00737.txt.bz2 >>>>> "Simon" == Simon Marchi writes: Simon> I have come across some uses cases where it would be desirable to treat Simon> an enum that has duplicate values as a "flag enum". For example, this Simon> one here [1]: Simon> /* Alias for header backward compatibility. */ Simon> MEMBARRIER_CMD_SHARED = MEMBARRIER_CMD_GLOBAL, Simon> }; Simon> The last enumerator is kept for backwards compatibility. Without this Simon> patch, this enumeration wouldn't be considered a flag enum, because two Simon> enumerators collide. With this patch, it would be considered a flag Simon> enum, and the value 3 would be printed as: Does it always choose the first enumerator? Simon> if (nbits != 0 && nbits && nbits != 1) Simon> flag_enum = 0; Simon> - else if ((mask & value) != 0) Simon> - flag_enum = 0; Simon> - else Simon> - mask |= value; I wonder if this allows too much, though. Maybe instead it should check for duplicate enumerator values and allow those, while still disallowing enums with conflicts, like: enum x { one = 0x11, two = 0x10, three = 0x01 }; ... which probably isn't a sensible flag enum. Tom