แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ LLVM 8-แƒจแƒ˜ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ LLVM 8-แƒจแƒ˜ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—
แƒแƒ  แƒฌแƒ”แƒšแƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒ’แƒแƒ•แƒ˜แƒ“แƒ LLVM แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ‘แƒแƒšแƒ แƒ™แƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒฉแƒ•แƒ”แƒœแƒ˜ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒ™แƒ•แƒšแƒแƒ• แƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ“แƒแƒฃแƒชแƒ•แƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒ›แƒงแƒ•แƒแƒœแƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ— แƒ“แƒ แƒ•แƒ˜แƒžแƒแƒ•แƒ˜แƒ— แƒแƒฎแƒแƒš แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒก LLVM 8.0.0 แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒแƒจแƒ˜.

แƒ“แƒแƒกแƒแƒฌแƒ”แƒ แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ

แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜ แƒ’แƒ˜แƒ—แƒฎแƒ แƒแƒ—, แƒแƒ  แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ. แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ–แƒ” แƒฌแƒ”แƒ แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ™แƒ•แƒ” แƒ แƒแƒ›แƒ“แƒ”แƒœแƒฏแƒ”แƒ แƒ›แƒ” แƒ’แƒแƒ“แƒแƒ•แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— (1, 2, 3). แƒฏแƒแƒ‘แƒ˜แƒ แƒแƒฎแƒแƒšแƒ–แƒ” แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒแƒ  แƒ›แƒแƒฅแƒ•แƒก.

แƒงแƒแƒ•แƒ”แƒš แƒฏแƒ”แƒ แƒ–แƒ”, แƒ แƒแƒ“แƒ”แƒกแƒแƒช LLVM-แƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก แƒแƒœ แƒ’แƒแƒœแƒแƒฎแƒšแƒ“แƒ”แƒ‘แƒ Clang แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒก แƒฉแƒ•แƒ”แƒœแƒก แƒคแƒแƒกแƒขแƒแƒ–แƒ”:

แƒœแƒแƒฎแƒ”แƒ—, Clang Static Analyzer-แƒ˜แƒก แƒแƒฎแƒแƒšแƒ›แƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ› แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ แƒแƒฎแƒแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ! แƒ›แƒ”แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ› PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒฅแƒขแƒฃแƒแƒšแƒแƒ‘แƒ แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. Clang แƒแƒฆแƒ›แƒแƒแƒฉแƒ”แƒœแƒก แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒข แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก, แƒ•แƒ˜แƒ“แƒ แƒ” แƒแƒ“แƒ แƒ” แƒ“แƒ แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ PVS-Studio-แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒก. แฒ แƒแƒก แƒคแƒ˜แƒฅแƒ แƒแƒ‘ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘?

แƒแƒ›แƒแƒ–แƒ” แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒœแƒ“แƒ แƒ•แƒฃแƒžแƒแƒกแƒฃแƒฎแƒ:

แƒแƒ แƒช แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฏแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒฃแƒกแƒแƒฅแƒ›แƒแƒ“! แƒฉแƒ•แƒ”แƒœ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒ’แƒแƒ•แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ— PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜. แƒแƒกแƒ” แƒ แƒแƒ› แƒแƒ  แƒ˜แƒœแƒ”แƒ แƒ•แƒ˜แƒฃแƒšแƒแƒ—, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ— แƒšแƒ˜แƒ“แƒ”แƒ แƒแƒ‘แƒแƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ“แƒ แƒ”.

แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“, แƒ”แƒก แƒชแƒฃแƒ“แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒ. แƒ›แƒแƒกแƒจแƒ˜ แƒแƒ แƒแƒœแƒแƒ˜แƒ แƒ˜ แƒ›แƒขแƒ™แƒ˜แƒชแƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ แƒแƒ  แƒแƒ แƒ˜แƒก. แƒ“แƒ แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ•แƒฌแƒ”แƒ  แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒก แƒแƒฎแƒšแƒ. แƒแƒกแƒ” แƒ แƒแƒ›, LLVM แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ“แƒ แƒ“แƒ แƒ›แƒแƒกแƒจแƒ˜ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ˜แƒฅแƒœแƒ แƒœแƒแƒžแƒแƒ•แƒœแƒ˜. แƒแƒฎแƒšแƒ แƒ›แƒ” แƒ•แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘ แƒ›แƒแƒ—, แƒ แƒแƒช แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒฉแƒแƒœแƒ“แƒ. Clang Static Analyzer แƒ•แƒ”แƒ  แƒžแƒแƒฃแƒšแƒแƒ‘แƒก แƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒก (แƒแƒœ แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒฃแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ—). แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ. แƒ›แƒ”แƒขแƒ˜แƒช, แƒงแƒ•แƒ”แƒšแƒ แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ”แƒ แƒ— แƒกแƒแƒฆแƒแƒ›แƒแƒก แƒ•แƒ˜แƒžแƒแƒ•แƒ” แƒ“แƒ แƒฉแƒแƒ•แƒฌแƒ”แƒ แƒ”.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒแƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ™แƒ•แƒ˜แƒ แƒ แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ. แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“, แƒ—แƒแƒ•แƒก แƒ•แƒ”แƒ  แƒ•แƒ˜แƒขแƒแƒœแƒ“แƒ˜, แƒ แƒแƒ› แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒ”แƒขแƒแƒœแƒ :).

แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒ—แƒฃ แƒ’แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ— แƒ แƒ แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒจแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ“แƒแƒฃแƒชแƒ•แƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒ“แƒ’แƒ”แƒœแƒแƒ“, แƒ›แƒแƒจแƒ˜แƒœ แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ— แƒ’แƒแƒ”แƒชแƒœแƒแƒ— แƒแƒ›แƒแƒก แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ.

แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒ แƒซแƒ•แƒ”แƒšแƒ˜ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ

แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ™แƒ•แƒ” แƒแƒฆแƒ•แƒœแƒ˜แƒจแƒœแƒ”แƒ—, แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒแƒ แƒ˜ แƒฌแƒšแƒ˜แƒก แƒฌแƒ˜แƒœ LLVM แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ“แƒ แƒ“แƒ แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ“แƒ. แƒแƒฎแƒšแƒ แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒฌแƒแƒ แƒ›แƒแƒ’แƒ˜แƒ“แƒ’แƒ”แƒœแƒ— แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒแƒฎแƒแƒš แƒฏแƒ’แƒฃแƒคแƒก. แƒ แƒแƒขแƒแƒ› แƒแƒฆแƒ›แƒแƒแƒฉแƒ˜แƒœแƒ”แƒก แƒแƒฎแƒแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜? แƒแƒ›แƒ˜แƒก 3 แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก:

  1. LLVM แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ•แƒ˜แƒ—แƒแƒ แƒ“แƒ”แƒ‘แƒ, แƒชแƒ•แƒšแƒ˜แƒก แƒซแƒ•แƒ”แƒš แƒ™แƒแƒ“แƒก แƒ“แƒ แƒแƒ›แƒแƒขแƒ”แƒ‘แƒก แƒแƒฎแƒแƒš แƒ™แƒแƒ“แƒก. แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜แƒ, แƒแƒ แƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒš แƒ“แƒ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒš แƒ™แƒแƒ“แƒจแƒ˜. แƒ”แƒก แƒœแƒแƒ—แƒšแƒแƒ“ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก, แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ˜แƒฅแƒœแƒแƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒ แƒ แƒฎแƒแƒœแƒ“แƒแƒฎแƒแƒœ. แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ›แƒแƒก แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒแƒฅแƒ•แƒก แƒกแƒแƒ”แƒ แƒ—แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜แƒก แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ แƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ. แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜!
  2. แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ— แƒ“แƒ แƒ•แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒ— แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒ“แƒ˜แƒแƒ’แƒœแƒแƒ–แƒก. แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ“แƒแƒแƒ“แƒ’แƒ˜แƒœแƒแƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒแƒœ แƒ•แƒ”แƒ  แƒจแƒ”แƒแƒ›แƒฉแƒœแƒ˜แƒ แƒฌแƒ˜แƒœแƒ แƒกแƒ™แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก.
  3. PVS-Studio-แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ 2 แƒฌแƒšแƒ˜แƒก แƒฌแƒ˜แƒœ. แƒ›แƒ” แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ’แƒแƒ›แƒแƒ•แƒงแƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒชแƒแƒšแƒ™แƒ”แƒฃแƒš แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒแƒจแƒ˜, แƒ แƒแƒ—แƒ แƒœแƒแƒ—แƒšแƒแƒ“ แƒ›แƒ”แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ PVS-Studio-แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ.

แƒ“แƒ”แƒคแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ•แƒšแƒ”แƒœแƒ˜แƒšแƒ˜ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ 2 แƒฌแƒšแƒ˜แƒก แƒฌแƒ˜แƒœ

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N1: Copy-Paste

