<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/57290>57290</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
llvm::CloneModule bug "Referencing global in another module!"
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Hatsunespica
</td>
</tr>
</table>
<pre>
Test case:
```
@i1 = ifunc void (), void ()* ()* @f1
define void ()* @f1() {
%i1 = bitcast void ()* @i1 to i8*
}
```
Test code:
```
std::shared_ptr<llvm::Module> openInputFile(const string &inputFile,
llvm::LLVMContext &context) {
llvm::ExitOnError ExitOnErr;
auto MB =
ExitOnErr(errorOrToExpected(llvm::MemoryBuffer::getFile(inputFile)));
llvm::SMDiagnostic Diag;
auto pm = getLazyIRModule(std::move(MB), Diag, context,
/*ShouldLazyLoadMetadata=*/true);
if (!pm) {
Diag.print("", llvm::errs(), false);
return nullptr;
}
ExitOnErr(pm->materializeAll());
return std::move(pm);
}
void handle(std::shared_ptr<llvm::Module> ptr) {
std::shared_ptr<llvm::Module> newModule=llvm::CloneModule(*ptr,vmap);
llvm::verifyModule(*newModule,&llvm::errs());
}
void test(){
llvm::LLVMContext context;
std::shared_ptr<llvm::Module> pm = openInputFile(testfile, context);
handle(pm);
}
```
Verifier output:
```
Referencing global in another module!
%i1 = bitcast void ()* @i1 to i8*
; ModuleID = '/home/spica/test.ll'
void ()* @i1
; ModuleID = '/home/spica/test.ll'
Referencing global in another module!
%i2 = bitcast void ()* @i2 to i8*
; ModuleID = '/home/spica/test.ll'
void ()* @i2
; ModuleID = '/home/spica/test.ll'
```
Similar to another issue I mentioned before >_<
https://github.com/llvm/llvm-project/issues/55991
cc @regehr
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VtuO4jgQ_ZrwYjUKDpDmIQ9ctS01Gml6NK8jE1eIV44d2Q7bPV-_ZSeQwNA7rWktiiC263rqVJmD5m_ZN7CO5MxClCyjeBPFy2ged0-7nMZiQqJkQ0TRqJyctOAkoo8RXUR0fb1cDt-mcTHpTIRvDoVQ8ItCEAtLEqWrVpSgwKzzehAOw3N39FDAaSJw5xx5uhk6vE3kl-82d83fzd067o-SpS2ZAf6jdiZK1lKeqnZ7r3kjUXtLdA3qSdWN2wncoI-5VmjbOiPUEaOei_5sfc7x45_e4_Pz9_1aKwevzpvN29cb8Hrx7atwX9TWGG3I5T1KLpKsQQT3Kw_0MKpelD6CV_5ivuntaw25A457AwSg0uZt1RQFmHbnCGcMBjkvuie5E-PLfiPYUWnrRE786218dRWIgIaf2c-3p68d6vTxUp5Kn_x6v-pIGazg7wWeD2Ae0R0S6aXUjeTez7NmfA-OceaYhwdJRnfONHCdhyhaUk7q6qYKJIQxrpECLojQ8KwHqSO2tm-lgkl7Y50QA64xiqhGysC-vkPSS8mG5aqrB-RjxRwYwaT4CUspzy6Glju7txCGLC5iNw0VWrBkil-j_9vm8CfX2HxcV8E_58WmP19LreDCA6xNcLE-Vax-j2YnBKR4G-r0ppEfdH6_LP8NhsMJ0knea79ht565mPwBCF0H3A4Z771oZ0pP9WH2l1q9V9Z7E_K7B0qAIbpx6Ou92fgVsOVB5X7AHaU-MEmEIkxpV6Ju1QE7-dxAT1akReFpE3QjmmIXlrpC0ztbi5z5pkQYxp7l6aAyN4Y_Y-8PMqW_y5T-X5nSz9i7y4cXUQnJjA_4nLOwtgHyRCpQTmAncnKAQhtAT9sfyOFWsXSutp4-frLujsKVzWGca6TiLpC8_Xmojf4bLxZcBrPYebvZbLG4-u-Q5z45A0coDRlBNpnPJ5SmSZKMeJbwRbJgIyechOzujCCHxt_C9KOVpHTUGJl9IoGULuJRmXGaxHQ-BZbmwH2cNH6EQ5ImU5gtZnQ2kuwA0mbRDK8uigOphdZfFLPNSGQ0pqiBRqYxndAxn0yLWXwo0oTyIskXiAlUTMixj2OszXFkAgAPmK_FQymss_0hs1YcFUBwh_bxdi21yf5izjYKAilGwX8W4v8XWTfiGg">