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)); }) ; }