[LLVMbugs] [Bug 11464] New: LinkModules fails to remap types
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Thu Dec 1 14:34:47 PST 2011
http://llvm.org/bugs/show_bug.cgi?id=11464
Bug #: 11464
Summary: LinkModules fails to remap types
Product: new-bugs
Version: trunk
Platform: Macintosh
OS/Version: MacOS X
Status: NEW
Severity: normal
Priority: P
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: boulos at cs.stanford.edu
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
I've got two simple c files with va_lists:
a.c:
#include <stdarg.h>
void fn1(va_list args) {}
b.c:
#include <stdarg.h>
void fn2(va_list args) {}
If I compile these to bitcode with clang and then link with llvm-link, I get an
output module that has two different va_list types:
%struct.__va_list_tag = type { i32, i32, i8*, i8* }
%struct.__va_list_tag.0 = type { i32, i32, i8*, i8* }
define void @fn1(%struct.__va_list_tag* %args) nounwind uwtable ssp {
%1 = alloca %struct.__va_list_tag*, align 8
store %struct.__va_list_tag* %args, %struct.__va_list_tag** %1, align 8
ret void
}
define void @fn2(%struct.__va_list_tag.0* %args) nounwind uwtable ssp {
%1 = alloca %struct.__va_list_tag.0*, align 8
store %struct.__va_list_tag.0* %args, %struct.__va_list_tag.0** %1, align 8
ret void
}
Having read the type system rewrite blog post, it seems like LinkModules should
be merging these types. After tracking this down in lib/Linker/LinkModules.cpp,
it seems that the TypeMap only learns types that it sees in "stuff" that will
overlap between the Dst and Src modules. Since fn2 doesn't overlap with fn1,
the TypeMap never tries to merge the two different va_list names, producing a
duplicate.
I'm not sure if this falls under the category of expecting to be able to find a
"magic IR type" or not.
--
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.
More information about the llvm-bugs
mailing list