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

--- Comment #10 from Dale Weiler <weilercdale at gmail dot com> ---
New test case without UB still exhibits the behavior

#include <string.h>
#include <stdio.h>
typedef union {
        unsigned char as_bytes[64];
        unsigned long long as_chunks[64 / sizeof(unsigned long long)];
} Block;
int main(int argc, char **argv) {
        Block block;
        int i = strlen(argv[0]), j = 0;
        for (; j < i; j++) block.as_bytes[j] = argv[0][j];
        block.as_bytes[j] = 0x01;
        while (++j & 7) block.as_bytes[j] = 0;
        if (j > 56) while (j < 64) block.as_bytes[j++] = 0;
        while (j < 56) block.as_bytes[j++] = 0;
        while (j < 64) block.as_bytes[j++] = 0x01;
        for (j = 0; j < 8; j++) printf("%d\n", (int)block.as_chunks[j]);
}

Reply via email to