<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/132077>132077</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
llvm::ConstantStruct::get returns a zero initialiser
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
aldrinmathew
</td>
</tr>
</table>
<pre>
LLVM Version: 19
OS: Ubuntu 24.04 LTS
Target Triple: x86_64-unknown-linux-gnu
When `llvm::ConstantStruct::get` is called with a named struct type and zero value members, the `llvm::Constant*` returned is automatically a `zeroinitialiser`
```cpp
llvm::ConstantStruct::get(
llvm::dyn_cast<llvm::StructType>(finalTy->get_llvm_type()),
{llvm::ConstantPointerNull::get(llPtrTy),
llvm::ConstantInt::get(
llvm::Type::getIntNTy(
ctx->irCtx->llctx,
ctx->irCtx->clangTargetInfo->getTypeWidth(
ctx->irCtx->clangTargetInfo->getSizeType()
)
),
0u
)}
)
```
I can understand the sentiment behind this.
Later in the code when I use `constVal->getAggregateElement(0u)`, it fails saying that the value is not an aggregate.
I see two possible solutions:
1. Change the API so that the structural integrity of the constant value is maintained - The values are stored as is.
2. Update `getAggregateElement` to consider this edge case and return a zero value of the element type instead.
I don't know if this was already found or fixed. If so, kindly ignore and close the issue.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVN9v2zgM_muUFyKBIufngx-8rAUC9HYFmnWPBW3Rtm6KFEh0U--vP8hOlqIbbmcYsECTHz9-IokxmsYR5WL5SSw_T7Dj1occrQ7GHZFbOk9Kr_v84eH5L3imEI13IitgvhWy-PspHb-WneMO1GImF_BweBKyOGBoiOEQzMlS8nnbrF5Wi2nnvjt_dlNrXPc2bVwnZCFk8a0lB2IlrX09iqwQWbHzLjI6fuLQVTzaGmKxkmAiVGgtaTgbbgHB4ZE0xMETuD8RoNPwg4KHV7QdwZGOJYUo1A64pd8nEqpI4IG4C450yoId-yOySdl6wBSXQI0zbNCaSEGs5FhAOgxvdToJWfy5DrURsoCbn-7dS4WRRba7GcegQ38ikd0JtamNQ3vopyK7a4hfkuNLqjehqe3w7hKsWH_6lcGjN44pfOmsfU_D2kcOh_4WnJ5fo_fuP8iPDC9_946_JLzNFez6VPyWmJuwGw_WVvx2SfrxX2XRNWMT7V3tLxWnPN-M5vaC_v-inswPOtxU-sDqg-mmg-yu9mRbf063PPj-vOvx6vdQoYPOaQpJKT20WCTH5kiOoaTWDEYTZ2PAAzIFMG5wrLwmOKf230MXh96skuTPaC_0i6YJ1CDTnaWEKNRGdonJSqaGNgw1GhshYm9cA9wiD8hj65sIzjOgA7zizK68IxHw2cPJx2hKSxC97dh4F9NlDk7zGexadA0NkMXjHqK_pRhHrgtoIfVWEwz34OtLYWPj3Hgc0ThGk4ZrCocrwwgYEpIPpAEjjDKpGXw9aeRBkN-JsJLAfkhiNIVBXiDdEFQYx_kfJxnw_SK4cKMRZNwVxkUm1D9V0d4JtWZIiwpMPUKfMQLaQKh7qH3nNPgAtXkjPYN9DdGnq_hunLY9mMb5MHKorI-jdCbGjmYTnWd6m21xQvl8vVALuZXL5aTNcbVWst5strLelrSk-bqUEjclrRaLerWWE5MrqZYym2_nm0wuF7NSZ7peL1dyM9_idp6JhaQjGjtLYznzoZkMKfN5puR6PbFYko3DllfK0XkkJJRKSz_kKWhadk0UC2lN5HiDYcOW8j9utIve8Sr4uy056YLNW-bT0FfqXqj7xnDblbPKH4W6H7DHz_QU_D9UsVD3A8Eo1P2lgtdc_RsAAP__d1Ujgg">