static bool ShouldUpgradeX86Intrinsic(Function *F, StringRef Name) {
  if (Name == "addcarryx.u32" || // Added in 8.0
    ....
    Name == "avx512.mask.cvtps2pd.128" || // Added in 7.0
    Name == "avx512.mask.cvtps2pd.256" || // Added in 7.0
    Name == "avx512.cvtusi2sd" || // Added in 7.0
    Name.startswith("avx512.mask.permvar.") || // Added in 7.0     // <=
    Name.startswith("avx512.mask.permvar.") || // Added in 7.0     // <=
    Name == "sse2.pmulu.dq" || // Added in 7.0
    Name == "sse41.pmuldq" || // Added in 7.0
    Name == "avx2.pmulu.dq" || // Added in 7.0
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V501 [CWE-570] แƒแƒ แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜ แƒฅแƒ•แƒ”แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ”แƒ‘แƒ˜ "Name.startswith("avx512.mask.permvar.")" "||"-แƒ˜แƒก แƒ›แƒแƒ แƒชแƒฎแƒœแƒ˜แƒ• แƒ“แƒ แƒ›แƒแƒ แƒฏแƒ•แƒœแƒ˜แƒ•. แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜. AutoUpgrade.cpp 73

แƒแƒ แƒฏแƒ”แƒ  แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ แƒฅแƒ•แƒ”แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒ— "avx512.mask.permvar.". แƒ›แƒ”แƒแƒ แƒ” แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒ–แƒ” แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒกแƒฎแƒ•แƒ แƒ แƒแƒ›แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ แƒฃแƒœแƒ“แƒแƒ“แƒแƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒ’แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ แƒ“แƒแƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒแƒ—.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N2: แƒขแƒ˜แƒžแƒ˜แƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ

enum CXNameRefFlags {
  CXNameRange_WantQualifier = 0x1,
  CXNameRange_WantTemplateArgs = 0x2,
  CXNameRange_WantSinglePiece = 0x4
};

void AnnotateTokensWorker::HandlePostPonedChildCursor(
    CXCursor Cursor, unsigned StartTokenIndex) {
  const auto flags = CXNameRange_WantQualifier | CXNameRange_WantQualifier;
  ....
}

แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ PVS-Studio: V501 แƒแƒ แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒฃแƒ แƒ˜ แƒฅแƒ•แƒ”แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ”แƒ‘แƒ˜ โ€žCXNameRange_WantQualifierโ€œ โ€ž|โ€œ-แƒ˜แƒก แƒ›แƒแƒ แƒชแƒฎแƒœแƒ˜แƒ• แƒ“แƒ แƒ›แƒแƒ แƒฏแƒ•แƒœแƒ˜แƒ•. แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜. CIndex.cpp 7245

แƒ‘แƒ”แƒญแƒ“แƒ•แƒ˜แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ แƒฏแƒ”แƒ  CXNameRange_WantQualifier.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N3: แƒ“แƒแƒ‘แƒœแƒ”แƒฃแƒšแƒแƒ‘แƒ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒแƒกแƒ—แƒแƒœ

int PPCTTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index) {
  ....
  if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian() ? 1 : 0)
    return 0;
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V502 [CWE-783] แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ '?:' แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒกแƒฎแƒ•แƒแƒœแƒแƒ˜แƒ แƒแƒ“, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ›แƒแƒกแƒแƒšแƒแƒ“แƒœแƒ”แƒšแƒ˜ แƒ˜แƒงแƒ. '?:' แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒก แƒฃแƒคแƒ แƒ แƒ“แƒแƒ‘แƒแƒšแƒ˜ แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒ˜ แƒแƒฅแƒ•แƒก แƒ•แƒ˜แƒ“แƒ แƒ” '==' แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒก. PPCTargetTransformInfo.cpp 404

แƒฉแƒ”แƒ›แƒ˜ แƒแƒ–แƒ แƒ˜แƒ—, แƒ”แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒšแƒแƒ›แƒแƒ–แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ. แƒ“แƒ˜แƒแƒฎ, แƒ•แƒ˜แƒชแƒ˜, แƒ แƒแƒ› แƒกแƒ˜แƒšแƒแƒ›แƒแƒ–แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฃแƒชแƒœแƒแƒฃแƒ แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ”แƒ‘แƒ˜ แƒ›แƒแƒฅแƒ•แƒก :).

แƒแƒฎแƒšแƒ, แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒ”แƒ‘แƒ˜, แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒฃแƒšแƒ”แƒ‘แƒ แƒคแƒแƒกแƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒœแƒแƒ˜แƒ แƒแƒ“:

(ISD == ISD::EXTRACT_VECTOR_ELT && (Index == ST->isLittleEndian())) ? 1 : 0

แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—, แƒแƒกแƒ”แƒ— แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒก แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ“แƒ”แƒก:

(ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian())

แƒ”แƒก แƒแƒจแƒ™แƒแƒ แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ. แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒ›แƒแƒ— แƒกแƒฃแƒ แƒ“แƒแƒ— 0/1 แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ แƒชแƒ•แƒšแƒแƒ“แƒ—แƒแƒœ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜. แƒ™แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒคแƒ แƒฉแƒฎแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒกแƒแƒ›แƒ˜แƒแƒœแƒ˜ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ แƒจแƒ”แƒ›แƒ:

if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == (ST->isLittleEndian() ? 1 : 0))

แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒกแƒแƒ›แƒ˜แƒแƒœแƒ˜ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜ แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒแƒจแƒ˜แƒจแƒ˜แƒ แƒ“แƒ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ  แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒก. แƒ“แƒ˜แƒ“แƒ˜ แƒกแƒ˜แƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ” แƒ’แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ— แƒ“แƒ แƒคแƒ แƒฉแƒฎแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒœแƒฃ แƒแƒฎแƒแƒ แƒ”แƒ‘แƒ—. แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“ แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒ” แƒแƒ› แƒ—แƒ”แƒ›แƒแƒก แƒแƒฅ, แƒ—แƒแƒ•แƒจแƒ˜ โ€žแƒฃแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ“แƒ˜ ?: แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒก แƒ“แƒ แƒฉแƒแƒกแƒ•แƒ˜แƒ— แƒ˜แƒ’แƒ˜ แƒคแƒ แƒฉแƒฎแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜โ€œ.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N4, N5: แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜

Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
  ....
  TypedInit *LHS = dyn_cast<TypedInit>(Result);
  ....
  LHS = dyn_cast<TypedInit>(
    UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get())
      ->Fold(CurRec));
  if (!LHS) {
    Error(PasteLoc, Twine("can't cast '") + LHS->getAsString() +
                    "' to string");
    return nullptr;
  }
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V522 [CWE-476] แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก แƒœแƒฃแƒšแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก 'LHS'-แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ. TGParser.cpp 2152

แƒ—แƒฃ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ LHS แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜แƒ, แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ˜แƒชแƒ”แƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒ›แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒฃแƒฅแƒ›แƒ“แƒ”แƒ‘แƒ: LHS->getAsString().

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒขแƒ˜แƒžแƒ˜แƒฃแƒ แƒ˜ แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ˜แƒ›แƒแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒ— แƒแƒ แƒแƒ•แƒ˜แƒœ แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก. แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜ แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ”แƒœ แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ› แƒ™แƒแƒ“แƒก, แƒแƒ  แƒแƒฅแƒ•แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒ’แƒ˜. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒ™แƒแƒ แƒ’แƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒแƒ•แƒกแƒ”แƒ‘แƒก แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜ แƒกแƒฎแƒ•แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ แƒ“แƒแƒชแƒ•แƒ˜แƒก แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒแƒก.

แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ RHS แƒœแƒ”แƒ‘แƒแƒ“แƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒ™แƒแƒ“แƒจแƒ˜: V522 [CWE-476] แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก null แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก 'RHS'-แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ. TGParser.cpp 2186

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N6: แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ’แƒแƒ“แƒแƒแƒ“แƒ’แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’

static Expected<bool>
ExtractBlocks(....)
{
  ....
  std::unique_ptr<Module> ProgClone = CloneModule(BD.getProgram(), VMap);
  ....
  BD.setNewProgram(std::move(ProgClone));                                // <=
  MiscompiledFunctions.clear();

  for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
    Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first);  // <=
    assert(NewF && "Function not found??");
    MiscompiledFunctions.push_back(NewF);
  }
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V522 [CWE-476] แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก null แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก 'ProgClone'-แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ. แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ.cpp 601

แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ™แƒšแƒแƒœแƒ˜ แƒฌแƒงแƒ•แƒ”แƒขแƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒคแƒšแƒแƒ‘แƒแƒก:

BD.setNewProgram(std::move(ProgClone));

แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒแƒฎแƒšแƒ แƒžแƒ แƒแƒ’แƒ™แƒšแƒแƒœแƒ˜ แƒแƒ แƒ˜แƒก แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฅแƒ•แƒ”แƒ›แƒแƒ—:

Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first);

แƒ›แƒแƒ’แƒ แƒแƒ›, แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ”แƒก แƒแƒ  แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ! แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ˜ แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜.

แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜ แƒแƒ แƒแƒกแƒฌแƒแƒ แƒแƒ“ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ’แƒแƒกแƒฃแƒคแƒ—แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜:

MiscompiledFunctions.clear();

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒแƒ› แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ–แƒแƒ›แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜:

for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {

แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒ›แƒ˜แƒกแƒแƒฎแƒ•แƒ”แƒ“แƒ แƒ˜แƒ, แƒ แƒแƒ› แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ˜ แƒแƒ  แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ. แƒ›แƒ’แƒแƒœแƒ˜ แƒ”แƒกแƒ”แƒช แƒฎแƒแƒ แƒ•แƒ”แƒ–แƒ˜แƒ แƒ“แƒ แƒ™แƒแƒ“แƒ˜ แƒกแƒฎแƒ•แƒแƒœแƒแƒ˜แƒ แƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ˜แƒฌแƒ”แƒ แƒแƒก.

แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒฎแƒ•แƒ“แƒ˜แƒ— แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ› แƒชแƒœแƒแƒ‘แƒ˜แƒš แƒžแƒแƒ แƒ˜แƒขแƒ”แƒขแƒก! แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ›แƒ”แƒแƒ แƒ”แƒก แƒœแƒ˜แƒฆแƒ‘แƒแƒ•แƒก :).

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N7: แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ’แƒแƒ“แƒแƒแƒ“แƒ’แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’

