https://bugs.llvm.org/show_bug.cgi?id=40196

            Bug ID: 40196
           Summary: printf bug when arguments from a member of union
           Product: clang
           Version: 6.0
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangb...@nondot.org
          Reporter: met...@x-legend.com.tw
                CC: htmldevelo...@gmail.com, llvm-bugs@lists.llvm.org,
                    neeil...@live.com, richard-l...@metafoo.co.uk

Hi

We found a bug in printf.
It may have included below
1. 64bit union
2. a bit number in union
3. out of register count (x64-ABI limit)

#include <stdio.h>

union U {
    unsigned long long Value;
    struct {
        unsigned long long Data:2;
    };
};

int main ()
{
    int a = 0;
    U b = { 0 };

    printf ("%d, %llu\n", a, b.Data);
    printf ("%d, %d, %llu\n", a, a, b.Data);
    printf ("%d, %d, %d, %llu\n", a, a, a, b.Data);
    printf ("%d, %d, %d, %d, %llu\n", a, a, a, a, b.Data);
    printf ("%d, %d, %d, %d, %d, %llu\n", a, a, a, a, a, b.Data);
    printf ("%d, %d, %d, %d, %d, %d, %llu\n", a, a, a, a, a, a, b.Data);
    printf ("%d, %d, %d, %d, %d, %d, %d, %llu\n", a, a, a, a, a, a, a, b.Data);
    printf ("%d, %d, %d, %d, %d, %d, %d, %d, %llu\n", a, a, a, a, a, a, a, a,
b.Data);
    printf ("%d, %d, %d, %d, %d, %d, %d, %d, %d, %llu\n", a, a, a, a, a, a, a,
a, a, b.Data);

    return 0;
}

metora@pro-debian:$ clang-6.0 1.cc
metora@pro-debian:$ ./a.out 
0, 0
0, 0, 0
0, 0, 0, 0
0, 0, 0, 0, 0
0, 0, 0, 0, 0, 140724603453440
0, 0, 0, 0, 0, 0, 140724603453440
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0

How to fix or prevent it?

Thank you

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to