| Summary: | Duplicate member through anonymous unions not reported | ||
|---|---|---|---|
| Product: | gcc | Reporter: | Jan Engelhardt <jengelh> |
| Component: | c | Assignee: | Not yet assigned to anyone <unassigned> |
| Status: | RESOLVED DUPLICATE | ||
| Severity: | normal | ||
| Priority: | P3 | ||
| Version: | 4.5.0 | ||
| Target Milestone: | 4.6.0 | ||
| Host: | x86_64-suse-linux | Target: | x86_64-suse-linux |
| Build: | x86_64-suse-linux | Known to work: | |
| Known to fail: | Last reconfirmed: | ||
Fixed in 4.6. |
Given the following example: --- struct foo { int a; union { int a; double b; }; }; int main(void) { struct foo f; f.a = 123; return 0; } --- How it came to be: Accidental error where I had forgotten to remove foo.a after having added foo.{anonymous}.a. What has been observed: It compiles fine, which caused this programming error of mine to go unnoticed for half a day. It seems gcc gives foo.a precedence over foo.{anonymous}.a when accessing it through f.a=.... What had been expected: I would have liked that gcc emit at least a warning because f.a is ambiguous.