From: Jakub Jelinek Date: Fri, 9 Nov 2018 20:17:40 +0000 (+0100) Subject: affinity-fmt.c: Include inttypes.h if HAVE_INTTYPES_H. X-Git-Tag: upstream/12.2.0~28206 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9666c52203b755611209dc32190a22319516e56a;p=platform%2Fupstream%2Fgcc.git affinity-fmt.c: Include inttypes.h if HAVE_INTTYPES_H. * 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. From-SVN: r265985 --- diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index ac43ff6..0b5d2e3 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,5 +1,11 @@ 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. + * testsuite/libgomp.c-c++-common/task-reduction-13.c: New test. * testsuite/libgomp.c-c++-common/task-reduction-14.c: New test. diff --git a/libgomp/affinity-fmt.c b/libgomp/affinity-fmt.c index 08937b6..9e5c5f7 100644 --- a/libgomp/affinity-fmt.c +++ b/libgomp/affinity-fmt.c @@ -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, size_t size, 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]; + { + 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 (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; - } + 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,