forked from OSchip/llvm-project
1cab418ce2
If a function seen at compile time is not necessarily the one linked to the binary being built, it is illegal to change the actual arguments passing to it. e.g. -------------------------- void foo(int lol) { // foo() has linkage satisifying isWeakForLinker() // "lol" is not used at all. } void bar(int lo2) { // xform to foo(undef) is illegal, as compiler dose not know which // instance of foo() will be linked to the the binary being built. foo(lol2); } ----------------------------- Such functions can be captured by isWeakForLinker(). NOTE that mayBeOverridden() is insufficient for this purpose as it dosen't include linkage types like AvailableExternallyLinkage and LinkOnceODRLinkage. Take link_odr* as an example, it indicates a set of *EQUIVALENT* globals that can be merged at link-time. However, the semantic of *EQUIVALENT*-functions includes parameters. Changing parameters breaks the assumption. Thank John McCall for help, especially for the explanation of subtle difference between linkage types. rdar://11546243 llvm-svn: 192302 |
||
---|---|---|
.. | ||
2006-06-27-struct-ret.ll | ||
2007-02-07-FuncRename.ll | ||
2007-10-18-VarargsReturn.ll | ||
2007-12-20-ParamAttrs.ll | ||
2008-01-16-VarargsParamAttrs.ll | ||
2008-06-23-DeadAfterLive.ll | ||
2009-03-17-MRE-Invoke.ll | ||
2010-04-30-DbgInfo.ll | ||
2013-05-17-VarargsAndBlockAddress.ll | ||
basictest.ll | ||
canon.ll | ||
dbginfo.ll | ||
dead_vaargs.ll | ||
deadexternal.ll | ||
deadretval.ll | ||
deadretval2.ll | ||
keepalive.ll | ||
linkage.ll | ||
multdeadretval.ll | ||
returned.ll | ||
variadic_safety.ll |