<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Nov 14, 2018, at 4:28 PM, Teresa Johnson <<a href="mailto:tejohnson@google.com" class="">tejohnson@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><div dir="ltr" class=""><br class=""><br class=""><div class="gmail_quote"><div dir="ltr" class="">On Wed, Nov 14, 2018 at 1:47 PM Steven Wu <<a href="mailto:stevenwu@apple.com" class="">stevenwu@apple.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex;"><div style="overflow-wrap: break-word;" class="">Here is a small reduced test case using the same main.c and foo.c from the review:<div class="">cat main.c</div><div class=""><div class=""></div><blockquote type="cite" class=""><div class="">int foo();</div><div class="">int main() {</div><div class=""> <span class="Apple-converted-space"> </span>return foo();</div><div class="">}</div></blockquote><div class=""><br class=""></div><div class=""><div class="">cat foo.c</div><div class=""></div></div><blockquote type="cite" class=""><div class=""><div class="">#include <stdlib.h></div><div class="">static int gFoo = 1;</div><div class="">int foo() {</div><div class=""> <span class="Apple-converted-space"> </span>return gFoo;</div><div class="">}</div><div class="">void bar() {</div><div class=""> <span class="Apple-converted-space"> </span>gFoo = rand();</div><div class="">}</div></div></blockquote><div class=""><div class=""><br class=""></div><div class="">cat test1.c</div><div class=""><div class=""><div class=""></div></div><blockquote type="cite" class=""><div class=""><div class="">int foo();</div></div><div class="">int test() {</div><div class=""> <span class="Apple-converted-space"> </span>return foo();</div><div class="">}</div></blockquote><div class=""><div class=""><br class=""></div><div class="">cat test2.c</div><div class=""><div class=""></div></div></div></div><blockquote type="cite" class=""><div class=""><div class=""><div class=""><div class="">int foo();</div><div class="">int bar();</div></div><div class="">int test() {</div><div class=""> <span class="Apple-converted-space"> </span>return foo() + bar();</div><div class="">}</div></div></div></blockquote><div class=""><br class=""></div><div class="">To reproduce:</div><div class="">$ clang -O3 -flto=thin -c main.c test1.c test2.c foo.c</div><div class="">$ clang -O3 -flto=thin -Wl,-cache_path_lto,lto.cache main.o test2.o foo.o</div><div class="">$ clang -O3 -flto=thin -Wl,-cache_path_lto,lto.cache main.o test1.o foo.o</div><div class="">Undefined symbols for architecture x86_64:</div><div class=""><div class=""> <span class="Apple-converted-space"> </span>"_gFoo.llvm.17695746433417383459", referenced from:</div><div class="">     <span class="Apple-converted-space"> </span>_main in lto.o</div></div></div></div></div></blockquote><div class=""><br class=""></div><div class="">I can't reproduce this, although I am using gold (with  -Wl,-plugin-opt,cache-dir=lto.cache) since I don't have ld64. I notice that test() is dead, so with gold at least it is removed completely.</div><div class=""><br class=""></div><div class="">Do you have any temp files you can share (i.e. IR before and after importing)?</div></div></div></div></div></blockquote><div><br class=""></div><div>Attach all the intermediate file. I haven't had time to look in detail yet.</div><div><br class=""></div><div></div></div></body></html>