<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/59528>59528</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
llvm-dis: fail to generate a named struct that is only used by metadata of a global
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tianxiaogu
</td>
</tr>
</table>
<pre>
When a named type is only used by some values in a metadata of a global, the named type may not be printed out by `llvm-dis`.
Steps:
1. Download and unzip [test.zip](https://github.com/llvm/llvm-project/files/10231558/test.zip)
2. Run `llvm-dis test.bc` and you will get the following output:
```llvm
; ModuleID = 'test.bc'
source_filename = "Foo"
@g = external global i8, !test.meta !0
!0 = !{%Bar undef}
```
3. The named struct type `Bar` is not included in `test.ll`. We cannot generate `test.bc` back from `test.ll` by using `llvm-as`.
The test input (`test.bc`) can be generated by the following program.
```c
#include <llvm-c/Core.h>
#include <llvm-c/BitWriter.h>
int main() {
LLVMContextRef context = LLVMContextCreate();
LLVMModuleRef module = LLVMModuleCreateWithNameInContext("Foo", context);
LLVMBuilderRef builder = LLVMCreateBuilderInContext(context);
// create a named type
LLVMTypeRef type = LLVMStructCreateNamed(context, "Bar");
LLVMValueRef value = LLVMGetUndef(type);
LLVMValueRef global = LLVMAddGlobal(module, LLVMInt8TypeInContext(context), "g");
unsigned id = LLVMGetMDKindIDInContext(context, "test.meta", 9);
LLVMMetadataRef meta = LLVMValueAsMetadata(value);
LLVMGlobalSetMetadata(global, id, LLVMMDNodeInContext2(context, &meta, 1));
LLVMWriteBitcodeToFile(module, "test.bc");
// clean memory
LLVMDisposeBuilder(builder);
LLVMDisposeModule(module);
LLVMContextDispose(context);
return 0;
}
```
The issue can be reproduced with 6efa850b096dc31f8e161374c1881ad715f9b946.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVk-P27gP_TTKhWggy7FjH3KYJL8Ug1-nh7bbOS5ki060K0uBLHWafvqFJDv_Jl1ggYFHjsjH90iKFh8GudeIK1KsSbGdce8Oxq6c5Pqn5GbvZ40Rp9XrATVw0LxHAe50RJADGK1O4AcU0JxgMD3CD648DiCDbY-OC-44mA447JVpuCJsA-6A1zg9P4E2DhqEo5XaoQDjXUAkJVXqR_9ByIGUdE7oltCn9Pzq8DiQfHzL5rA1b1oZLoBrAV7_kkcgxdrh4Oa_5JEUW8Kqg3PJie0I2-2lO_hm3pqesF2IM_77cLTmL2wdYbtOKhwI22WU5VlRVITtzoisTrHZHL54fc0Vok3TkpJGNifj4U0qBXt0UXxnlDJvUu-D0KN3Zx3js6TpL5JKP-VreDHCK3zeAsm3QNhyisKWyWYw3rb4Z-AcsjuasZ0xhLEb_AXdx1386dBqrsbagKxCeQjLInQoX3ihN74soyNyRpZrwoo1t-C1wI4st3f802s-h2_nig_O-talwpOSrrkNWZJD7ACpW-UFitA-pKSRhVKh9PCK0HIdjPao0XKHZ4uU6Ia3f0NnTX_rGdrIDyHVU4H4u15Kz8Ax-IHUR--AsOomAGF1YBC6dGIQu_62nkdr9pb384flbKcU5qNQIPkmcmoJ222MxfmB5P_7V6u1dK9WOrTXpvEptYOeSx2IsxpCceLvAJ8-fX_ZGO3wp_uCHbRpGat4tbWxyB0mb5LfOKfOC77Qx-XZN-0k11fpDp95j896RIxYU_-xzRT4Pf7aSyXQhgBNWl7IRejR4Br5AdgEmY43tNH1ZmZdB_12OkZJqRXHcF9je6agQYu4jhSOBgsdG-RcaQiO38PcC3BxAJ7xPqL7I54NVsX4D9jeeI8HcXJ_EuLjODarlPnAIuw8a1cFBb9JSeK6v2M6hvQ6TnwBUlwTfdn-X2rxvH0IGfHOY2EsaP0uDS_jyA9a0vwY8aPCp2HaJ6yKiXoHkOR-RXdleflySDHpf9l-NuKint1zLRPNDWQxHfcdF8_QWrrWCPxmdjIk9irDk9YwXW9rfW4uhVxDj72xp2vgrRyOZpgalrCqmVb3FEbLlzHoOfpdQkaBo_Xjxgew6LzVQC-l_s0wvsw6OQwep5Fm8WiN8C0KeJPuACV2vCpoQ-tStHnWVZiVWb5ctFlVZVwss6Krm3pRjoNuJla5qPOaz3CVlcuMFst8SWeHFS6qmpWs6Cqa07Kuy6aruyJnlBUL2vJ2JleMMpaxbMFYXmZ0zhtGOWuzBctzLNolWVDsuVTzMALnxu5nkfiqqAtWzRRvUA3x6sKYxrekKhSt2M7sKo7Nxu8HsqBKDm64oDjpFK7O14v8CTouFThz-cDwu2_Wgbt3l55Hd5yZt2r1n-8akXm4bERl_wQAAP__yUvrkg">