<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/135364>135364</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[HLSL] The type of the SV_GroupIndex semantic isn't validated correctly
</td>
</tr>
<tr>
<th>Labels</th>
<td>
HLSL
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
bogner
</td>
</tr>
</table>
<pre>
If we mark a `uint4` with the `SV_GroupIndex` semantic (rather than `uint`, as it should be), like so:
```hlsl
RWStructuredBuffer<float4> Buf : register(u0);
[numthreads(1,1,1)]
void main(uint4 GI : SV_GroupIndex) {
Buf[GI.x] = 0;
}
```
We hit a fairly confusing assert during clang codegen:
```
Assertion failed: ((i >= FTy->getNumParams() || FTy->getParamType(i) == Args[i]->getType()) && "Calling a function with a bad signature!"), function init, file Instructions.cpp, line 748.
...
* frame #4: 0x0000000102b7d7b0 clang-dxc`llvm::CallInst::init(this=0x0000600002cac360, FTy=0x000000013c82a320, Func=0x0000600002f82768, Args=ArrayRef<llvm::Value *> @ 0x000000016fdf2cd0, Bundles=ArrayRef<llvm::OperandBundleDefT<llvm::Value *> > @ 0x000000016fdf2cc0, NameStr=0x000000016fdf2d88) at Instructions.cpp:746:5
...
frame #8: 0x0000000104158f78 clang-dxc`clang::CodeGen::CGHLSLRuntime::emitEntryFunction(this=0x00006000013ac0f0, FD=0x000000013ca12630, Fn=0x0000600002f82768) at CGHLSLRuntime.cpp:412:20
```
This is because we blindly create the intrinsic with without checking the type in `emitInputSemantic`, where we should really have an assert:
```diff
--- a/clang/lib/CodeGen/CGHLSLRuntime.cpp
+++ b/clang/lib/CodeGen/CGHLSLRuntime.cpp
@@ -343,6 +343,7 @@ llvm::Value *CGHLSLRuntime::emitInputSemantic(IRBuilder<> &B,
if (D.hasAttr<HLSLSV_GroupIndexAttr>()) {
llvm::Function *GroupIndex =
CGM.getIntrinsic(getFlattenedThreadIdInGroupIntrinsic());
+ assert(GroupIndex->getType() == Ty && "Incorrect type for SV_GroupIndex");
return B.CreateCall(FunctionCallee(GroupIndex));
}
if (D.hasAttr<HLSLSV_DispatchThreadIDAttr>()) {
```
The actual bug is that we aren't checking the type of SV_GroupIndex in SemaDeclAttr:
```c++
case ParsedAttr::AT_HLSLSV_GroupIndex:
handleSimpleAttribute<HLSLSV_GroupIndexAttr>(S, D, AL);
break;
```
This doesn't do any semantic checking, so we allow any type through.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVltv4jgU_jXmxQIFOzceeAikdJFmZ0ctmnkcOckJ8dY4yJe2_PvVcUKBXkZaRFMSH5_b953PEdbKvQZYkmRFknIivOt6s6z6vQYzqfrmtNy29AXoQZgnKihJIy-1i0ka0RfpOuo6wIePP3_fm94ft7qBV1y0cBDayZoSlhvhOjDUdUKfHZA0ImxNhaXSUdv1XjW0AsIW-FTJJ6C2J7wgUfim0fDtlFUkKh5-PTrja-cNNCvftmAIX7eqFy4m_I6ufEsJL6iBvbQODGG5j9A1X43-kpX2B9cZEI0lLJ8Tth7_FiQpSVQ897KhByE17sV66f02-Lytky0oydApxiTJ6n47eyVJSQkvaTSGy8rrCoYEfgHtpKOCtkIadaJ1r1tvpd5TYS0YRxtv8K5WAq99A3vQYzuuPBXBWPYa_ShoMEHCcsJySQm_wyw2u9OU8Ls9uO_-8EMYcbDBAhNfk2x9ZRBWd6cj4P5gwUt0UZi9JclKkqQcLUejgNaCEpYSllLC2FooFYqgrdd1SCxwRNBKNBSJJhAzwuaEsRHrN0uppQsPpAK61TYgLHttZ_XxOLBCA83ifEaiYjbDK6WEFbQ14gCUMB5j_dFrNHzmEauyJquioYvT5rUmaaTU8wEbyQtMFsMMd0P03HXSEl4OTlK8sFrUfCDrZnd6W8MAvM6Z4GxY87p-t7HNWZbmuBg6yMvCGHF6gJbw9SWNn0J5zL5A5pI4uiogbZuW1U3wv_K6UfCll3-OYIRuBqsS2t0fYnwRpw5xvosDPDpzU2dYb_LAGuE-YsOLLE4JL5IrYOgFlvwdLPE8ydssv4El_B5x6Ru4H9jOi_X9X98evz147eQBhkdwkO5OO3PajMz5FLY5F3XUDtCU71ATc5byYUl_gVko9Cb4WGk8Z4QXLPo407tOWiotraAW3gJqZqWkbnC8DQgHQSqldkZqK-thMvDSe0frDuonHB20cacjGqJUYrFbffTucZTTUTdfOjAhxCidBoRSJ9qJZ6BCjyryTjAa2bYkKqbTKRWEbYaWs42SFWGbc9fZ5mPVUUHYavjS6v_ujCMk25THnLA1qsRq-JnRcekTmn6B-m0jWL59WHmpmqD-gdUsXRG2HvgnW5TCctYJWzgk9Bp93sj38PzuSskGLcfPJaszzTCxy94gjlFB1_d_z_bgtmdYCcv34DZKOAcaml04Y7bNVo9bL2ZDzPGQYKszZiy_BPkgt2dJ3p2uVHer694YqN1AnLY3708p9hYo1GbAeaPparYOvEQhJCw_14m3ADd5XKdKhwPtTx0upT0KV3dj8eUXff4wP0BF7bxQtPJ7nCTXCYccFwbplX02JX17WyuODTKkhFoNYW9GoB6JjPnXwgL9IYyF5mzJi2L3-wNNBh-0E6itj_JwVIAbZOUd_JlWjziqZTgBvl0aWBkQTyPun0hI04Mdym16KvTp8iZ1Lh8d2j50Rqn-JRiFbrjO9H7fzSbNkjcLvhATWM6zOOZZFqd80i2zvGVxksSLLBILaIUQIOYQQ1UladVU7UQuWcSSKJ7P53yexXyWxPNMxHUCeVrXVSZIHMFBSDXDAZn1Zj-R1npYznnC03iiRAXKhpdJxrAzSL6knJgl2k8rv7ckjpS0zl48OOlUeAENG5KS7q7gRahvIX7rhxz79CyUbISDho6DoE4Tb9Syc-5oET22IWyzl67z1azuDyhdON7Dv-nR9P9C7QjbhFIsYZuxmucl-y8AAP__j6RU3g">