[LLVMbugs] [Bug 19969] New: IMAGE_COMDAT_SELECT_ASSOCIATIVE sections produced with an invalid comdat
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Fri Jun 6 09:14:46 PDT 2014
http://llvm.org/bugs/show_bug.cgi?id=19969
Bug ID: 19969
Summary: IMAGE_COMDAT_SELECT_ASSOCIATIVE sections produced with
an invalid comdat
Product: libraries
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: Backend: X86
Assignee: unassignedbugs at nondot.org
Reporter: rafael.espindola at gmail.com
CC: llvmbugs at cs.uiuc.edu, rnk at google.com
Classification: Unclassified
Given
struct foo {
foo();
};
template <class T> struct bar {
static foo zed;
};
template <class T>
foo bar<T>::zed;
template class bar<int>;
clang produces (after some simplification)
target triple = "i686-pc-windows-msvc"
%struct.foo = type { i8 }
@"\01?zed@?$bar at H@@2Ufoo@@A" = weak_odr global %struct.foo zeroinitializer,
align 1
@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void
()*, i8* } { i32 65535, void ()* @"\01??__Ezed@?$bar at H@@2Ufoo@@A at YAXXZ", i8*
getelementptr inbounds (%struct.foo\
* @"\01?zed@?$bar at H@@2Ufoo@@A", i32 0, i32 0) }]
define linkonce_odr void @"\01??__Ezed@?$bar at H@@2Ufoo@@A at YAXXZ"() {
entry:
%call = call x86_thiscallcc %struct.foo* @"\01??0foo@@QAE at XZ"(%struct.foo*
@"\01?zed@?$bar at H@@2Ufoo@@A")
ret void
}
declare x86_thiscallcc %struct.foo* @"\01??0foo@@QAE at XZ"(%struct.foo* returned)
which seems reasonable. The problem is that the llc produced assembly has
.section .bss,"bw",discard,"?zed@?$bar at H@@2Ufoo@@A"
...
.section .CRT$XCU,"rd",associative .bss,"?zed@?$bar at H@@2Ufoo@@A"
The symbol ?zed@?$bar at H@@2Ufoo@@A" cannot be in two sections at the same time.
Given the description of how assoc works in the coff documentation, it looks
like the comdat name is not actually used. It is kept iff the associated
section is kept.
Right now this is not noticed because the comdat is the .section is ignored and
the produce .obj end up having the first output symbol as a comdat, what ever
that happens to be. In the above case, none at all.
msvc seems to create a symbol just for this (...$initializer$...). We probably
just produce a temp symbol.
--
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/20140606/5d62eb8a/attachment.html>
More information about the llvm-bugs
mailing list