<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/148805>148805</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Provide user friendly error message for `Function Import: link error: linking module flags 'ProfileSummary': IDs have conflicting values`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
lld,
PGO,
LTO
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zmodem
</td>
</tr>
</table>
<pre>
This error occurs when linking LLVM modules with different profile data. Example:
```
$ cat /tmp/a.c
extern int bar(int argc);
int main(int argc, char **argv) {
return bar(argc);
}
$ cat /tmp/b.c
int bar(int n) {
if (n == 1) {
return 0;
} else if (n % 2 == 1) {
return bar(3 * n + 1);
}
return bar(n / 2);
}
$ rm -f *.profraw *.profdata
$ build/bin/clang -O2 -fprofile-generate /tmp/a.c /tmp/b.c
$ LLVM_PROFILE_FILE=a.profraw ./a.out && build/bin/llvm-profdata merge -output=a.profdata a.profraw
$ LLVM_PROFILE_FILE=b.profraw ./a.out foo && build/bin/llvm-profdata merge -output=b.profdata b.profraw
$ build/bin/clang -O2 -flto=thin -fprofile-use=a.profdata -c /tmp/a.c
$ build/bin/clang -O2 -flto=thin -fprofile-use=b.profdata -c /tmp/b.c
$ build/bin/clang -O2 -flto=thin -fuse-ld=lld a.o b.o
ld.lld: error: Function Import: link error: linking module flags 'ProfileSummary': IDs have conflicting values: '<0x7f52dc008d50> = !{<0x7f52dc013e70>, <0x7f52dc020a30>, <0x7f52dc020ba0>, <0x7f52dc020be0>, <0x7f52dc003c40>, <0x7f52dc020c20>, <0x7f52dc014c10>, <0x7f52dc014c50>, <0x7f52dc0152a0>, <0x7f52dc0212b0>}' from b.o, and '<0x7f52dc0111a0> = !{<0x7f52dc013e70>, <0x7f52dc013eb0>, <0x7f52dc013ef0>, <0x7f52dc013f30>, <0x7f52dc013f70>, <0x7f52dc0145c0>, <0x7f52dc014c10>, <0x7f52dc014c50>, <0x7f52dc0152a0>, <0x7f52dc0161c0>}' from a.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```
At least after f53de29862193b761f3ef8ec0627d1e70d2fe674 the linker doesn't crash, but the message sounds like it's reporting an internal problem.
Can we find a more user friendly message? Maybe something like: "ThinLTO function import error: module a.o and b.o were compiled with different profile data".
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VlFvIycQ_jX4ZeTV7uDdtR_84IvP1Uk5JWqjvp5gGWx6LFjAOkl_fcXaSRzXd1UjtZJloWH4vuGD-VgRo9k6oiWrP7F6PRFD2vmw_LP3ivqJ9Op5-bAzESgEH8B33RAiPO7IgTXuu3FbuL39_Sv0Xg2WIjyatANltKZALsE-eG0sgRJJFPD5SfR7S4yvWDn-mvL0K1cMZ9CJBAw3qd8z3IiiY-WKnhIFB8YlkCIwnOeRCNuO4YLxT6xc5UAvjHs3dwPdTgRguGK4EmF7YLgA1uZ8gEBpCO6E9w6LtetTZZfVyLGa92W4c1CjgeHcAeNrxtdQnc-9UpZHGgDWroFspLdlWAP-fPGRmOdNQV7wacw7Q_z75nLaBvD6_kIP08y-KvIpBfH4Os6ndUqSg7Eq7z8LvOmscFuY3iFM9elop1tyFESidyd3KdwJLV-Vb_e_3m2-3H7-lv8YX4tX-mJc64cse8OwuSC39tBPX8qDnsKWYOqHtB_SK8w49Yr4E1Z5hVV7_xFm-cYsz5n_SUCbPOPrtDPuTM0h0vvNTLvLlvgwqryOKv8t6hBpahXja2sViMKDLDwrV1YVNodXR6_Ig83gumS8gy_93oeUQ9k13hJePORoH6Ct2EZg2N4fC_9t6HsRnhm2OfnLOsJOHAg677Q1XcorD8IOFPP0mHVTPrW6RtWV5VzVJeOfc1MBwyr309l0xanN09krzuNYCn49LsUP4nQtXvJudj2_w2vxatZVP4jXV-M1Xq-nQjnG2zXDFnTw_Xg-eAPCqUuRqqoSHxCp4iR_ENfX4_qqqBXX1_FndfdfilQ1VXcpkhgv8Xjp393hfEUpQOf7PguohbGkju8cPZkEnVcEVXbxIRJMD5A8RCIw7uA7kW9_tt-Lx65crRJYEjGB0IkC6JorwsW8wWrBZdtUmpOeU1c22KqK2lKhpqadQdrRS0nKU3QM2wRdEHGXNymHNGb0FKPYEkQ_OBXBmu8EJjFsIwTKrZhbR4zvKgUnbH6opaW-OBZ3Ixw8EmjjFAjofSAYYq4yGHLKPr_gM76Br-JZZqKesj1sR65jO-LDzrjbhzvQLzZgRht40_bU9tlDsray8PBIITd4v3-T-frnBEMsJmrJ1YIvxISWVVtj3SzaWTPZLeeNamWruKiw5VwiVaqca6zmuuZ13ciJWWKJddlWdTmv61ldzDWfSz1rWi5VvcCGzUrqhbFFNv_Ch-3ExDjQsprN52U9sUKSjeNHE2K2PUSGNwzx_pe71_Htwziu15OwHN8QOWwjm5XWxBTfgJNJlpb3wR-MuhT6-Nn1cpzaB2BN-f_ZalNOhmCXu5T22WMZbhhutibtBll0vj-9jWdP5B_UJYabUavIcHOS67DEvwIAAP__YUoarw">