http://llvm.org/bugs/show_bug.cgi?id=10006
Summary: Behavior of Overridden Initializations with Designated
Initializers
Product: clang
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P
Component: LLVM Codegen
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected]
When a designated initializer is used to override a previous initializer in an
initialization list and the overriding initializer does not explicitly
initialize all of the members from the previous initialization, the members not
explicitly initialized retain the values from the previous initialization.
Instead, the values for the subobjects in the prior initialization should be
completely discarded and the subobjects not initialized in the later
initialization should be implicitly initialized.
The below program demonstrates the issue:
#include <stdio.h>
struct foo { int a, b; };
int main(void) {
struct foo foo_array[2] =
{ {1, 2}, {3, 4}, [0] = { .a = 10 }, { .b = 40 } };
printf("{%d, %d}, {%d, %d}\n",
foo_array[0].a, foo_array[0].b,
foo_array[1].a, foo_array[1].b);
return 0;
}
When compiled with clang, the resulting program prints "{10, 2}, {3, 40}". I
believe the correct output (as per 9889:1999 ยง6.7.8p19) is "{10, 0}, {0, 40}"
and this is what gcc and Intel produce. Tested with clang 2.9 (trunk 120076)
and clang 3.0 (trunk 131958)
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs