From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 102219 invoked by alias); 9 Nov 2018 20:24:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 102015 invoked by uid 89); 9 Nov 2018 20:24:28 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_2,GIT_PATCH_3,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= 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, 09 Nov 2018 20:24:26 +0000 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2EC6E30820C8; Fri, 9 Nov 2018 20:24:25 +0000 (UTC) Received: from tucnak.zalov.cz (ovpn-116-75.ams2.redhat.com [10.36.116.75]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C84515C21E; Fri, 9 Nov 2018 20:24:24 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.15.2/8.15.2) with ESMTP id wA9KOM5X028308; Fri, 9 Nov 2018 21:24:22 +0100 Received: (from jakub@localhost) by tucnak.zalov.cz (8.15.2/8.15.2/Submit) id wA9KOJ3N028307; Fri, 9 Nov 2018 21:24:19 +0100 Date: Fri, 09 Nov 2018 20:24:00 -0000 From: Jakub Jelinek To: Iain Sandoe Cc: "Dominique =?iso-8859-1?Q?d'Humi=E8res?=" , gcc-patches , Rainer Orth Subject: Re: [PATCH] Fix up affinity-fmt.c (was Re: [committed 0/4] (Partial) OpenMP 5.0 support for GCC 9) Message-ID: <20181109202419.GI11625@tucnak> Reply-To: Jakub Jelinek References: <20181109110454.GA11625@tucnak> <20181109143719.GL11582@tucnak> <20181109154025.GG11625@tucnak> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.2 (2017-12-15) X-IsSubscribed: yes X-SW-Source: 2018-11/txt/msg00784.txt.bz2 On Fri, Nov 09, 2018 at 10:23:24AM -0800, Iain Sandoe wrote: > Works For Me (as amended, bootstrap succeeds): > > display-affinity-1.c: > libgomp: Affinity not supported on this configuration > L:00000%0>xxxxxx.local L:00000%0>xxxxxx.local %000000001 > 00!0! 1!4; 0;01;0;1;0-7 > 00!1! 1!4; 0;01;0;1;0-7 > 00!2! 1!4; 0;01;0;1;0-7 > 00!3! 1!4; 0;01;0;1;0-7 > > ===== Thanks, I've also successfully bootstrapped/regtested it on x86_64-linux and i686-linux, verified the display-affinity-1.c output on both and committed to trunk. Here it is again because of the missing %: 2018-11-09 Jakub Jelinek * affinity-fmt.c: Include inttypes.h if HAVE_INTTYPES_H. (gomp_display_affinity): Use __builtin_choose_expr to handle properly handle argument having integral, or pointer or some other type. If inttypes.h is available and PRIx64 is defined, use PRIx64 with uint64_t type instead of %llx and unsigned long long. --- libgomp/affinity-fmt.c.jj 2018-11-08 18:08:01.412987460 +0100 +++ libgomp/affinity-fmt.c 2018-11-09 15:24:52.049169494 +0100 @@ -30,6 +30,9 @@ #ifdef HAVE_UNISTD_H #include #endif +#ifdef HAVE_INTTYPES_H +# include /* For PRIx64. */ +#endif #ifdef HAVE_UNAME #include #endif @@ -356,37 +359,42 @@ gomp_display_affinity (char *buffer, siz goto do_int; case 'i': #if defined(LIBGOMP_USE_PTHREADS) && defined(__GNUC__) - /* Handle integral pthread_t. */ - if (__builtin_classify_type (handle) == 1) - { - char buf[3 * (sizeof (handle) + sizeof (int)) + 4]; - - if (sizeof (handle) == sizeof (long)) - sprintf (buf, "0x%lx", (long) handle); - else if (sizeof (handle) == sizeof (long long)) - sprintf (buf, "0x%llx", (long long) handle); - else - sprintf (buf, "0x%x", (int) handle); - gomp_display_num (buffer, size, &ret, zero, right, sz, buf); - break; - } - /* And pointer pthread_t. */ - else if (__builtin_classify_type (handle) == 5) - { - char buf[3 * (sizeof (uintptr_t) + sizeof (int)) + 4]; - - if (sizeof (uintptr_t) == sizeof (long)) - sprintf (buf, "0x%lx", (long) (uintptr_t) handle); - else if (sizeof (uintptr_t) == sizeof (long long)) - sprintf (buf, "0x%llx", (long long) (uintptr_t) handle); - else - sprintf (buf, "0x%x", (int) (uintptr_t) handle); - gomp_display_num (buffer, size, &ret, zero, right, sz, buf); - break; - } + { + char buf[3 * (sizeof (handle) + sizeof (uintptr_t) + sizeof (int)) + + 4]; + /* This macro returns expr unmodified for integral or pointer + types and 0 for anything else (e.g. aggregates). */ +#define gomp_nonaggregate(expr) \ + __builtin_choose_expr (__builtin_classify_type (expr) == 1 \ + || __builtin_classify_type (expr) == 5, expr, 0) + /* This macro returns expr unmodified for integral types, + (uintptr_t) (expr) for pointer types and 0 for anything else + (e.g. aggregates). */ +#define gomp_integral(expr) \ + __builtin_choose_expr (__builtin_classify_type (expr) == 5, \ + (uintptr_t) gomp_nonaggregate (expr), \ + gomp_nonaggregate (expr)) + + if (sizeof (gomp_integral (handle)) == sizeof (unsigned long)) + sprintf (buf, "0x%lx", (unsigned long) gomp_integral (handle)); +#if defined (HAVE_INTTYPES_H) && defined (PRIx64) + else if (sizeof (gomp_integral (handle)) == sizeof (uint64_t)) + sprintf (buf, "0x%" PRIx64, (uint64_t) gomp_integral (handle)); +#else + else if (sizeof (gomp_integral (handle)) + == sizeof (unsigned long long)) + sprintf (buf, "0x%llx", + (unsigned long long) gomp_integral (handle)); #endif + else + sprintf (buf, "0x%x", (unsigned int) gomp_integral (handle)); + gomp_display_num (buffer, size, &ret, zero, right, sz, buf); + break; + } +#else val = 0; goto do_int; +#endif case 'A': if (sz == (size_t) -1) gomp_display_affinity_place (buffer, size, &ret, Jakub