[LLVMbugs] [Bug 1421] NEW: CopyAggregate doesn't play nice with unions

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Tue May 15 02:27:04 PDT 2007


http://llvm.org/bugs/show_bug.cgi?id=1421

           Summary: CopyAggregate doesn't play nice with unions
           Product: new-bugs
           Version: unspecified
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: baldrick at free.fr


Testcase:

struct A {
  char c;
  int i;
};

struct B {
  char c;
  unsigned char x;
};

union U { struct A a; struct B b; };

int check (void) {
  union U u, v;

  v.b.x = 0xff;
  u = v;
  return (u.b.x == 0xff);
}

Compiled with -O2:
        ret i32 0
Should return 1.  The point is that the union takes its fields
from struct A.  The second char x in struct B is in the empty
space (due to alignment) in struct A between char c and int i,
so is not copied when CopyAggregate copies by fields.  Copying
by fields is completely bogus with respect to unions of structs
unless every field in every union member is covered by an LLVM
field.  This cannot be done by converting only one union member,
as is done right now.



------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.



More information about the llvm-bugs mailing list