https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104865

            Bug ID: 104865
           Summary: Wrong code for conditional expression on VAX
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---
            Target: vax-dec-netbsdelf

This fails the second static assert on vax-dec-netbsdelf:


template<typename T>
constexpr int
cmp1(T x) noexcept
{
    int ix = (bool) __builtin_isnan(x);
    return ix;
}

template<typename T>
constexpr int
cmp2(T x) noexcept
{
    int ix = __builtin_isnan(x) ? 1 : 0;
    return ix;
}   

constexpr double nan = __builtin_nan("");

static_assert( cmp1(nan) ); 
static_assert( cmp2(nan) ); 

extern const auto c1 = cmp1(nan);
extern const auto c2 = cmp2(nan);     


$ gcc/cc1plus  -quiet ~/tmp/ord.C
/home/jwakely/tmp/ord.C:20:20: error: static assertion failed
   20 | static_assert( cmp2(nan) );
      |                ~~~~^~~~~





If the failing static assert is commented out, the assembly code is:

#NO_APP
        .file   "ord.C"
        .text
        .section        .rodata
        .align 2
        .type   _ZL3nan, @object
        .size   _ZL3nan, 8
_ZL3nan:
        .long   -32769
        .long   -1
.globl c1
        .align 2
        .type   c1, @object
        .size   c1, 4
c1:
        .long   1
.globl c2
        .align 2
        .type   c2, @object
        .size   c2, 4
c2:
        .zero   4
        .ident  "GCC: (GNU) 12.0.1 20220308 (experimental)"




For some reason the cmp2 function returns zero.



I'm using binutils configured with --target=vax-dec-netbsdelf and gcc
configured with:

/home/jwakely/src/gcc/configure --target vax-dec-netbsdelf --without-headers
--with-newlib --disable-bootstrap --disable-nls --without-lto --without-isl
--disable-libcc1 --disable-libsanitizer --disable-libitm --disable-libvtv
--disable-libgomp --disable-libssp --enable-languages=c++,c
--disable-libstdcxx-pch --disable-hosted-libstdcxx
--prefix=/home/jwakely/gcc/vax

I only did 'make all-gcc' and am running cc1plus from the build tree, as I
don't have a sysroot for the target.

Reply via email to