static Expected<bool> TestOptimizer(BugDriver &BD, std::unique_ptr<Module> Test,
                                    std::unique_ptr<Module> Safe) {
  outs() << "  Optimizing functions being tested: ";
  std::unique_ptr<Module> Optimized =
      BD.runPassesOn(Test.get(), BD.getPassesToRun());
  if (!Optimized) {
    errs() << " Error running this sequence of passes"
           << " on the input program!n";
    BD.setNewProgram(std::move(Test));                       // <=
    BD.EmitProgressBitcode(*Test, "pass-error", false);      // <=
    if (Error E = BD.debugOptimizerCrash())
      return std::move(E);
    return false;
  }
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V522 [CWE-476] แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก null แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก "แƒขแƒ”แƒกแƒขแƒ˜" แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ. แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜ แƒจแƒ”แƒ“แƒ’แƒ”แƒœแƒ.cpp 709

แƒ˜แƒกแƒ”แƒ• แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ. แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“, แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜ แƒ’แƒแƒ“แƒแƒแƒ“แƒ’แƒ˜แƒšแƒ“แƒ”แƒ‘แƒ, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ˜แƒกแƒ”, แƒ—แƒ˜แƒ—แƒฅแƒแƒก แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒแƒ›แƒฎแƒ“แƒแƒ แƒ. แƒ›แƒ” แƒฃแƒคแƒ แƒ แƒ“แƒ แƒฃแƒคแƒ แƒ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ•แƒฎแƒ”แƒ“แƒแƒ• แƒแƒ› แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒแƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ™แƒแƒ“แƒจแƒ˜ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ›แƒแƒซแƒ แƒแƒแƒ‘แƒ˜แƒก แƒกแƒ”แƒ›แƒแƒœแƒขแƒ˜แƒ™แƒ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ C++-แƒจแƒ˜. แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒ˜แƒงแƒ•แƒแƒ แƒก C++ แƒ”แƒœแƒ! แƒกแƒฃแƒš แƒฃแƒคแƒ แƒ แƒ“แƒ แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒ’แƒ–แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒคแƒ”แƒฎแƒ˜แƒก แƒ›แƒแƒกแƒแƒจแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“. PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก :).

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N8: แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜

