<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">