[LLVMbugs] [Bug 20829] New: Initialization of union type

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Sep 1 23:09:51 PDT 2014


            Bug ID: 20829
           Summary: Initialization of union type
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: Jani_Lahtinen at mcafee.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

The following code:

typedef union {
  struct {
    int a:1;
    int b:1;
    int c:1;
    int d:1;
  uint8_t mask;
} foo;

int main(void)
  foo x;
  x.mask = 0xff;
  x = (foo){.a = 1};
  printf("%02x\n", x.mask);
  return 0;

when compiled with -O0 prints two hex-digits the last of which is one, and the
first is random.

C99 standard says:

6.7.8 Initialization


8. Except where explicitly stated otherwise, for the purposes of this subclause
unnamed members of objects of structure and union type do not participate in
initialization. Unnamed members of structure objects have indeterminate value
even after initialization.


21. If there are fewer initializers in a brace-enclosed list than there are
elements or members
of an aggregate, or fewer characters in a string literal used to initialize an
array of known
size than there are elements in the array, the remainder of the aggregate shall
initialized implicitly the same as objects that have static storage duration.

I am unsure is the Clang behaviour according to standard or not.

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140902/9890c1b3/attachment.html>

More information about the llvm-bugs mailing list