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

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tom de Vries <vr...@gcc.gnu.org>:

https://gcc.gnu.org/g:af47a2035a4882e6d4506e3d00b5a42414e3ee2b

commit r11-3127-gaf47a2035a4882e6d4506e3d00b5a42414e3ee2b
Author: Tom de Vries <tdevr...@suse.de>
Date:   Thu Sep 10 15:54:14 2020 +0200

    [nvptx] Fix printing of 128-bit constant

    Currently, for this code from c-c++-common/spec-barrier-1.c:
    ...
    __int128 g = 9;
    ...
    we generate:
    ...
    // BEGIN GLOBAL VAR DEF: g
    .visible .global .align 8 .u64 g[2] = { 9, 9 };
    ...
    and consequently the test-case fails in execution.

    The problem is caused by a shift in nvptx_assemble_value:
    ...
          val >>= part * BITS_PER_UNIT;
    ...
    where the shift amount is equal to the number of bits in val, which is
    undefined behaviour.

    Fix this by detecting the situation and setting val to 0.

    Tested on nvptx.

    gcc/ChangeLog:

            PR target/97004
            * config/nvptx/nvptx.c (nvptx_assemble_value): Handle shift by
            number of bits in shift operand.

Reply via email to