[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#767668: gcc-4.9: gcc internal compiler error with atomic_compare_exchange_weak_explicit



Package: gcc-4.9
Version: 4.9.1-16
Severity: normal

Dear Maintainer,

the attached code leads to an internal compiler error. I didn't try it with
upstream GCC, only with GCC from debian testing.

I'm attaching both a minimal version of the source to trigger the bug
and the preprocessed source.

Thanks,

Daniele

-- System Information:
Debian Release: jessie/sid
  APT prefers testing
  APT policy: (700, 'testing'), (650, 'unstable'), (600, 'experimental'), (500, 'testing-updates')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.16-3-amd64 (SMP w/2 CPU cores)
Locale: LANG=it_IT.utf8, LC_CTYPE=it_IT.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages gcc-4.9 depends on:
ii  binutils        2.24.90.20141023-1
ii  cpp-4.9         4.9.1-16
ii  gcc-4.9-base    4.9.1-16
ii  libc6           2.19-12
ii  libcloog-isl4   0.18.2-1
ii  libgcc-4.9-dev  4.9.1-16
ii  libgmp10        2:6.0.0+dfsg-6
ii  libisl10        0.12.2-2
ii  libmpc3         1.0.2-1
ii  libmpfr4        3.1.2-1
ii  zlib1g          1:1.2.8.dfsg-2

Versions of packages gcc-4.9 recommends:
ii  libc6-dev  2.19-12

Versions of packages gcc-4.9 suggests:
pn  gcc-4.9-doc       <none>
pn  gcc-4.9-locales   <none>
ii  gcc-4.9-multilib  4.9.1-16
pn  libasan1-dbg      <none>
pn  libatomic1-dbg    <none>
pn  libcilkrts5-dbg   <none>
pn  libgcc1-dbg       <none>
pn  libgomp1-dbg      <none>
pn  libitm1-dbg       <none>
pn  liblsan0-dbg      <none>
pn  libquadmath0-dbg  <none>
pn  libtsan0-dbg      <none>
pn  libubsan0-dbg     <none>

-- no debconf information
/* testatomic.c */
#include <stdatomic.h>
#include <stdbool.h>

struct myrcu_pointer
{
    _Atomic(void *) p;
};

bool
myrcu_compare_exchange__(struct myrcu_pointer *pointer, const void *exp,
                         void *value, memory_order order_succ,
                         memory_order order_fail)
{
    return atomic_compare_exchange_weak_explicit(&pointer->p, (void *) exp,
                                                 value, order_succ,
                                                 order_fail);
}
// /usr/lib/gcc/x86_64-linux-gnu/4.9/cc1 -quiet -imultiarch x86_64-linux-gnu testatomic.c -quiet -dumpbase testatomic.c -mtune=generic -march=x86-64 -auxbase testatomic -o - -frandom-seed=0
# 1 "testatomic.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "testatomic.c"

# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdatomic.h" 1 3 4
# 29 "/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdatomic.h" 3 4
typedef enum
  {
    memory_order_relaxed = 0,
    memory_order_consume = 1,
    memory_order_acquire = 2,
    memory_order_release = 3,
    memory_order_acq_rel = 4,
    memory_order_seq_cst = 5
  } memory_order;


typedef _Atomic _Bool atomic_bool;
typedef _Atomic char atomic_char;
typedef _Atomic signed char atomic_schar;
typedef _Atomic unsigned char atomic_uchar;
typedef _Atomic short atomic_short;
typedef _Atomic unsigned short atomic_ushort;
typedef _Atomic int atomic_int;
typedef _Atomic unsigned int atomic_uint;
typedef _Atomic long atomic_long;
typedef _Atomic unsigned long atomic_ulong;
typedef _Atomic long long atomic_llong;
typedef _Atomic unsigned long long atomic_ullong;
typedef _Atomic short unsigned int atomic_char16_t;
typedef _Atomic unsigned int atomic_char32_t;
typedef _Atomic int atomic_wchar_t;
typedef _Atomic signed char atomic_int_least8_t;
typedef _Atomic unsigned char atomic_uint_least8_t;
typedef _Atomic short int atomic_int_least16_t;
typedef _Atomic short unsigned int atomic_uint_least16_t;
typedef _Atomic int atomic_int_least32_t;
typedef _Atomic unsigned int atomic_uint_least32_t;
typedef _Atomic long int atomic_int_least64_t;
typedef _Atomic long unsigned int atomic_uint_least64_t;
typedef _Atomic signed char atomic_int_fast8_t;
typedef _Atomic unsigned char atomic_uint_fast8_t;
typedef _Atomic long int atomic_int_fast16_t;
typedef _Atomic long unsigned int atomic_uint_fast16_t;
typedef _Atomic long int atomic_int_fast32_t;
typedef _Atomic long unsigned int atomic_uint_fast32_t;
typedef _Atomic long int atomic_int_fast64_t;
typedef _Atomic long unsigned int atomic_uint_fast64_t;
typedef _Atomic long int atomic_intptr_t;
typedef _Atomic long unsigned int atomic_uintptr_t;
typedef _Atomic long unsigned int atomic_size_t;
typedef _Atomic long int atomic_ptrdiff_t;
typedef _Atomic long int atomic_intmax_t;
typedef _Atomic long unsigned int atomic_uintmax_t;
# 232 "/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdatomic.h" 3 4
typedef _Atomic struct
{

  _Bool __val;



} atomic_flag;
# 3 "testatomic.c" 2
# 1 "/usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdbool.h" 1 3 4
# 4 "testatomic.c" 2

struct myrcu_pointer
{
    _Atomic(void *) p;
};

_Bool
myrcu_compare_exchange__(struct myrcu_pointer *pointer, const void *exp,
                         void *value, memory_order order_succ,
                         memory_order order_fail)
{
    return __extension__ ({ __auto_type __atomic_compare_exchange_ptr = (&pointer->p); __typeof__ (*__atomic_compare_exchange_ptr) __atomic_compare_exchange_tmp = (value); __atomic_compare_exchange (__atomic_compare_exchange_ptr, ((void *) exp), &__atomic_compare_exchange_tmp, 1, (order_succ), (order_fail)); })

                                                            ;
}

Reply to: