From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30525 invoked by alias); 4 Nov 2016 03:23:05 -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 30198 invoked by uid 89); 4 Nov 2016 03:22:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=selftest.h, Writing, selftesth, UD:selftest.h X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 04 Nov 2016 03:22:21 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 228DF16F8D8 for ; Fri, 4 Nov 2016 03:22:20 +0000 (UTC) Received: from cascais.lan (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id uA43MJAC017578 for ; Thu, 3 Nov 2016 23:22:19 -0400 From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 0/3] enum_flags: Fix problems and add comprehensive unit tests Date: Fri, 04 Nov 2016 03:23:00 -0000 Message-Id: <1478229738-24469-1-git-send-email-palves@redhat.com> X-SW-Source: 2016-11/txt/msg00079.txt.bz2 Recently, while working on making symfile_add_flags and objfile->flags strongly typed [1], I noticed a few enum_flags issues, like this failing to compile: symfile_add_flags add_flags = (SYMFILE_MAINLINE | current_inferior ()->symfile_flags); while the form that landed in master does compile: symfile_add_flags add_flags = (current_inferior ()->symfile_flags | SYMFILE_MAINLINE); This series started out by wanting to fix that, but it ended up fixing a bunch more, and adding comprehensive enum_flags unit tests along the way. Writing the tests in turn exposed more problems. Rinse, repeat. The enum_flags methods and global operators are made constexpr where possible, and then C++11's deleted functions are used to remove overloads that should not compile. The unit tests then build on SFINAE + decltype + constexpr to check that mixing enum flags types incorrectly would really fail to compile. This series makes use of C++11 extensively: decltype, constexpr, =delete/=default, typedef -> type alias / using, static_assert, and more. [1] https://sourceware.org/ml/gdb-patches/2016-10/msg00715.html Pedro Alves (3): enum_flags: Use C++11 std::underlying_type enum_flags: Fix problems and add comprehensive unit tests enum_flags: Fix ternary operator and remove implicit convertion to raw enum gdb/Makefile.in | 2 +- gdb/btrace.c | 4 +- gdb/common/enum-flags.h | 251 ++++++++++++------- gdb/compile/compile-c-types.c | 2 +- gdb/enum-flags-selftests.c | 557 ++++++++++++++++++++++++++++++++++++++++++ gdb/go-exp.y | 2 +- gdb/record-btrace.c | 10 +- gdb/selftest.h | 11 + 8 files changed, 738 insertions(+), 101 deletions(-) create mode 100644 gdb/enum-flags-selftests.c -- 2.5.5