void FunctionDumper::dump(const PDBSymbolTypeFunctionArg &Symbol) {
  uint32_t TypeId = Symbol.getTypeId();
  auto Type = Symbol.getSession().getSymbolById(TypeId);
  if (Type)
    Printer << "<unknown-type>";
  else
    Type->dump(*this);
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V522 [CWE-476] แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก null แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก 'แƒขแƒ˜แƒžแƒ˜แƒก' แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ. PrettyFunctionDumper.cpp 233

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, แƒแƒ›แƒแƒ‘แƒ”แƒญแƒ“แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ”แƒกแƒ˜, แƒแƒ  แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ. แƒฉแƒ•แƒ”แƒœแƒ—แƒแƒœ แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒกแƒ”แƒ—แƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒ. แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒ›แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒ แƒแƒ› แƒ›แƒแƒแƒ’แƒ•แƒแƒ แƒแƒก แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜, แƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ.

แƒกแƒฌแƒแƒ แƒแƒ“:

if (Type)
  Type->dump(*this);
else
  Printer << "<unknown-type>";

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N9: แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜

void SearchableTableEmitter::collectTableEntries(
    GenericTable &Table, const std::vector<Record *> &Items) {
  ....
  RecTy *Ty = resolveTypes(Field.RecType, TI->getType());
  if (!Ty)                                                              // <=
    PrintFatalError(Twine("Field '") + Field.Name + "' of table '" +
                    Table.Name + "' has incompatible type: " +
                    Ty->getAsString() + " vs. " +                       // <=
                    TI->getType()->getAsString());
   ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V522 [CWE-476] แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก null แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก 'Ty'-แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ. SearchableTableEmitter.cpp 614

แƒ•แƒคแƒ˜แƒฅแƒ แƒแƒ‘, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒœแƒแƒ—แƒ”แƒšแƒ˜แƒ แƒ“แƒ แƒแƒ  แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒก แƒแƒฎแƒกแƒœแƒแƒก.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N10: แƒขแƒ˜แƒžแƒ˜แƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ

bool FormatTokenLexer::tryMergeCSharpNullConditionals() {
  ....
  auto &Identifier = *(Tokens.end() - 2);
  auto &Question = *(Tokens.end() - 1);
  ....
  Identifier->ColumnWidth += Question->ColumnWidth;
  Identifier->Type = Identifier->Type;                    // <=
  Tokens.erase(Tokens.end() - 1);
  return true;
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V570 แƒชแƒ•แƒšแƒแƒ“แƒ˜ 'Identifier->Type' แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒ—แƒแƒ•แƒ˜แƒก แƒ—แƒแƒ•แƒก. FormatTokenLexer.cpp 249

แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒก แƒ—แƒแƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒแƒก แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก. แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒ›แƒแƒ— แƒกแƒฃแƒ แƒ“แƒแƒ— แƒ“แƒแƒ”แƒฌแƒ”แƒ แƒแƒ—:

Identifier->Type = Question->Type;

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N11: แƒกแƒแƒ”แƒญแƒ•แƒ แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ

void SystemZOperand::print(raw_ostream &OS) const {
  switch (Kind) {
    break;
  case KindToken:
    OS << "Token:" << getToken();
    break;
  case KindReg:
    OS << "Reg:" << SystemZInstPrinter::getRegisterName(getReg());
    break;
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V622 [CWE-478] แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— "แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜" แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ› แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ โ€žแƒกแƒแƒฅแƒ›แƒ˜แƒกโ€œ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜ แƒแƒ™แƒšแƒ˜แƒ. SystemZAsmParser.cpp 652

แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒแƒ”แƒญแƒ•แƒ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒ แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ. แƒแƒฅ แƒกแƒฎแƒ•แƒ แƒ แƒแƒ›แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ?

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N12: แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’

InlineCost AMDGPUInliner::getInlineCost(CallSite CS) {
  Function *Callee = CS.getCalledFunction();
  Function *Caller = CS.getCaller();
  TargetTransformInfo &TTI = TTIWP->getTTI(*Callee);

  if (!Callee || Callee->isDeclaration())
    return llvm::InlineCost::getNever("undefined callee");
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V595 [CWE-476] 'Callee' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ nullptr-แƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 172, 174. AMDGPUInline.cpp 172

แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ™แƒแƒšแƒ”แƒ” แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜ แƒแƒ แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก getTTI.

แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› แƒ”แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ“แƒ”แƒก แƒ—แƒแƒœแƒแƒกแƒฌแƒแƒ แƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก nullptr:

if (!Callee || Callee->isDeclaration())

แƒ›แƒแƒ’แƒ แƒแƒ› แƒฃแƒ™แƒ•แƒ” แƒ’แƒ•แƒ˜แƒแƒœแƒ˜แƒโ€ฆ

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N13 - N...: แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’

แƒฌแƒ˜แƒœแƒ แƒ™แƒแƒ“แƒ˜แƒก แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒฃแƒšแƒ˜ แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก. แƒแƒฅ แƒฉแƒแƒœแƒก:

static Value *optimizeDoubleFP(CallInst *CI, IRBuilder<> &B,
                               bool isBinary, bool isPrecise = false) {
  ....
  Function *CalleeFn = CI->getCalledFunction();
  StringRef CalleeNm = CalleeFn->getName();                 // <=
  AttributeList CalleeAt = CalleeFn->getAttributes();
  if (CalleeFn && !CalleeFn->isIntrinsic()) {               // <=
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V595 [CWE-476] 'CalleeFn' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 1079, 1081. SimplifyLibCalls.cpp 1079

แฒ“แƒ แƒแƒฅ:

void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
                            const Decl *Tmpl, Decl *New,
                            LateInstantiatedAttrVec *LateAttrs,
                            LocalInstantiationScope *OuterMostScope) {
  ....
  NamedDecl *ND = dyn_cast<NamedDecl>(New);
  CXXRecordDecl *ThisContext =
    dyn_cast_or_null<CXXRecordDecl>(ND->getDeclContext());         // <=
  CXXThisScopeRAII ThisScope(*this, ThisContext, Qualifiers(),
                             ND && ND->isCXXInstanceMember());     // <=
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V595 [CWE-476] 'ND' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 532, 534. SemaTemplateInstantiateDecl.cpp 532

แฒ“แƒ แƒแƒฅ:

  • V595 [CWE-476] 'U' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ nullptr-แƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 404, 407. DWARFormValue.cpp 404
  • V595 [CWE-476] 'ND' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ›แƒแƒœแƒแƒ›, แƒกแƒแƒœแƒแƒ› แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 2149, 2151. SemaTemplateInstantiate.cpp 2149

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒฃแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ’แƒแƒ•แƒฎแƒ“แƒ˜ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ แƒœแƒแƒ›แƒ แƒ˜แƒ— V595. แƒแƒกแƒ” แƒ แƒแƒ›, แƒแƒ  แƒ•แƒ˜แƒชแƒ˜, แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒกแƒฎแƒ•แƒ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒแƒฅ แƒฉแƒแƒ›แƒแƒ—แƒ•แƒšแƒ˜แƒšแƒ—แƒ แƒ’แƒแƒ แƒ“แƒ. แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N17, N18: แƒกแƒแƒ”แƒญแƒ•แƒ แƒชแƒ•แƒšแƒ

static inline bool processLogicalImmediate(uint64_t Imm, unsigned RegSize,
                                           uint64_t &Encoding) {
  ....
  unsigned Size = RegSize;
  ....
  uint64_t NImms = ~(Size-1) << 1;
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V629 [CWE-190] แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— '~(แƒ–แƒแƒ›แƒ - 1) << 1' แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. 32-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒขแƒ˜แƒก แƒ’แƒแƒ“แƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒ 64-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœ แƒขแƒ˜แƒžแƒ–แƒ” แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒ—. AArch64AddressingModes.h 260

แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒ  แƒ˜แƒงแƒแƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ“แƒ แƒ™แƒแƒ“แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ˜แƒกแƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒ˜แƒงแƒ แƒ’แƒแƒœแƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒšแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒแƒ”แƒญแƒ•แƒ แƒแƒ“แƒ’แƒ˜แƒšแƒ˜แƒ แƒ“แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ“แƒ”แƒก.

แƒ•แƒ—แƒฅแƒ•แƒแƒ— แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ–แƒแƒ›แƒ แƒฃแƒ“แƒ แƒ˜แƒก 16-แƒก แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒแƒ“แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜ แƒ’แƒ”แƒ’แƒ›แƒแƒ•แƒ“แƒ แƒ›แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒจแƒ˜ NImms แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ:

1111111111111111111111111111111111111111111111111111111111100000

แƒ—แƒฃแƒ›แƒชแƒ, แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ:

0000000000000000000000000000000011111111111111111111111111100000

แƒคแƒแƒฅแƒขแƒ˜แƒ, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒ แƒ’แƒแƒ›แƒแƒ—แƒ•แƒšแƒ แƒฎแƒ“แƒ”แƒ‘แƒ 32-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฃแƒฌแƒ”แƒ แƒ”แƒšแƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ”แƒก 32-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฃแƒฌแƒ”แƒ แƒ”แƒšแƒ˜ แƒขแƒ˜แƒžแƒ˜ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ•แƒ“แƒ”แƒ‘แƒ uint64_t. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒœแƒฃแƒšแƒ˜.

แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒแƒกแƒฌแƒแƒ แƒแƒ— แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ แƒแƒกแƒ”:

uint64_t NImms = ~static_cast<uint64_t>(Size-1) << 1;

แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ: V629 [CWE-190] แƒ˜แƒคแƒ˜แƒฅแƒ แƒ”แƒ— "Immr << 6" แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒ–แƒ”. 32-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒขแƒ˜แƒก แƒ’แƒแƒ“แƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒ 64-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœ แƒขแƒ˜แƒžแƒ–แƒ” แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒ—. AArch64AddressingModes.h 269

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N19: แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ แƒแƒ™แƒšแƒ˜แƒ แƒกแƒฎแƒ•แƒ?

void AMDGPUAsmParser::cvtDPP(MCInst &Inst, const OperandVector &Operands) {
  ....
  if (Op.isReg() && Op.Reg.RegNo == AMDGPU::VCC) {
    // VOP2b (v_add_u32, v_sub_u32 ...) dpp use "vcc" token.
    // Skip it.
    continue;
  } if (isRegOrImmWithInputMods(Desc, Inst.getNumOperands())) {    // <=
    Op.addRegWithFPInputModsOperands(Inst, 2);
  } else if (Op.isDPPCtrl()) {
    Op.addImmOperands(Inst, 1);
  } else if (Op.isImm()) {
    // Handle optional arguments
    OptionalIdx[Op.getImmTy()] = I;
  } else {
    llvm_unreachable("Invalid operand type");
  }
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V646 [CWE-670] แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ› โ€žแƒกแƒฎแƒ•แƒโ€œ แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ แƒแƒ™แƒšแƒ˜แƒ. AMDGPUAsmParser.cpp 5655

แƒแƒฅ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒแƒ  แƒแƒ แƒ˜แƒก. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜แƒก แƒ›แƒแƒจแƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜แƒ“แƒแƒœ แƒ›แƒแƒงแƒแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ if แƒ›แƒ—แƒแƒ•แƒ แƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒ‘แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒแƒ  แƒแƒฅแƒ•แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ, แƒแƒ แƒ˜แƒก แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ แƒกแƒฎแƒ•แƒ แƒ—แƒฃ แƒแƒ แƒ. แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ™แƒแƒ“แƒ˜ แƒ”แƒ แƒ—แƒœแƒแƒ˜แƒ แƒแƒ“ แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก. แƒ›แƒแƒ˜แƒœแƒช แƒ’แƒแƒฃแƒจแƒ•แƒ แƒกแƒฎแƒ•แƒ แƒฎแƒ“แƒ˜แƒก แƒ™แƒแƒ“แƒก แƒฃแƒคแƒ แƒ แƒ’แƒแƒฃแƒ แƒ™แƒ•แƒ”แƒ•แƒ”แƒšแƒก แƒ“แƒ แƒกแƒแƒจแƒ˜แƒจแƒก. แƒ—แƒฃ แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒจแƒ˜ แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒฅแƒ แƒ”แƒ‘แƒ, แƒ™แƒแƒ“แƒ˜ แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒแƒก แƒกแƒ แƒฃแƒšแƒ˜แƒแƒ“ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒแƒ“. แƒฉแƒ”แƒ›แƒ˜ แƒแƒ–แƒ แƒ˜แƒ— แƒฏแƒแƒ‘แƒ˜แƒ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ แƒกแƒฎแƒ•แƒ.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N20: แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒขแƒ˜แƒžแƒ˜แƒก แƒแƒ—แƒฎแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ

LLVM_DUMP_METHOD void Symbol::dump(raw_ostream &OS) const {
  std::string Result;
  if (isUndefined())
    Result += "(undef) ";
  if (isWeakDefined())
    Result += "(weak-def) ";
  if (isWeakReferenced())
    Result += "(weak-ref) ";
  if (isThreadLocalValue())
    Result += "(tlv) ";
  switch (Kind) {
  case SymbolKind::GlobalSymbol:
    Result + Name.str();                        // <=
    break;
  case SymbolKind::ObjectiveCClass:
    Result + "(ObjC Class) " + Name.str();      // <=
    break;
  case SymbolKind::ObjectiveCClassEHType:
    Result + "(ObjC Class EH) " + Name.str();   // <=
    break;
  case SymbolKind::ObjectiveCInstanceVariable:
    Result + "(ObjC IVar) " + Name.str();       // <=
    break;
  }
  OS << Result;
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜:

  • V655 [CWE-480] แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒ˜แƒคแƒ˜แƒฅแƒ แƒ”แƒ— "Result + Name.str()" แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒ–แƒ”. แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ.cpp 32
  • V655 [CWE-480] แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒ˜แƒคแƒ˜แƒฅแƒ แƒ”แƒ— "แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ + "(ObjC Class)" + Name.str()" แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒ–แƒ”. แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ.cpp 35
  • V655 [CWE-480] แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒ˜แƒคแƒ˜แƒฅแƒ แƒ”แƒ— "แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ + "(ObjC Class EH) " + Name.str()" แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ.cpp 38
  • V655 [CWE-480] แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒ˜แƒคแƒ˜แƒฅแƒ แƒ”แƒ— "แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ + "(ObjC IVar)" + Name.str()" แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒ–แƒ”. แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒ.cpp 41

แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ— += แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ + แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜. แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒแƒ แƒ˜แƒก แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ™แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N21: แƒ’แƒแƒœแƒฃแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒšแƒ˜ แƒฅแƒชแƒ”แƒ•แƒ

static void getReqFeatures(std::map<StringRef, int> &FeaturesMap,
                           const std::vector<Record *> &ReqFeatures) {
  for (auto &R : ReqFeatures) {
    StringRef AsmCondString = R->getValueAsString("AssemblerCondString");

    SmallVector<StringRef, 4> Ops;
    SplitString(AsmCondString, Ops, ",");
    assert(!Ops.empty() && "AssemblerCondString cannot be empty");

    for (auto &Op : Ops) {
      assert(!Op.empty() && "Empty operator");
      if (FeaturesMap.find(Op) == FeaturesMap.end())
        FeaturesMap[Op] = FeaturesMap.size();
    }
  }
}

แƒจแƒ”แƒ”แƒชแƒแƒ“แƒ”แƒ— แƒ—แƒแƒ•แƒแƒ“ แƒ˜แƒžแƒแƒ•แƒแƒ— แƒกแƒแƒจแƒ˜แƒจแƒ˜ แƒ™แƒแƒ“แƒ˜. แƒ“แƒ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒขแƒแƒœแƒแƒ“, แƒ แƒแƒ—แƒ แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ˜แƒ• แƒแƒ  แƒจแƒ”แƒฎแƒ”แƒ“แƒแƒ— แƒžแƒแƒกแƒฃแƒฎแƒก:

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ LLVM 8-แƒจแƒ˜ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V708 [CWE-758] แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒกแƒแƒจแƒ˜แƒจแƒ˜ แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ: 'FeaturesMap[Op] = FeaturesMap.size()', แƒกแƒแƒ“แƒแƒช 'FeaturesMap' แƒแƒ แƒ˜แƒก 'map' แƒ™แƒšแƒแƒกแƒ˜แƒก. แƒแƒ›แƒแƒœ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒแƒก แƒ’แƒแƒฃแƒ แƒ™แƒ•แƒ”แƒ•แƒ”แƒšแƒ˜ แƒฅแƒชแƒ”แƒ•แƒ. RISCVCompressInstEmitter.cpp 490

แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒฎแƒแƒ–แƒ˜:

FeaturesMap[Op] = FeaturesMap.size();

แƒ—แƒฃ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜ Op แƒแƒ  แƒแƒ แƒ˜แƒก แƒœแƒแƒžแƒแƒ•แƒœแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ แƒฃแƒ™แƒแƒจแƒ˜ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜ แƒ“แƒ แƒ˜แƒฅ แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒแƒ› แƒ แƒฃแƒ™แƒแƒจแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ. แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒชแƒœแƒแƒ‘แƒ˜แƒ แƒ’แƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ”แƒ‘แƒ แƒ—แƒฃ แƒแƒ แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ–แƒแƒ›แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒแƒ›แƒ“แƒ” แƒแƒœ แƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N22-N24: แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜

Error MachOObjectFile::checkSymbolTable() const {
  ....
  } else {
    MachO::nlist STE = getSymbolTableEntry(SymDRI);
    NType = STE.n_type;                              // <=
    NType = STE.n_type;                              // <=
    NSect = STE.n_sect;
    NDesc = STE.n_desc;
    NStrx = STE.n_strx;
    NValue = STE.n_value;
  }
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V519 [CWE-563] 'NType' แƒชแƒ•แƒšแƒแƒ“แƒก แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ–แƒ”แƒ“แƒ˜แƒ–แƒ”แƒ“ แƒแƒ แƒฏแƒ”แƒ . แƒแƒšแƒ‘แƒแƒ— แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 1663, 1664. MachOObjectFile.cpp 1664

แƒแƒ แƒ แƒ›แƒ’แƒแƒœแƒ˜แƒ, แƒแƒฅ แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ˜แƒงแƒแƒก. แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒแƒ แƒแƒกแƒแƒญแƒ˜แƒ แƒ แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ˜แƒœแƒช แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ.

แƒแƒœแƒแƒšแƒแƒ’แƒ˜แƒฃแƒ แƒแƒ“:

  • V519 [CWE-563] 'B.NDesc' แƒชแƒ•แƒšแƒแƒ“แƒก แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ–แƒ”แƒ“แƒ˜แƒ–แƒ”แƒ“ แƒแƒ แƒฏแƒ”แƒ . แƒแƒšแƒ‘แƒแƒ— แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 1488, 1489. llvm-nm.cpp 1489
  • V519 [CWE-563] แƒชแƒ•แƒšแƒแƒ“แƒก แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ–แƒ”แƒ“แƒ˜แƒ–แƒ”แƒ“ แƒแƒ แƒฏแƒ”แƒ . แƒแƒšแƒ‘แƒแƒ— แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 59, 61. coff2yaml.cpp 61

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N25-N27: แƒ›แƒ”แƒขแƒ˜ แƒ’แƒแƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ

แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ’แƒแƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒ“แƒœแƒแƒ• แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒš แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก.

bool Vectorizer::vectorizeLoadChain(
    ArrayRef<Instruction *> Chain,
    SmallPtrSet<Instruction *, 16> *InstructionsProcessed) {
  ....
  unsigned Alignment = getAlignment(L0);
  ....
  unsigned NewAlign = getOrEnforceKnownAlignment(L0->getPointerOperand(),
                                                 StackAdjustedAlignment,
                                                 DL, L0, nullptr, &DT);
  if (NewAlign != 0)
    Alignment = NewAlign;
  Alignment = NewAlign;
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V519 [CWE-563] โ€žAlignmentโ€œ แƒชแƒ•แƒšแƒแƒ“แƒก แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ–แƒ”แƒ“แƒ˜แƒ–แƒ”แƒ“ แƒแƒ แƒฏแƒ”แƒ . แƒแƒšแƒ‘แƒแƒ— แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 1158, 1160. LoadStoreVetorizer.cpp 1160

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒฃแƒชแƒœแƒแƒฃแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ  แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก. แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜, แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ•แƒ˜แƒ–แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”. แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒ™แƒ•แƒšแƒแƒ• แƒฎแƒ“แƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฎแƒšแƒ แƒงแƒแƒ•แƒ”แƒšแƒ’แƒ•แƒแƒ แƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— แƒแƒฅ:

  • V519 [CWE-563] "แƒ”แƒคแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜" แƒชแƒ•แƒšแƒแƒ“แƒก แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ–แƒ”แƒ“แƒ˜แƒ–แƒ”แƒ“ แƒแƒ แƒฏแƒ”แƒ . แƒแƒšแƒ‘แƒแƒ— แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 152, 165. WebAssemblyRegStackify.cpp 165
  • V519 [CWE-563] 'ExpectNoDerefChunk' แƒชแƒ•แƒšแƒแƒ“แƒก แƒ”แƒœแƒ˜แƒญแƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ–แƒ”แƒ“แƒ˜แƒ–แƒ”แƒ“ แƒแƒ แƒฏแƒ”แƒ . แƒแƒšแƒ‘แƒแƒ— แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 4970, 4973. SemaType.cpp 4973

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N28: แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒญแƒ”แƒจแƒ›แƒแƒ แƒ˜แƒขแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ

static int readPrefixes(struct InternalInstruction* insn) {
  ....
  uint8_t byte = 0;
  uint8_t nextByte;
  ....
  if (byte == 0xf3 && (nextByte == 0x88 || nextByte == 0x89 ||
                       nextByte == 0xc6 || nextByte == 0xc7)) {
    insn->xAcquireRelease = true;
    if (nextByte != 0x90) // PAUSE instruction support             // <=
      break;
  }
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V547 [CWE-571] แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ 'nextByte != 0x90' แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ. X86DisassemblerDecoder.cpp 379

แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก. แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ‘แƒแƒ˜แƒขแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒ  แƒฃแƒ“แƒ แƒ˜แƒก แƒฆแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒแƒก 0x90, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”แƒแƒ‘แƒก แƒฌแƒ˜แƒœแƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒ’แƒ•แƒแƒ แƒ˜ แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N29 - N...: แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ/แƒ›แƒชแƒ“แƒแƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜

แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒ’แƒแƒกแƒชแƒ”แƒ›แƒก แƒ‘แƒ”แƒ•แƒ  แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒแƒก, แƒ แƒแƒ› แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ (V547) แƒแƒœ แƒ›แƒ˜แƒกแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜ (V560) แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ แƒแƒœ แƒ›แƒชแƒ“แƒแƒ แƒ˜. แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒฃแƒ“แƒ”แƒ•แƒแƒ แƒ˜ แƒ™แƒแƒ“แƒ˜, แƒ›แƒแƒ™แƒ แƒ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ“แƒ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜. แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒ–แƒ แƒ˜ แƒแƒฅแƒ•แƒก แƒงแƒ•แƒ”แƒšแƒ แƒแƒ› แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒแƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒญแƒ”แƒจแƒ›แƒแƒ แƒ˜แƒขแƒ˜ แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒแƒ“แƒแƒ“แƒ แƒ แƒฎแƒ“แƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ™แƒแƒ“แƒ˜แƒก แƒ”แƒก แƒ’แƒแƒœแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒ แƒกแƒแƒ”แƒญแƒ•แƒแƒ:

static DecodeStatus DecodeGPRPairRegisterClass(MCInst &Inst, unsigned RegNo,
                                   uint64_t Address, const void *Decoder) {
  DecodeStatus S = MCDisassembler::Success;

  if (RegNo > 13)
    return MCDisassembler::Fail;

  if ((RegNo & 1) || RegNo == 0xe)
     S = MCDisassembler::SoftFail;
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V560 [CWE-570] แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒชแƒ“แƒแƒ แƒ˜แƒ: RegNo == 0xe. ARMdisassembler.cpp 939

แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ˜ 0xE แƒแƒ แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ 14 แƒแƒ—แƒฌแƒ˜แƒšแƒแƒ“แƒจแƒ˜. แƒ”แƒฅแƒกแƒžแƒ”แƒ แƒขแƒ˜แƒ–แƒ RegNo == 0xe แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ—แƒฃ RegNo > 13, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ“แƒแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก.

แƒ˜แƒงแƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒกแƒฎแƒ•แƒ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ ID V547 แƒ“แƒ V560, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ’แƒแƒ แƒช V595แƒ›แƒ” แƒแƒ  แƒ›แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ“แƒ แƒแƒ› แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ. แƒฃแƒ™แƒ•แƒ” แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ, แƒ แƒแƒ› แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ›แƒแƒกแƒแƒšแƒ แƒ›แƒฅแƒแƒœแƒ“แƒ แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“ :). แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒฃแƒชแƒœแƒแƒ‘แƒ˜แƒ, แƒแƒ› แƒขแƒ˜แƒžแƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ LLVM-แƒจแƒ˜ PVS-Studio-แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

แƒ›แƒ” แƒ›แƒแƒ’แƒชแƒ”แƒ›แƒ— แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก, แƒ—แƒฃ แƒ แƒแƒขแƒแƒ› แƒแƒ แƒ˜แƒก แƒแƒ› แƒขแƒ แƒ˜แƒ’แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ แƒ›แƒแƒกแƒแƒฌแƒงแƒ”แƒœแƒ˜. แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒแƒ‘แƒกแƒแƒšแƒฃแƒขแƒฃแƒ แƒแƒ“ แƒ›แƒแƒ แƒ—แƒแƒšแƒ˜แƒ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒชแƒ”แƒ›แƒ˜แƒกแƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ™แƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ.

bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons,
                                          tok::TokenKind ClosingBraceKind) {
  bool HasError = false;
  ....
  HasError = true;
  if (!ContinueOnSemicolons)
    return !HasError;
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V547 [CWE-570] แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒ '!HasError' แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒชแƒ“แƒแƒ แƒ˜แƒ. UnwrappedLineParser.cpp 1635

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N30: โ€‹โ€‹แƒกแƒแƒ”แƒญแƒ•แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ

static bool
isImplicitlyDef(MachineRegisterInfo &MRI, unsigned Reg) {
  for (MachineRegisterInfo::def_instr_iterator It = MRI.def_instr_begin(Reg),
      E = MRI.def_instr_end(); It != E; ++It) {
    return (*It).isImplicitDef();
  }
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V612 [CWE-670] แƒฃแƒžแƒ˜แƒ แƒแƒ‘แƒ "แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ" แƒ›แƒแƒ แƒงแƒฃแƒŸแƒจแƒ˜. R600OptimizeVectorRegisters.cpp 63

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒแƒœ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ˜แƒ–แƒœแƒแƒ“ แƒ˜แƒกแƒแƒฎแƒแƒ•แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ แƒแƒฆแƒแƒชแƒ˜แƒก แƒแƒฎแƒกแƒœแƒแƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒ”แƒœ แƒ™แƒแƒ“แƒก. แƒ”แƒก แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜ แƒแƒ แƒแƒคแƒ”แƒ แƒก แƒแƒ›แƒ˜แƒฎแƒกแƒœแƒ˜แƒก แƒ“แƒ แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒแƒ”แƒญแƒ•แƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ. แƒฏแƒแƒ‘แƒ˜แƒ แƒแƒกแƒ” แƒแƒ  แƒ“แƒแƒฌแƒ”แƒ แƒ :).

แƒ“แƒแƒ˜แƒฆแƒแƒšแƒ? แƒ›แƒแƒจแƒ˜แƒœ แƒฉแƒแƒ˜แƒก แƒแƒœ แƒงแƒแƒ•แƒ˜แƒก แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒ.

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ LLVM 8-แƒจแƒ˜ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒ•แƒšแƒ”แƒœแƒ˜แƒšแƒ˜ แƒ“แƒ”แƒคแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜

แƒซแƒ•แƒ”แƒšแƒ˜ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ˜แƒก 30 แƒ’แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ”แƒ‘แƒ แƒ›แƒ’แƒแƒœแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ. แƒ›แƒแƒ“แƒ˜แƒ— แƒแƒฎแƒšแƒ แƒ•แƒœแƒแƒฎแƒแƒ—, แƒ แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ แƒแƒ› แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ˜แƒซแƒ”แƒ‘แƒœแƒแƒก แƒแƒฎแƒแƒšแƒ˜ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒจแƒ˜ แƒฌแƒ˜แƒœแƒ แƒฉแƒ”แƒ™แƒ”แƒ‘แƒ˜. แƒแƒ› แƒ“แƒ แƒแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ C++ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒก แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒกแƒฃแƒš 66 แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒ“แƒแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N31: แƒ›แƒ˜แƒฃแƒฌแƒ•แƒ“แƒแƒ›แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜

Error CtorDtorRunner::run() {
  ....
  if (auto CtorDtorMap =
          ES.lookup(JITDylibSearchList({{&JD, true}}), std::move(Names),
                    NoDependenciesToRegister, true))
  {
    ....
    return Error::success();
  } else
    return CtorDtorMap.takeError();

  CtorDtorsByPriority.clear();

  return Error::success();
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V779 [CWE-561] แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒ›แƒ˜แƒฃแƒฌแƒ•แƒ“แƒแƒ›แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜. แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ˜แƒงแƒแƒก. ExecutionUtils.cpp 146

แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒแƒ แƒ˜แƒ•แƒ” แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜ if แƒ›แƒ—แƒแƒ•แƒ แƒ“แƒ”แƒ‘แƒ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ—แƒแƒœ แƒ–แƒแƒ แƒ˜แƒ— แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก. แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜ CtorDtorsByPriority แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒ’แƒแƒ˜แƒฌแƒ›แƒ˜แƒœแƒ“แƒ”แƒ‘แƒ.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N32: แƒ›แƒ˜แƒฃแƒฌแƒ•แƒ“แƒแƒ›แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜

bool LLParser::ParseSummaryEntry() {
  ....
  switch (Lex.getKind()) {
  case lltok::kw_gv:
    return ParseGVEntry(SummaryID);
  case lltok::kw_module:
    return ParseModuleEntry(SummaryID);
  case lltok::kw_typeid:
    return ParseTypeIdEntry(SummaryID);                        // <=
    break;                                                     // <=
  default:
    return Error(Lex.getLoc(), "unexpected summary kind");
  }
  Lex.setIgnoreColonInIdentifiers(false);                      // <=
  return false;
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V779 [CWE-561] แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒšแƒ˜แƒ แƒ›แƒ˜แƒฃแƒฌแƒ•แƒ“แƒแƒ›แƒ”แƒšแƒ˜ แƒ™แƒแƒ“แƒ˜. แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ˜แƒงแƒแƒก. LLParser.cpp 835

แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒแƒ. แƒฏแƒ”แƒ  แƒแƒ› แƒแƒ“แƒ’แƒ˜แƒšแƒก แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ—:

return ParseTypeIdEntry(SummaryID);
break;

แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒฉแƒแƒœแƒก, แƒ แƒแƒ› แƒแƒฅ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒแƒ  แƒแƒ แƒ˜แƒก. แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒก แƒฐแƒ’แƒแƒ•แƒก แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฌแƒแƒจแƒแƒšแƒแƒ— แƒ˜แƒ’แƒ˜. แƒ—แƒฃแƒ›แƒชแƒ, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒกแƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก.

แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒ’แƒแƒกแƒชแƒ”แƒ›แƒก แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒแƒก แƒฎแƒแƒ–แƒ”แƒ‘แƒ–แƒ”:

Lex.setIgnoreColonInIdentifiers(false);
return false;

แƒ“แƒ แƒ›แƒแƒ แƒ—แƒšแƒแƒช, แƒ”แƒก แƒ™แƒแƒ“แƒ˜ แƒ›แƒ˜แƒฃแƒฌแƒ•แƒ“แƒแƒ›แƒ”แƒšแƒ˜แƒ. แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒฅแƒ›แƒ”แƒจแƒ˜ แƒ’แƒแƒ“แƒแƒ แƒ—แƒแƒ— แƒ›แƒ—แƒแƒ•แƒ แƒ“แƒ”แƒ‘แƒ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒ–แƒแƒ แƒ˜แƒ— แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก. แƒแƒฎแƒšแƒ แƒ™แƒ˜ แƒฃแƒแƒ–แƒ แƒ แƒ›แƒแƒ แƒขแƒ แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ แƒช แƒ˜แƒกแƒ” แƒฃแƒ•แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ! แƒแƒšแƒ‘แƒแƒ— แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒแƒแƒ แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ˜แƒก?

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N33: แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ˜แƒ—แƒ˜ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ

unsigned getStubAlignment() override {
  if (Arch == Triple::systemz)
    return 8;
  else
    return 1;
}

Expected<unsigned>
RuntimeDyldImpl::emitSection(const ObjectFile &Obj,
                             const SectionRef &Section,
                             bool IsCode) {
  ....
  uint64_t DataSize = Section.getSize();
  ....
  if (StubBufSize > 0)
    DataSize &= ~(getStubAlignment() - 1);
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V784 แƒ‘แƒ˜แƒขแƒ˜แƒก แƒœแƒ˜แƒฆแƒ‘แƒ˜แƒก แƒ–แƒแƒ›แƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒžแƒ”แƒ แƒแƒœแƒ“แƒ˜แƒก แƒ–แƒแƒ›แƒแƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜แƒ. แƒ”แƒก แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒฃแƒคแƒ แƒ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ แƒ’แƒ•แƒแƒก. RuntimeDyld.cpp 815

แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒแƒ—, แƒ แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ getStubAlignment แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒขแƒ˜แƒžแƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜. แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒ•แƒ—แƒ•แƒแƒšแƒแƒ— แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ, แƒ•แƒ˜แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ—, แƒ แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก 8:

~(getStubAlignment() - 1)

~ (8u-1)

0xFFFFFFFF8u

แƒแƒฎแƒšแƒ แƒจแƒ”แƒแƒ›แƒฉแƒœแƒ˜แƒ”แƒ—, แƒ แƒแƒ› แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ–แƒแƒ›แƒ แƒแƒฅแƒ•แƒก 64 แƒ‘แƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฃแƒฌแƒ”แƒ แƒ”แƒšแƒ˜ แƒขแƒ˜แƒžแƒ˜. แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› DataSize & 0xFFFFFFF8u แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒแƒชแƒ“แƒแƒ—แƒแƒ แƒ›แƒ”แƒขแƒ˜แƒ•แƒ” แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ แƒ˜แƒ’แƒ˜แƒก แƒ‘แƒ˜แƒขแƒ˜ แƒœแƒฃแƒšแƒแƒ›แƒ“แƒ” แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒฃแƒšแƒ˜. แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒ˜แƒก, แƒ แƒแƒช แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒขแƒก แƒกแƒฃแƒ แƒ“แƒ. แƒ”แƒญแƒ•แƒ˜ แƒ›แƒแƒฅแƒ•แƒก, แƒ แƒแƒ› แƒ›แƒแƒก แƒกแƒฃแƒ แƒ“แƒ แƒ’แƒแƒ›แƒแƒ—แƒ•แƒšแƒ: DataSize & 0xFFFFFFFFFFFFFFFFFF8u.

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒ”แƒก:

DataSize &= ~(static_cast<uint64_t>(getStubAlignment()) - 1);

แƒแƒœแƒฃ:

DataSize &= ~(getStubAlignment() - 1ULL);

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N34: แƒ•แƒ”แƒ  แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ“แƒ แƒ”แƒฅแƒกแƒžแƒšแƒ˜แƒชแƒ˜แƒขแƒฃแƒ แƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ

template <typename T>
void scaleShuffleMask(int Scale, ArrayRef<T> Mask,
                      SmallVectorImpl<T> &ScaledMask) {
  assert(0 < Scale && "Unexpected scaling factor");
  int NumElts = Mask.size();
  ScaledMask.assign(static_cast<size_t>(NumElts * Scale), -1);
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V1028 [CWE-190] แƒจแƒ”แƒกแƒแƒซแƒšแƒ แƒ’แƒแƒ“แƒ˜แƒœแƒ”แƒ‘แƒ. แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ— "NumElts * Scale" แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒœแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ "size_t" แƒขแƒ˜แƒžแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒแƒ แƒ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜. X86ISelLowering.h 1577

แƒแƒจแƒ™แƒแƒ แƒ แƒขแƒ˜แƒžแƒ˜แƒก แƒฉแƒแƒ›แƒแƒกแƒฎแƒ›แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ—แƒ แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ˜แƒฅแƒœแƒแƒก แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒ แƒแƒ•แƒšแƒ”แƒ‘แƒ int. แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒจแƒ™แƒแƒ แƒ แƒขแƒ˜แƒžแƒ˜แƒก แƒฉแƒแƒ›แƒแƒกแƒฎแƒ›แƒ แƒแƒฅ แƒแƒ  แƒ˜แƒชแƒแƒ•แƒก แƒ’แƒแƒ“แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ. แƒฏแƒ”แƒ  แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒ แƒแƒ•แƒšแƒ“แƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ›แƒ แƒแƒ•แƒšแƒ”แƒ‘แƒ˜แƒก 32-แƒ‘แƒ˜แƒขแƒ˜แƒแƒœแƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒขแƒ˜แƒžแƒ–แƒ” size_t.

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N35: แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ-แƒžแƒแƒกแƒขแƒ˜

Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) {
  ....
  if (!match(Op0, m_PosZeroFP()) && isKnownNeverNaN(Op0, &TLI)) {
    I.setOperand(0, ConstantFP::getNullValue(Op0->getType()));
    return &I;
  }
  if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) {
    I.setOperand(1, ConstantFP::getNullValue(Op0->getType()));        // <=
    return &I;
  }
  ....
}

V778 [CWE-682] แƒœแƒแƒžแƒแƒ•แƒœแƒ˜แƒ แƒแƒ แƒ˜ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜. แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ, แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ แƒ“แƒ 'Op1' แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ 'Op0'-แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“. InstCombineCompares.cpp 5507

แƒ”แƒก แƒแƒฎแƒแƒšแƒ˜ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ”แƒ‘แƒก, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ™แƒแƒ“แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ“แƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ แƒ›แƒแƒกแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ แƒ“แƒแƒ˜แƒฌแƒงแƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒ แƒ— แƒแƒ“แƒ’แƒ˜แƒšแƒแƒก แƒ›แƒแƒ— แƒแƒ  แƒ’แƒแƒฃแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ˜แƒแƒ—.

แƒ’แƒ—แƒฎแƒแƒ•แƒ— แƒ’แƒแƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒแƒ—, แƒ แƒแƒ› แƒ›แƒ”แƒแƒ แƒ” แƒ‘แƒšแƒแƒ™แƒจแƒ˜ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ แƒแƒž 0 on แƒแƒž 1. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒ แƒ— แƒแƒ“แƒ’แƒ˜แƒšแƒแƒก แƒแƒ  แƒ’แƒแƒแƒกแƒฌแƒแƒ แƒ”แƒก. แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒแƒกแƒ” แƒฃแƒœแƒ“แƒ แƒ”แƒฌแƒ”แƒ แƒ:

if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) {
  I.setOperand(1, ConstantFP::getNullValue(Op1->getType()));
  return &I;
}

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N36: Variable Confusion

struct Status {
  unsigned Mask;
  unsigned Mode;

  Status() : Mask(0), Mode(0){};

  Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
    Mode &= Mask;
  };
  ....
};

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V1001 [CWE-563] โ€žModeโ€œ แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ‘แƒแƒšแƒแƒ›แƒ“แƒ”. SIModeRegister.cpp 48

แƒซแƒแƒšแƒ–แƒ” แƒกแƒแƒจแƒ˜แƒจแƒ˜แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒšแƒแƒกแƒ˜แƒก แƒฌแƒ”แƒ•แƒ แƒ”แƒ‘แƒ˜. แƒซแƒแƒšแƒ˜แƒแƒœ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜แƒ แƒ“แƒแƒ‘แƒœแƒ”แƒฃแƒšแƒแƒ‘แƒ. แƒฉแƒ•แƒ”แƒœแƒ—แƒแƒœ แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒกแƒ”แƒ—แƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒ. แƒแƒ› แƒ’แƒแƒ›แƒแƒ—แƒฅแƒ›แƒแƒก แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก:

Mode &= Mask;

แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ. แฒกแƒฃแƒš แƒ”แƒก แƒแƒ แƒ˜แƒก. แƒ”แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒฆแƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒแƒกแƒ” แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ’แƒ”แƒฌแƒ”แƒ แƒ:

Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
  this->Mode &= Mask;
};

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N37: Variable Confusion

class SectionBase {
  ....
  uint64_t Size = 0;
  ....
};

class SymbolTableSection : public SectionBase {
  ....
};

void SymbolTableSection::addSymbol(Twine Name, uint8_t Bind, uint8_t Type,
                                   SectionBase *DefinedIn, uint64_t Value,
                                   uint8_t Visibility, uint16_t Shndx,
                                   uint64_t Size) {
  ....
  Sym.Value = Value;
  Sym.Visibility = Visibility;
  Sym.Size = Size;
  Sym.Index = Symbols.size();
  Symbols.emplace_back(llvm::make_unique<Symbol>(Sym));
  Size += this->EntrySize;
}

แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ PVS-Studio: V1001 [CWE-563] แƒชแƒ•แƒšแƒแƒ“แƒ˜ "Size" แƒ›แƒ˜แƒœแƒ˜แƒญแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒก แƒ‘แƒแƒšแƒแƒ›แƒ“แƒ”. แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜.cpp 424

แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ แƒฌแƒ˜แƒœแƒแƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜แƒ. แƒฃแƒœแƒ“แƒ แƒ”แƒฌแƒ”แƒ แƒแƒก:

this->Size += this->EntrySize;

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N38-N47: แƒ“แƒแƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒแƒ— แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ

แƒแƒ“แƒ แƒ” แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒขแƒ แƒ˜แƒ’แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜ V595. แƒ›แƒ˜แƒกแƒ˜ แƒแƒ แƒกแƒ˜ แƒ˜แƒ›แƒแƒจแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒก, แƒ แƒแƒ› แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ“แƒ”แƒ‘แƒ. แƒแƒฎแƒแƒšแƒ’แƒแƒ–แƒ แƒ“แƒ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ V1004 แƒแƒ แƒ˜แƒก แƒกแƒแƒžแƒ˜แƒ แƒ˜แƒกแƒžแƒ˜แƒ แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒกแƒ”แƒ•แƒ” แƒแƒ•แƒšแƒ”แƒœแƒก แƒฃแƒแƒ›แƒ แƒแƒ• แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒก. แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ”แƒ‘แƒก, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ™แƒฃแƒ แƒกแƒแƒ แƒ˜ แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ“แƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ. แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— LLVM-แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒš แƒแƒกแƒ”แƒ— แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ”แƒ‘แƒก.

int getGEPCost(Type *PointeeType, const Value *Ptr,
               ArrayRef<const Value *> Operands) {
  ....
  if (Ptr != nullptr) {                                            // <=
    assert(....);
    BaseGV = dyn_cast<GlobalValue>(Ptr->stripPointerCasts());
  }
  bool HasBaseReg = (BaseGV == nullptr);

  auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType());  // <=
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V1004 [CWE-476] 'Ptr' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒแƒ แƒแƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 729, 738. TargetTransformInfoImpl.h 738

แƒชแƒ•แƒแƒšแƒ”แƒ‘แƒแƒ“แƒ˜ แƒžแƒขแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒ—แƒแƒœแƒแƒ‘แƒแƒ แƒ˜ nullptr, แƒ แƒแƒ’แƒแƒ แƒช แƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ”แƒ‘แƒ แƒฉแƒ”แƒ™แƒ˜แƒ—:

if (Ptr != nullptr)

แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒ› แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ แƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”:

auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType());

แƒ’แƒแƒœแƒ•แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ.

llvm::DISubprogram *CGDebugInfo::getFunctionFwdDeclOrStub(GlobalDecl GD,
                                                          bool Stub) {
  ....
  auto *FD = dyn_cast<FunctionDecl>(GD.getDecl());
  SmallVector<QualType, 16> ArgTypes;
  if (FD)                                                                // <=
    for (const ParmVarDecl *Parm : FD->parameters())
      ArgTypes.push_back(Parm->getType());
  CallingConv CC = FD->getType()->castAs<FunctionType>()->getCallConv(); // <=
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V1004 [CWE-476] 'FD' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒแƒ แƒแƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 3228, 3231. CGDebugInfo.cpp 3231

แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒ”แƒ— แƒœแƒ˜แƒจแƒแƒœแƒก FD. แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒแƒ , แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒฉแƒแƒœแƒก แƒ“แƒ แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒฎแƒกแƒœแƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ.

แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›:

static void computePolynomialFromPointer(Value &Ptr, Polynomial &Result,
                                         Value *&BasePtr,
                                         const DataLayout &DL) {
  PointerType *PtrTy = dyn_cast<PointerType>(Ptr.getType());
  if (!PtrTy) {                                                   // <=
    Result = Polynomial();
    BasePtr = nullptr;
  }
  unsigned PointerBits =
      DL.getIndexSizeInBits(PtrTy->getPointerAddressSpace());     // <=
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V1004 [CWE-476] 'PtrTy' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒแƒ แƒแƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ, แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 960, 965. InterleavedLoadCombinePass.cpp 965

แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ•แƒ˜แƒชแƒ•แƒแƒ— แƒ—แƒแƒ•แƒ˜ แƒแƒกแƒ”แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ? แƒ˜แƒงแƒแƒ•แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ˜แƒแƒœแƒ˜ Code-Review-แƒ–แƒ” แƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— PVS-Studio แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒแƒ“ แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“.

แƒแƒ› แƒขแƒ˜แƒžแƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒ— แƒกแƒฎแƒ•แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒชแƒ˜แƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒก แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก. แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ“แƒแƒ•แƒขแƒแƒ•แƒ”แƒ‘ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒก:

  • V1004 [CWE-476] 'Expr' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒแƒ แƒแƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ, แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 1049, 1078. DebugInfoMetadata.cpp 1078
  • V1004 [CWE-476] 'PI' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒแƒ แƒแƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ, แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 733, 753. LegacyPassManager.cpp 753
  • V1004 [CWE-476] 'StatepointCall' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒแƒ แƒแƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 4371, 4379. Verifier.cpp 4379
  • V1004 [CWE-476] 'RV' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒแƒ แƒแƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ, แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 2263, 2268. TGParser.cpp 2268
  • V1004 [CWE-476] 'CalleeFn' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒแƒ แƒแƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ, แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ“แƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 1081, 1096. SimplifyLibCalls.cpp 1096
  • V1004 [CWE-476] 'TC' แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ แƒแƒ แƒแƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ nullptr-แƒ—แƒแƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— แƒฎแƒแƒ–แƒ”แƒ‘แƒ˜: 1819, 1824. Driver.cpp 1824

แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ N48-N60: แƒแƒ แƒ แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒฃแƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ“แƒ”แƒคแƒ”แƒฅแƒขแƒ˜ (แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ)

std::unique_ptr<IRMutator> createISelMutator() {
  ....
  std::vector<std::unique_ptr<IRMutationStrategy>> Strategies;
  Strategies.emplace_back(
      new InjectorIRStrategy(InjectorIRStrategy::getDefaultOps()));
  ....
}

PVS-Studio แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ: V1023 [CWE-460] แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ โ€žแƒกแƒขแƒ แƒแƒขแƒ”แƒ’แƒ˜แƒ”แƒ‘แƒ˜แƒกโ€œ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก โ€žemplace_backโ€œ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-isel-fuzzer.cpp 58

แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒแƒกแƒแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ“ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ‘แƒแƒšแƒแƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ std:: แƒ•แƒ”แƒฅแƒขแƒแƒ แƒ˜ > แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฌแƒ”แƒ แƒ แƒแƒ  แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒ xxx.push_back (แƒแƒฎแƒแƒšแƒ˜ X), แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ™แƒแƒœแƒ•แƒ”แƒ แƒขแƒแƒชแƒ˜แƒ X* ะฒ std::unique_ptr.

แƒกแƒแƒ”แƒ แƒ—แƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒฌแƒ”แƒ แƒ xxx.emplace_back(แƒแƒฎแƒแƒšแƒ˜ X)แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ˜แƒ’แƒ˜ แƒแƒ“แƒ’แƒ”แƒœแƒก: แƒ›แƒ”แƒ—แƒแƒ“แƒก emplace_back แƒแƒ’แƒ”แƒ‘แƒก แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒก แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒ›แƒ˜แƒกแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒ, แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒก แƒ”แƒฅแƒกแƒžแƒšแƒ˜แƒชแƒ˜แƒขแƒฃแƒ แƒ˜ แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒขแƒแƒ แƒ”แƒ‘แƒ˜.

แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ. แƒ—แƒฃ แƒ•แƒ”แƒฅแƒขแƒแƒ แƒ˜ แƒกแƒแƒ•แƒกแƒ”แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒแƒคแƒ. แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒงแƒแƒก, แƒ แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“แƒแƒช แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜ แƒฎแƒ“แƒ”แƒ‘แƒ std::bad_alloc. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ“แƒแƒ˜แƒ™แƒแƒ แƒ’แƒ”แƒ‘แƒ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒฌแƒแƒ˜แƒจแƒšแƒ”แƒ‘แƒ.

แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜_แƒžแƒขแƒ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒคแƒšแƒแƒ‘แƒก แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒก, แƒกแƒแƒœแƒแƒ› แƒ•แƒ”แƒฅแƒขแƒแƒ แƒ˜ แƒจแƒ”แƒ”แƒชแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒแƒก:

xxx.push_back(std::unique_ptr<X>(new X))

C++14-แƒ“แƒแƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— 'std::make_unique':

xxx.push_back(std::make_unique<X>())

แƒแƒ› แƒขแƒ˜แƒžแƒ˜แƒก แƒ“แƒ”แƒคแƒ”แƒฅแƒขแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒฃแƒšแƒ˜ LLVM-แƒกแƒ—แƒ•แƒ˜แƒก. แƒ—แƒฃ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ, แƒจแƒ”แƒ›แƒ“แƒ’แƒ”แƒœแƒ”แƒšแƒ˜ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒจแƒ”แƒฉแƒ”แƒ แƒ“แƒ”แƒ‘แƒ. แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒ˜ แƒ“แƒ แƒแƒ—แƒ แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒจแƒ”แƒฌแƒงแƒ“แƒ”แƒก, แƒ—แƒฃ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ แƒ•แƒ”แƒ  แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ“แƒ, แƒ”แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ˜ แƒกแƒแƒ–แƒ˜แƒ–แƒฆแƒแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒ”แƒก แƒ™แƒแƒ“แƒ˜ แƒแƒ  แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒฃแƒš แƒกแƒแƒคแƒ แƒ—แƒฎแƒ”แƒก LLVM-แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒ˜แƒ›แƒแƒฉแƒœแƒ˜แƒ, แƒ แƒแƒ› แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒงแƒ แƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒกแƒแƒฃแƒ‘แƒแƒ แƒ˜ แƒ“แƒ แƒ แƒแƒ› PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ›แƒ แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒ แƒ›แƒ˜แƒกแƒ˜ แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒ.

แƒแƒ› แƒขแƒ˜แƒžแƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜:

  • V1023 [CWE-460] แƒ™แƒฃแƒ แƒกแƒแƒ แƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Passes' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. PassManager.h 546
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'AAs' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. AliasAnalysis.h 324
  • V1023 [CWE-460] โ€žEntriesโ€œ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก โ€žemplace_backโ€œ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ— แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. DWARFDebugFrame.cpp 519
  • V1023 [CWE-460] แƒ™แƒฃแƒ แƒกแƒแƒ แƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'AllEdges' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. CFGMST.h 268
  • V1023 [CWE-460] โ€žVMapsโ€œ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก โ€žemplace_backโ€œ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ— แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. SimpleLoopUnswitch.cpp 2012 แƒฌ
  • V1023 [CWE-460] แƒ™แƒฃแƒ แƒกแƒแƒ แƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Records' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. FDRLogBuilder.h 30
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'PendingSubmodules' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. ModuleMap.cpp 810
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Objects' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. DebugMap.cpp 88
  • V1023 [CWE-460] โ€žแƒกแƒขแƒ แƒแƒขแƒ”แƒ’แƒ˜แƒ”แƒ‘แƒ˜แƒกโ€œ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” โ€žemplace_backโ€œ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-isel-fuzzer.cpp 60
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Modifiers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-stress.cpp 685
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Modifiers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-stress.cpp 686
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Modifiers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-stress.cpp 688
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Modifiers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-stress.cpp 689
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Modifiers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-stress.cpp 690
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Modifiers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-stress.cpp 691
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Modifiers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-stress.cpp 692
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Modifiers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-stress.cpp 693
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Modifiers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. llvm-stress.cpp 694
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Operands' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. GlobalISelEmitter.cpp 1911 แƒฌ
  • V1023 [CWE-460] แƒ™แƒฃแƒ แƒกแƒแƒ แƒ˜ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Stash' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. GlobalISelEmitter.cpp 2100
  • V1023 [CWE-460] แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ 'Matchers' แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก 'emplace_back' แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ—. แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒŸแƒแƒœแƒ•แƒ. GlobalISelEmitter.cpp 2702

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒกแƒฃแƒš 60 แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ•แƒฃแƒ™แƒ”แƒ—แƒ” แƒ“แƒ แƒ›แƒ”แƒ แƒ” แƒ’แƒแƒ•แƒฉแƒ”แƒ แƒ“แƒ˜. แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒกแƒฎแƒ•แƒ แƒ“แƒ”แƒคแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒแƒฆแƒ›แƒแƒแƒฉแƒ”แƒœแƒก LLVM-แƒจแƒ˜? แฒ“แƒ˜แƒแƒฎ แƒ›แƒแƒฅแƒ•แƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒ แƒแƒชแƒ แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ™แƒแƒ“แƒ˜แƒก แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒ•แƒฌแƒ”แƒ แƒ“แƒ˜, แƒ’แƒ•แƒ˜แƒแƒœ แƒกแƒแƒฆแƒแƒ›แƒ แƒ˜แƒงแƒ, แƒฃแƒคแƒ แƒ แƒกแƒฌแƒแƒ แƒแƒ“, แƒฆแƒแƒ›แƒ”แƒช แƒ™แƒ˜ แƒ˜แƒงแƒ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”, แƒ แƒแƒ› แƒ“แƒ แƒ แƒ˜แƒงแƒ, แƒ“แƒฆแƒ” แƒ“แƒแƒ›แƒ”แƒ แƒฅแƒ•แƒ.

แƒ˜แƒ›แƒ”แƒ“แƒ˜ แƒ›แƒแƒฅแƒ•แƒก, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ แƒ“แƒ แƒ’แƒกแƒฃแƒ แƒ— แƒกแƒชแƒแƒ“แƒแƒ— PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜.

แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ— แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒ“แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒ›แƒแƒฆแƒแƒ แƒแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ แƒแƒฅ แƒ”แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜.

แƒ แƒแƒช แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜แƒ, แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜. แƒ”แƒ แƒ—แƒฏแƒ”แƒ แƒแƒ“แƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒฉแƒ•แƒ”แƒœแƒก แƒ›แƒ˜แƒ”แƒ  แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒแƒœแƒแƒšแƒ˜แƒ–แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒแƒšแƒแƒ’แƒ˜แƒ˜แƒก แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ— แƒ“แƒ PVS-Studio แƒแƒ  แƒแƒ แƒ˜แƒก แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒกแƒชแƒ”แƒœแƒแƒ แƒ˜.

แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ”แƒ‘แƒก แƒ’แƒ˜แƒกแƒฃแƒ แƒ•แƒ”แƒ‘แƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜แƒกแƒ แƒ“แƒ แƒกแƒแƒœแƒ“แƒแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒแƒจแƒ˜!

แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ LLVM 8-แƒจแƒ˜ PVS-Studio แƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ—แƒฃ แƒ’แƒกแƒฃแƒ แƒ— แƒ’แƒแƒฃแƒ–แƒ˜แƒแƒ แƒแƒ— แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒ”แƒœแƒแƒ•แƒแƒœ แƒแƒฃแƒ“แƒ˜แƒขแƒแƒ แƒ˜แƒแƒก, แƒ’แƒ—แƒฎแƒแƒ•แƒ—, แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ—แƒแƒ แƒ’แƒ›แƒแƒœแƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ˜: แƒแƒœแƒ“แƒ แƒ”แƒ˜ แƒ™แƒแƒ แƒžแƒแƒ•แƒ˜. แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ•แƒœแƒ LLVM 8-แƒจแƒ˜ PVS-Studio-แƒ˜แƒ—.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