<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/80268>80268</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Bug] Clang-tidy: Suggests removing and duplicating Hungarian Notation prefixes at the same time
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
sdimovv
</td>
</tr>
</table>
<pre>
`Clang-tidy` suggests removing and duplicating the Hungarian Notation prefixes at the same time.
Here is a minimum reproducible example using `clang-tidy-18`:
* `Clang-tidy` version:
```sh
$ clang-tidy-18 --version
Ubuntu LLVM version 18.1.0
Optimized build.
```
* `.clang-tidy` config file:
<summary>
<details>
```yaml
---
FormatStyle: file
WarningsAsErrors: '*'
Checks: >
-*,
readability-identifier-naming
CheckOptions:
readability-identifier-naming.GlobalVariablePrefix: g
readability-identifier-naming.GlobalPointerPrefix: g
readability-identifier-naming.TypedefSuffix: _t
readability-identifier-naming.UnionSuffix: _t
readability-identifier-naming.TypeAliasSuffix: _t
readability-identifier-naming.ClassCase: CamelCase
readability-identifier-naming.VariableCase: CamelCase
readability-identifier-naming.ParameterCase: CamelCase
readability-identifier-naming.PointerParameterCase: CamelCase
readability-identifier-naming.ConstantParameterCase: CamelCase
readability-identifier-naming.ConstantPointerParameterCase: CamelCase
readability-identifier-naming.HungarianNotation.PrimitiveType.void: v
readability-identifier-naming.HungarianNotation.PrimitiveType.int8_t: s8
readability-identifier-naming.HungarianNotation.PrimitiveType.int16_t: s16
readability-identifier-naming.HungarianNotation.PrimitiveType.int32_t: s32
readability-identifier-naming.HungarianNotation.PrimitiveType.int64_t: s64
readability-identifier-naming.HungarianNotation.PrimitiveType.float: f32
readability-identifier-naming.HungarianNotation.PrimitiveType.double: f64
readability-identifier-naming.HungarianNotation.UserDefinedType.PVOID: t
readability-identifier-naming.HungarianNotation.UserDefinedType.INT8: t
readability-identifier-naming.HungarianNotation.UserDefinedType.INT16: t
readability-identifier-naming.HungarianNotation.UserDefinedType.INT32: t
readability-identifier-naming.HungarianNotation.UserDefinedType.INT64: t
readability-identifier-naming.HungarianNotation.UserDefinedType.uint8_t: t
readability-identifier-naming.HungarianNotation.UserDefinedType.UINT16: t
readability-identifier-naming.HungarianNotation.UserDefinedType.uint32_t: t
readability-identifier-naming.HungarianNotation.UserDefinedType.UINT64: t
readability-identifier-naming.HungarianNotation.UserDefinedType.float: t
readability-identifier-naming.HungarianNotation.UserDefinedType.double: t
readability-identifier-naming.HungarianNotation.General.TreatStructAsClass: true
readability-identifier-naming.HungarianNotation.DerivedType.Array: r
readability-identifier-naming.HungarianNotation.DerivedType.Pointer: p
readability-identifier-naming.HungarianNotation.DerivedType.FunctionPointer: p
readability-identifier-naming.VariableHungarianPrefix: LowerCase
readability-identifier-naming.ClassHungarianPrefix: LowerCase
readability-identifier-naming.LocalPointerHungarianPrefix: LowerCase
readability-identifier-naming.GlobalPointerHungarianPrefix: LowerCase
readability-identifier-naming.ParameterHungarianPrefix: LowerCase
readability-identifier-naming.PointerParameterHungarianPrefix: LowerCase
readability-identifier-naming.ConstantParameterHungarianPrefix: LowerCase
readability-identifier-naming.ConstantPointerParameterHungarianPrefix: LowerCase
readability-identifier-naming.TypedefHungarianPrefix: LowerCase
readability-identifier-naming.TypeAliasHungarianPrefix: LowerCase
readability-identifier-naming.UnionHungarianPrefix: LowerCase
readability-identifier-naming.GlobalVariableHungarianPrefix: LowerCase
```
</details>
</summary>
* `test.c`:
```c
#include <stdint.h>
typedef uint32_t MyType32_t;
typedef uint8_t MyType8_t;
void my_func(
MyType32_t t_MyType32,
MyType32_t *pt_MyType32,
MyType8_t t_MyType8,
MyType8_t *pt_MyType8,
const MyType32_t t_ConstMyType32,
const MyType32_t *pt_ConstMyType32,
const MyType8_t t_ConstMyType8,
const MyType8_t *pt_ConstMyType8,
uint32_t u32_Uint32,
uint32_t *pu32_Uint32,
uint8_t u8_Uint8,
uint8_t *pu8_Uint8,
const uint32_t u32_ConstUint32,
const uint32_t *pu32_ConstUint32,
const uint8_t u8_ConstUint8,
const uint8_t *pu8_ConstUint8
)
{}
```
* Run command:
```bash
$ clang-tidy-18 test.c
```
* Expected result:
`clang-tidy` finds no errors
* Actual result:
<summary>
<details>
```
$ clang-tidy-18 test.c
Error while trying to load a compilation database:
Could not auto-detect compilation database for file "test.c"
No compilation database found in /path/to/my/file or any parent directory
fixed-compilation-database: Error while opening fixed database: No such file or directory
json-compilation-database: Error while opening JSON database: No such file or directory
Running without flags.
16 warnings generated.
error: invalid identifier naming option 'TypeAliasHungarianPrefix' [clang-tidy-config,-warnings-as-errors]
error: invalid identifier naming option 'TypedefHungarianPrefix' [clang-tidy-config,-warnings-as-errors]
/path/to/my/file/test.c:8:16: error: invalid case style for parameter 't_MyType32' [readability-identifier-naming,-warnings-as-errors]
8 | MyType32_t t_MyType32,
| ^~~~~~~~~~
| MyType32
/path/to/my/file/test.c:9:17: error: invalid case style for pointer parameter 'pt_MyType32' [readability-identifier-naming,-warnings-as-errors]
9 | MyType32_t *pt_MyType32,
| ^~~~~~~~~~~
| p_PtMyType32
/path/to/my/file/test.c:10:15: error: invalid case style for parameter 't_MyType8' [readability-identifier-naming,-warnings-as-errors]
10 | MyType8_t t_MyType8,
| ^~~~~~~~~
| MyType8
/path/to/my/file/test.c:11:16: error: invalid case style for pointer parameter 'pt_MyType8' [readability-identifier-naming,-warnings-as-errors]
11 | MyType8_t *pt_MyType8,
| ^~~~~~~~~~
| p_PtMyType8
/path/to/my/file/test.c:12:22: error: invalid case style for constant parameter 't_ConstMyType32' [readability-identifier-naming,-warnings-as-errors]
12 | const MyType32_t t_ConstMyType32,
| ^~~~~~~~~~~~~~~
| ConstMyType32
/path/to/my/file/test.c:13:23: error: invalid case style for pointer parameter 'pt_ConstMyType32' [readability-identifier-naming,-warnings-as-errors]
13 | const MyType32_t *pt_ConstMyType32,
| ^~~~~~~~~~~~~~~~
| p_PtConstMyType32
/path/to/my/file/test.c:14:21: error: invalid case style for constant parameter 't_ConstMyType8' [readability-identifier-naming,-warnings-as-errors]
14 | const MyType8_t t_ConstMyType8,
| ^~~~~~~~~~~~~~
| ConstMyType8
/path/to/my/file/test.c:15:22: error: invalid case style for pointer parameter 'pt_ConstMyType8' [readability-identifier-naming,-warnings-as-errors]
15 | const MyType8_t *pt_ConstMyType8,
| ^~~~~~~~~~~~~~~
| p_PtConstMyType8
/path/to/my/file/test.c:17:15: error: invalid case style for pointer parameter 'pu32_Uint32' [readability-identifier-naming,-warnings-as-errors]
17 | uint32_t *pu32_Uint32,
| ^~~~~~~~~~~
| pu32_Pu32Uint32
/path/to/my/file/test.c:19:14: error: invalid case style for pointer parameter 'pu8_Uint8' [readability-identifier-naming,-warnings-as-errors]
19 | uint8_t *pu8_Uint8,
| ^~~~~~~~~
| pu8_Pu8Uint8
/path/to/my/file/test.c:21:21: error: invalid case style for pointer parameter 'pu32_ConstUint32' [readability-identifier-naming,-warnings-as-errors]
21 | const uint32_t *pu32_ConstUint32,
| ^~~~~~~~~~~~~~~~
| pu32_Pu32ConstUint32
/path/to/my/file/test.c:23:20: error: invalid case style for pointer parameter 'pu8_ConstUint8' [readability-identifier-naming,-warnings-as-errors]
23 | const uint8_t *pu8_ConstUint8
| ^~~~~~~~~~~~~~
| pu8_Pu8ConstUint8
14 warnings treated as errors
```
</details>
</summary>
So it seems `clang-tidy` suggests removing the Hungarian notation prefixes from any `typedef` types, but at the same time wants to duplicate the prefixes of primitive types.
I commented on #64864, but since I don't quite have the same issue, I decided to raise a new ticket.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Wl9z4jgS_zTmpQsKy2DMAw8MGXZzNZtJbSZzjylhy6BdW_LpDxnu4T77leQ_2GCIIV5qisF2969bP7ek7o6wlHTLCFk40y_O9GGAtdpxsZARTfl-P9jw6LBw_PEqwWw7VDQ6OP4YpN5uiVQSBEn5nrItYBZBpLOEhliZa7Uj8LtmWywoZvDEFVaUM8gEiekvIgErKyJxSkDRlIzAGT8442X-_TsRBKgEDCllNNUpCJIJHumQbhIC5BdOs4SAlsaU44_DyruhGzj-2PGWdTgHLeFsDHsiJOXsKOqP839yV2pNoAEMw2GpZAVeN5opDd--_fyjRAM3GLmjcf4c4HumaEr_SyLYaJpEoxNLLT6OwoaTIWcx3UJME3J01FtJnaZYHBzva3UrIgrTRB5vNU0dcJrkt4bDYf5jzUWK1Ys6WOzchn3wbywYZVu5lF-F4EKapw6aOWhpvq3IakfCv_MHpUGAoZVYFZeC4AhvaELVYUgjwhSNKRFDhlPKtjUUwxFnshredcXRbwnf4OSniatNQp5tPBk_tjdoP3PKFBG3Kv84ZCQi8YuOC7U31UnvlVHObtYy1pYJxfJcs5P-KsFSrrC0L3eFU5LYiy6qJbv3aT9jgVOiiLhTvXg5n0NZcSYVZqovmG5OdcKslsVyVRw9C5pSRffEvPPRntPIYO97QaNMBW_K4MmgL0DXLxBdvy9IDxWQHuoL0p8UkP6kXKE-hxknHFvEuCcnI643xeJb-Xgr4qsk4oHElJHIYj7__P74YCC7rTIfAz4-_Qh6xnP9ngE91DOgP-kTUB8nYV-Qr73TqGuzsE8v-6WymoN9AR7n4C2b6znub4QRgZPRD0FMUiV0qJbS7sEWW2hy7yL0QATdF94uhcAHAyj6QCt2NYOX3TnsOtxas9DcPIft5myZdlRWjgnaN_5ebLqdkCzvn4f5xsMqWfw8WiP3_DxclYv0AHWS3XRAvDH76g_xdle7ZfX9ANmE_fNQtmLoK-K6T6v2wtRbOWh9Vl7au2d1aL2UVUSqUdhSjZdWwlLcoyxMdETAlLYqokyNdieYKn9LUO5S8MfB8J1vWF_OZYJKJKhJ5N8mwYb08BZrFjqozIqPgKDeyotjOQtQl3DQMrsqFdRgggvP6yBNmdBEe9MjOwFaDZ4J57jdFIJT8MuOBG3QNfHq1WgPvb3aiwZW9dyAXJExdnRgnwatD61-m0DubcMP62qLoRPR0qWPxQvvKsFLHtQcrckWAT8vfsy-OLOHD5pCf2oGIU9TzKLzXtUGX-5WFfPvOvrXXxkJFYlAEKkTVbfQ7ETFlEUSGAeS94ROcJah0jg5Q7m_YXV9VEW30Pan4H1HEwJKHGzjkUPCcQTYkJbRJO87RljhTV6zF60nrpMIGFeAteLDiCgSqlYViLmwzTFwECo4RUX998QvqWgWAWXgoHWG1c5Ba8UdtE4PDlpbLC4AswNkWBCmIKKChIqLQw4b018kGtaQhzX_oT5onhFmRm016qOEJw5ShzsorZ2Y-EtydpOFf718f7rFwJ-aWb13qnZcK4gTvJVFA9T14b3oMcLW5s2KlM1RG14Gn7I9TmgEx20N8m0NuO0YgoNmF7dcNANn-qUWOXkj1UGrYWl5iOWwiOXpw522W_KG-yxfihNzIw85b2mq8LzkO_MzNEEn1SHJozUrsyPjZ32bsr5db8xe99OscQE4sxWcbIgXNkOoZGsfZ_r1f-XnVLRC6UzL3NAy60RLnjs26cl652fexs-VhKGVowZJZyxlb8_qdqZck4m507sjKOiHIHd8QtDlXKmNmhox7cET3MCI231OXQ2evqhxW6i5nCbePLuOcXMLScjxlgh1ISksqrTT-DnJRXuhClWDvylbzolozK42ppoA3bnyDFfeZwLqn-DKu8zVR8XCBb5aQ-te0iaGNLenAOtrKk5aOfugXmpfy8_W8yN_l8QbFrozOe08VTuEX19MTi8yea2c7D5XT0LvFr5m3XfEVr7qZWwvXM0qrrqUyx_sjy1UGaBn7aECrDtT83Ki3stUVbD3wtO8wdPVrkALSVdyCIPxrINGuf4xPXb16raEXQ6kRvOhD5aQezLzOvc7Oq_6ZTzVgbqzZnfL8aeCqt6I6YWz073yg2bO1VX_tkW_CL1TC-7kWC0rQUytDFg2-zBl1wQ-17l94UAVSEJSCWcdoPNDX81DXuzskFcseGrbHI4_LpqzBsj8lA5awUars4Ng8I6ZkqB4dZyMWIEKlMeQlX9Fz6GaZ8cebbeMMEOTrdQ9fxL4k9KepCwk8AgRZyZzgP9oqgjs8J4c_aBSamIUHiEiIY1IZPwRmEoCGBh5B0XDv4kqWhaDaOFFc2-OB2Thzsb-LPDmM3-wW8TBdB7HXjCPPTciJPBnwWQSTDw_2LhTl6ABXaAxmozR2HXH3tzzR9NpjP144_mbqYvmbuRMxiTFNBklyT4dcbEdWN8WwRj5wSDBG5JIe3IPodrLQsiZPgzEwigNN3ornck4oVLJI4yiKrFn_r7orTN9gNrZOG8JLx-e77vlbN9Ai2SxUyqzh7zQ2kHrLVU7vRmFPHXQ2jhV_DfMBP-LhMpBaztQ6aC1Hev_AwAA__9QzUC9">