αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„ LLVM 8 αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio

αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„ LLVM 8 αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio
αž‡αžΆαž„αž–αžΈαžšαž†αŸ’αž“αžΆαŸ†αž”αžΆαž“αž€αž“αŸ’αž›αž„αž•αž»αžαž‘αŸ…αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž›αŸαžαž€αžΌαžŠαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„ LLVM αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž…αžΌαžšαž”αŸ’αžšαžΆαž€αžŠαžαžΆ αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio αž“αŸ…αžαŸ‚αž‡αžΆαž§αž”αž€αžšαžŽαŸαžˆαžΆαž“αž˜αž»αžαž‚αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž€αŸ†αž αž»αžŸ αž“αž·αž„αž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž“αž·αž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αŸ†αž αž»αžŸαžαŸ’αž˜αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ LLVM 8.0.0 αŸ”

αž’αžαŸ’αžαž”αž‘αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžš

αž“αž·αž™αžΆαž™αž±αŸ’αž™αžαŸ’αžšαž„αŸ‹αž‘αŸ… αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž…αž„αŸ‹αžŸαžšαžŸαŸαžšαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž‘αŸαŸ” αžœαžΆαž˜αž·αž“αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž’αŸ†αž–αžΈαž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž…αŸ’αžšαžΎαž“αžŠαž„αžšαž½αž…αž˜αž€αž αžΎαž™ (1, 2, 3) αžœαžΆαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž’αŸ†αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αž˜αžΈ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž‚αŸ’αž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž‘αŸαŸ”

αžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαž“αŸƒ LLVM αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™ αž¬αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– Clang Static Analyzerαž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ†αžŽαž½αžšαž“αŸƒαž”αŸ’αžšαž—αŸαž‘αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αž”αž»αžαŸ’αžšαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

αž˜αžΎαž› αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαžšαž”αžŸαŸ‹ Clang Static Analyzer αž”αžΆαž“αžšαŸ€αž“αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αŸ†αž αž»αžŸαžαŸ’αž˜αžΈ! αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαŸ’αž‰αž»αŸ†αžαžΆαž—αžΆαž–αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ PVS-Studio αž€αŸ†αž–αž»αž„αžαž™αž…αž»αŸ‡αŸ” Clang αžšαž€αžƒαžΎαž‰αž€αŸ†αž αž»αžŸαž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž˜αž»αž“ αž αžΎαž™αžαžΆαž˜αž‘αžΆαž“αŸ‹αžŸαž˜αžαŸ’αžαž—αžΆαž–αžšαž”αžŸαŸ‹ PVS-Studio αŸ” αžαžΎαž”αŸ’αžšαž·αž™αž˜αž·αžαŸ’αžαž™αž›αŸ‹αž™αŸ‰αžΆαž„αžŽαžΆαžŠαŸ‚αžšαž…αŸ†αž–αŸ„αŸ‡αžšαžΏαž„αž“αŸαŸ‡?

αž…αŸ†αž–αŸ„αŸ‡αžšαžΏαž„αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αžαŸ‚αž„αžαŸ‚αž…αž„αŸ‹αž†αŸ’αž›αžΎαž™αž’αŸ’αžœαžΈαž˜αž½αž™αžŠαžΌαž…αž‡αžΆαŸ–

αž™αžΎαž„αž€αŸαž˜αž·αž“αž’αž„αŸ’αž‚αž»αž™αž‘αŸ†αž“αŸαžšαžŠαŸ‚αžš! αž™αžΎαž„αž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž“αžΌαžœαžŸαž˜αžαŸ’αžαž—αžΆαž–αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚ PVS-Studio αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αž»αŸ†αž”αžΆαžšαž˜αŸ’αž— αž™αžΎαž„αž”αž“αŸ’αžαžŠαžΉαž€αž“αžΆαŸ†αžŠαžΌαž…αž˜αž»αž“αŸ”

αž‡αžΆαž’αž€αž»αžŸαž› αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž…αž˜αŸ’αž›αžΎαž™αž˜αž·αž“αž›αŸ’αž’αŸ” αž˜αž·αž“αž˜αžΆαž“αž—αžŸαŸ’αžαž»αžαžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž‘αŸαŸ” αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αžŸαžšαžŸαŸαžšαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž₯αž‘αžΌαžœαž“αŸαŸ‡αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž‚αž˜αŸ’αžšαŸ„αž„ LLVM αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž˜αŸ’αžαž„αž‘αŸ€αž αž αžΎαž™αž€αŸ†αž αž»αžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αŸ” Clang Static Analyzer αž˜αž·αž“β€‹αž’αžΆαž…β€‹αžšαž€β€‹αžƒαžΎαž‰β€‹αž€αŸ†αž αž»αžŸβ€‹αž‘αžΆαŸ†αž„β€‹αž“αŸαŸ‡β€‹αž‘αŸ (αž¬β€‹αžœαžΆβ€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αžšαž’αžΆαž€αŸ‹αžšαž’αž½αž›β€‹αžαŸ’αž›αžΆαŸ†αž„β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎβ€‹αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αžŠαŸ„αž™β€‹αž˜αžΆαž“β€‹αž‡αŸ†αž“αž½αž™β€‹αžšαž”αžŸαŸ‹β€‹αžœαžΆ)αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αŸ” αž‡αžΆαž„αž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαž€αžƒαžΎαž‰ αž“αž·αž„αžŸαžšαžŸαŸαžšαž€αŸ†αž αž»αžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž“αŸ…αž›αŸ’αž„αžΆαž…αž˜αž½αž™αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαžŸαžšαžŸαŸαžšαž’αžαŸ’αžαž”αž‘αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž…αŸ’αžšαžΎαž“αžŸαž”αŸ’αžαžΆαž αŸαŸ” αžαŸ’αž‰αž»αŸ†β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž™αž€β€‹αžαŸ’αž›αž½αž“β€‹αžαŸ’αž‰αž»αŸ†β€‹αž‘αŸ…β€‹αžŠαžΆαž€αŸ‹β€‹αž‘αžΆαŸ†αž„β€‹αž’αžŸαŸ‹β€‹αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž’αžαŸ’αžαž”αž‘ :) αŸ”

αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αžΉαž„αž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαžŽαžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž€αŸ†αž αž»αžŸ αž“αž·αž„αž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“αž“αŸ„αŸ‡ αžαŸ’αž‰αž»αŸ†αžŸαŸ’αž“αžΎαž±αŸ’αž™αžŸαŸ’αž‚αžΆαž›αŸ‹αžœαžΆ αž…αŸ†αžŽαžΆαŸ†.

αž€αžΆαžšαž’αŸ’αžœαžΎαžšαŸ„αž‚αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžαŸ’αž˜αžΈαž“αž·αž„αž…αžΆαžŸαŸ‹

αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžšαž½αž…αž αžΎαž™ αž”αŸ’αžšαž αŸ‚αž›αž–αžΈαžšαž†αŸ’αž“αžΆαŸ†αž˜αž»αž“ αž‚αž˜αŸ’αžšαŸ„αž„ LLVM αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž˜αŸ’αžαž„αž‘αŸ€αž αž αžΎαž™αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αžŠαŸ†αžšαžΌαžœαŸ” αž₯αž‘αžΌαžœβ€‹αž“αŸαŸ‡β€‹αž’αžαŸ’αžαž”αž‘β€‹αž“αŸαŸ‡β€‹αž“αžΉαž„β€‹αž”αž„αŸ’αž αžΆαž‰β€‹αž€αŸ†αž αž»αžŸβ€‹αž˜αž½αž™β€‹αž”αžΆαž…αŸ‹β€‹αžαŸ’αž˜αžΈαŸ” αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž˜αŸαžšαŸ„αž‚αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰? αž˜αžΆαž“αž αŸαžαž»αž•αž› ៣ αž™αŸ‰αžΆαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΏαž„αž“αŸαŸ‡αŸ–

  1. αž‚αž˜αŸ’αžšαŸ„αž„ LLVM αž€αŸ†αž–αž»αž„αžœαž·αžœαžŒαŸ’αž αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αŸαžαž€αžΌαžŠαž…αžΆαžŸαŸ‹ αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜αž€αžΌαžŠαžαŸ’αž˜αžΈαŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αž˜αžΆαž“αž€αŸ†αž αž»αžŸαžαŸ’αž˜αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚ αž“αž·αž„αžŸαžšαžŸαŸαžšαŸ” αž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆαž€αžΆαžšαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž‘αŸ€αž„αž‘αžΆαžαŸ‹ αž˜αž·αž“αž˜αŸ‚αž“αž˜αŸ’αžαž„αž˜αŸ’αž€αžΆαž›αž‘αŸαŸ” αž’αžαŸ’αžαž”αž‘αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αž„αŸ’αž αžΆαž‰αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž–αžΈαžŸαž˜αžαŸ’αžαž—αžΆαž–αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚ PVS-Studio αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‡αžΆαž˜αž½αž™αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αž‚αž»αžŽαž—αžΆαž–αž€αžΌαžŠ αž“αž·αž„αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž€αžΆαžšαž…αŸ†αžŽαžΆαž™αž›αžΎαž€αžΆαžšαž‡αž½αžŸαž‡αž»αž›αž€αŸ†αž αž»αžŸαž“αŸ„αŸ‡αž‘αŸαŸ” αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž€αžΌαžŠαž‹αž·αžαž·αžœαž“αŸ’αžαž‡αžΆαž”αŸ’αžšαž…αžΆαŸ†!
  2. αž™αžΎαž„αž€αŸ†αž–αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹ αž“αž·αž„αž€αŸ‚αž›αž˜αŸ’αž’αž€αžΆαžšαžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αžœαžΆαž˜αž·αž“αž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžŸαŸ’αž€αŸαž“αž–αžΈαž˜αž»αž“αŸ”
  3. αž€αžΆαžšαž’αŸ’αžœαžΎαžšαŸ„αž‚αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžαŸ’αž˜αžΈαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„ PVS-Studio αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž€αžΆαž›αž–αžΈ 2 αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžšαŸ†αž›αŸαž…αž–αž½αž€αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž–αžΈαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžšαž”αžŸαŸ‹ PVS-Studio αŸ”

αž–αž·αž€αžΆαžšαž—αžΆαž–αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžšαŸ„αž‚αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαž›αž–αžΈ 2 αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“

αž”αŸ†αžŽαŸ‚αž€ N1αŸ– αž…αž˜αŸ’αž›αž„-αž”αž·αž‘αž—αŸ’αž‡αžΆαž”αŸ‹

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 ៧៣

αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž–αžΈαžšαžŠαž„αžαžΆαžˆαŸ’αž˜αŸ„αŸ‡αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž’αž€αŸ’αžŸαžšαžšαž„ "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.

Fragment 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 αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αžαŸαžšαž˜αž½αž™αŸ” αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ. αžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αžŸαž‡αž»αž›αž€αžΌαžŠ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αžœαž„αŸ‹αž€αŸ’αžšαž…αž€αž‡αž»αŸ†αžœαž·αž‰αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš ternaryαŸ–

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

αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš ternary αž‚αžΊαž˜αžΆαž“αž‚αŸ’αžšαŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹αž αžΎαž™αž”αž„αŸ’αž€αž±αŸ’αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž‘αžΌαž‡αžΈαžαž›αŸ” αžŸαžΌαž˜αž”αŸ’αžšαž™αŸαžαŸ’αž“αž‡αžΆαž˜αž½αž™αžœαžΆ αž αžΎαž™αž€αž»αŸ†αž›αŸ„αž—αž›αž“αŸ‹αž‡αžΆαž˜αž½αž™αžœαž„αŸ‹αž€αŸ’αžšαž…αž€αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž˜αžΎαž›αž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸαŸ‡αž™αŸ‰αžΆαž„αž›αŸ†αž’αž·αž αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αŸ†αž–αžΌαž€ β€œBeware of the ?: Operator and Enclose It in the parthesesβ€αŸ”

αž”αŸ†αžŽαŸ‚αž€ 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->getAsString().

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αž˜αŸ’αž˜αžαžΆαž”αŸ†αž•αž»αž αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αŸ†αž αž»αžŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž”αž€αžšαžŽαŸαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ†αž αž»αžŸ αžŠαŸ„αž™αžŸαžΆαžšαž‚αŸ’αž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αžŸαžΆαž€αž›αŸ’αž”αž„αž–αž½αž€αž‚αŸαŸ” αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΌαžŠαžŠαŸ‚αž›αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αž”αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž”αŸ’αžšαžΎαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαžΆαž€αŸαžŠαŸ„αž™αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαžŠαŸαž›αŸ’αž’αž˜αž½αž™αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž€αžΆαžšαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαž”αŸ†αž–αŸαž‰αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž αž“αž·αž„αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž€αžΆαžšαž–αžΆαžšαž€αŸ†αž αž»αžŸαž•αŸ’αžŸαŸαž„αŸ—αŸ”

αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‘αŸ’αžšαž“αž·αž…αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆ HRH αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ– V522 [CWE-476] αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’αž“αŸƒαž‘αŸ’αžšαž“αž·αž…αž‚αŸ’αž˜αžΆαž“αž›αŸαž 'RHS' αž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αŸ” TGParser.cpp 2186

Fragment 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] αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’αž“αŸƒαž‘αŸ’αžšαž“αž·αž…αž‚αŸ’αž˜αžΆαž“αž“αŸαž™ 'ProgClone' αž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αŸ” Miscompilation.cpp 601

αž“αŸ…αžŠαžΎαž˜αž‘αŸ’αžšαž“αž·αž…αžŠαŸαž†αŸ’αž›αžΆαžαžœαŸƒ ProgClone αžˆαž”αŸ‹αž’αŸ’αžœαžΎαž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹αžœαžαŸ’αžαž»αŸ–

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

αžαžΆαž˜αž–αž·αžαž₯αž‘αžΌαžœαž“αŸαŸ‡ ProgClone αž‚αžΊβ€‹αž‡αžΆβ€‹αž‘αŸ’αžšαž“αž·αž…β€‹αž‘αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžŸαŸαž…αž€αŸ’αžαžΈαž™αŸ„αž„ null pointer αž‚αž½αžšαžαŸ‚αž€αžΎαžαž‘αžΎαž„αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

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

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž–αž·αž αžšαžΏαž„αž“αŸαŸ‡αž“αžΉαž„αž˜αž·αž“αž€αžΎαžαž‘αžΎαž„αž‘αŸ! αž…αŸ†αžŽαžΆαŸ†αžαžΆαžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžαžΆαž˜αž–αž·αžαž‘αŸαŸ”

αž“αŸ…αžŠαžΎαž˜αž’αž»αž„ αž˜αž»αžαž„αžΆαžšαžαž»αžŸ αž‡αž˜αŸ’αžšαŸ‡αŸ–

MiscompiledFunctions.clear();

αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž‘αŸ†αž αŸ†αž“αŸƒαž€αž»αž„αžαžΊαž“αŸαžšαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αŸ–

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

αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžƒαžΎαž‰αžαžΆαžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αž˜αž·αž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αŸαŸ” αžαŸ’αž‰αž»αŸ†β€‹αž‚αž·αžβ€‹αžαžΆβ€‹αž“αŸαŸ‡β€‹αž€αŸβ€‹αž‡αžΆβ€‹αž€αŸ†αž αž»αžŸβ€‹αžŠαŸ‚αžš αž αžΎαž™β€‹αž€αžΌαžŠβ€‹αž‚αž½αžšβ€‹αžαŸ‚β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαžšαžŸαŸαžšβ€‹αžαž»αžŸβ€‹αž‚αŸ’αž“αžΆαŸ”

αžœαžΆαž αžΆαž€αŸ‹αž”αžΈαžŠαžΌαž…αž‡αžΆαž™αžΎαž„αž”αžΆαž“αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž€αŸ†αž αž»αžŸαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαžŠαŸαž›αŸ’αž”αžΈαž“αŸ„αŸ‡! αž€αŸ†αž αž»αžŸαž˜αž½αž™αž”αž·αž‘αž”αžΆαŸ†αž„αž˜αž½αž™αž‘αŸ€αž :) αŸ”

Fragment 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] αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’αž“αŸƒαž‘αŸ’αžšαž“αž·αž…αž‘αŸ’αžšαž“αž·αž… 'αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž' αž’αžΆαž…αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αŸ” Miscompilation.cpp 709

αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαžŠαŸ‚αž›αž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αžŠαŸ†αž”αžΌαž„ αž˜αžΆαžαž·αž€αžΆαžšαž”αžŸαŸ‹αžœαžαŸ’αžαž»αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈ αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž”αŸ’αžšαžΎαžŠαžΌαž…αž‡αžΆαž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αŸ” αžαŸ’αž‰αž»αŸ†αžƒαžΎαž‰αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸαŸ‡αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αž‘αžΎαž„αŸ—αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž…αž›αž“αžΆ semantics αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„ 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] αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’αž“αŸƒαž‘αŸ’αžšαž“αž·αž…αž‚αŸ’αž˜αžΆαž“αž“αŸαž™ 'αž”αŸ’αžšαž—αŸαž‘' αž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αŸ” PrettyFunctionDumper.cpp ្៣៣

αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž§αž”αž€αžšαžŽαŸαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ†αž αž»αžŸ αž˜αž»αžαž„αžΆαžšαž›αž»αž”αž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αž‘αŸαŸ” αž™αžΎαž„β€‹αž˜αžΆαž“β€‹αž€αžšαžŽαžΈβ€‹αž”αŸ‚αž”β€‹αž“αŸαŸ‡β€‹αž“αŸ…β€‹αž…αŸ†αž–αŸ„αŸ‡β€‹αž˜αž»αžβ€‹αž™αžΎαž„αŸ” αž˜αž»αžαž„αžΆαžšαž€αŸ†αž–αž»αž„αžšαž„αŸ‹αž…αžΆαŸ†αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αžŠαŸ‚αž›αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹ αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αž„αŸ’αžαŸ†αž±αŸ’αž™αž‡αž½αžŸαž‡αž»αž›αžœαžΆαŸ”

αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ–

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] αž€αžΆαžšαž”αžŠαž·αžŸαŸαž’αž“αŸƒαž‘αŸ’αžšαž“αž·αž…αž‚αŸ’αž˜αžΆαž“αž›αŸαž '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

αž˜αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž‚αž½αžšαž±αŸ’αž™αžŸαž„αŸ’αžŸαŸαž™αžŽαžΆαžŸαŸ‹αž“αŸ…αžŠαžΎαž˜αžŠαŸ†αž”αžΌαž„ αž”αŸ†αž”αŸ‚αž€. αžαžΎαž’αŸ’αž“αž€αž—αŸ’αž›αŸαž…αžŸαžšαžŸαŸαžšαž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‘αŸ?

Fragment 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

αž…αž„αŸ’αž’αž»αž› Callee αž“αŸ…β€‹αžŠαžΎαž˜β€‹αžŠαŸ†αž”αžΌαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž‚αŸβ€‹αž”αžŠαž·αžŸαŸαž’β€‹αž“αŸ…β€‹αž–αŸαž›β€‹αžŠαŸ‚αž›β€‹αž˜αž»αžαž„αžΆαžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž αŸ…β€‹ αž‘αž‘αž½αž›αž”αžΆαž“TTI.

αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž‘αŸ’αžšαž“αž·αž…αž“αŸαŸ‡αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž˜αž—αžΆαž– nullptr:

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

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž™αžΊαžαž–αŸαž›αž αžΎαž™β€¦

Fragment 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 ្៦០

αžœαžΆαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αŸ†αž αž»αžŸαž‘αŸ αž αžΎαž™αž›αŸαžαž€αžΌαžŠαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαžŠαžΌαž…αž”αŸ†αžŽαž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž“αŸαŸ‡β€‹αž…αŸ’αž”αžΆαžŸαŸ‹β€‹αž‡αžΆβ€‹αž€αž“αŸ’αž›αŸ‚αž„β€‹αžŠαŸ‚αž›β€‹αž‚αž½αžšβ€‹αž²αŸ’αž™β€‹αžŸαž„αŸ’αžŸαŸαž™β€‹αžαŸ’αž›αžΆαŸ†αž„ αž αžΎαž™β€‹αžαŸ’αžšαžΌαžœβ€‹αž–αž·αž“αž·αžαŸ’αž™β€‹αž˜αžΎαž›αŸ”

αž…αžΌαžšαž“αž·αž™αžΆαž™αžαžΆαž’αžαŸαžš αž‘αŸ†αž αŸ† αž‚αžΊαžŸαŸ’αž˜αžΎαž“αžΉαž„ 16 αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αž“αŸƒαž€αžΌαžŠαž‚αŸ’αžšαŸ„αž„αž“αžΉαž„αž™αž€αžœαžΆαž‘αŸ…αž‡αžΆαž’αžαŸαžš NImms αžαž˜αŸ’αž›αŸƒαŸ–

1111111111111111111111111111111111111111111111111111111111100000

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αžαžΆαž˜αž–αž·αžαž›αž‘αŸ’αž’αž•αž›αž“αžΉαž„αž˜αžΆαž“αŸˆ

0000000000000000000000000000000011111111111111111111111111100000

αž€αžΆαžšαž–αž·αžαž‚αžΊαžαžΆαž€αžΆαžšαž‚αžŽαž“αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαž—αŸαž‘ 32-bit unsigned αŸ” αž αžΎαž™αž˜αžΆαž“αžαŸ‚αž–αŸαž›αž“αŸ„αŸ‡αž‘αŸ αž”αŸ’αžšαž—αŸαž‘αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆ 32 αž”αŸŠαžΈαžαž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž„αŸ’αžšαžΈαž€αž™αŸ‰αžΆαž„αž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ uint64_t. αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž”αŸŠαžΈαžαžŠαŸαžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αžαž“αžΉαž„αž‡αžΆαžŸαžΌαž“αŸ’αž™αŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž‡αž½αžŸαž‡αž»αž›αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαžΌαž…αž“αŸαŸ‡αŸ–

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

αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαŸ– V629 [CWE-190] αž–αž·αž…αžΆαžšαžŽαžΆαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αž“αŸ’αžŸαŸ„αž˜ 'Immr << 6' αŸ” αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸŠαžΈαžαž“αŸƒαžαž˜αŸ’αž›αŸƒ 32 αž”αŸŠαžΈαžαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž–αž„αŸ’αžšαžΈαž€αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αŸ…αž”αŸ’αžšαž—αŸαž‘ 64 αž”αŸŠαžΈαžαŸ” AArch64AddressingModes.h ្៦៩

αž”αŸ†αžŽαŸ‚αž€ 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] αž–αž·αž…αžΆαžšαžŽαžΆαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αžœαžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž…αžŠαŸ‚αž›αž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡ 'else' αž”αžΆαžαŸ‹αŸ” AMDGPUAsmParser.cpp 5655

αž˜αž·αž“αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‘αŸαŸ” αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž–αŸαž›αž“αŸ„αŸ‡αž˜αž€ - αž”αŸ’αž›αž»αž€αž‘αžΈαž˜αž½αž™ if αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸ… αž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž˜αž·αž“αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž‘αŸ αž˜αžΆαž“αž–αžΆαž€αŸ’αž™αž‚αž“αŸ’αž›αžΉαŸ‡ αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž¬β€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“αŸ” αžœαž·αž’αžΈαžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αžΌαžŠαž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αž“αŸ…αžαŸ‚αž“αžΉαž€ αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΌαžŠαž€αžΆαž“αŸ‹αžαŸ‚αž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ αž“αž·αž„αž‚αŸ’αžšαŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αž αž”αž“αŸ’αž αž”αžΆαžαŸ‹ αž€αžΌαžŠαž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαž»αžŸαž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αžœαžΆαž‡αžΆαž€αžΆαžšαž›αŸ’αž’αž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž˜αž»αž“αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜ αž•αŸ’αžŸαŸαž„αž‘αŸ€αž.

Fragment 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] αžαŸ’αžŸαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αŸαŸ” αž–αž·αž…αžΆαžšαžŽαžΆαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αž“αŸ’αžŸαŸ„αž˜ 'αž›αž‘αŸ’αž’αž•αž› + Name.str()'αŸ” Symbol.cpp ៣្
  • V655 [CWE-480] αžαŸ’αžŸαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αŸαŸ” αž–αž·αž…αžΆαžšαžŽαžΆαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αž“αŸ’αžŸαŸ„αž˜ 'αž›αž‘αŸ’αž’αž•αž› + "(ObjC Class)" + Name.str()'αŸ” Symbol.cpp ៣αŸ₯
  • V655 [CWE-480] αžαŸ’αžŸαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αŸαŸ” αž–αž·αž…αžΆαžšαžŽαžΆαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αž“αŸ’αžŸαŸ„αž˜ 'αž›αž‘αŸ’αž’αž•αž› + "(ObjC Class EH)" + Name.str()' αŸ” Symbol.cpp ៣៨
  • V655 [CWE-480] αžαŸ’αžŸαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αŸαŸ” αž–αž·αž…αžΆαžšαžŽαžΆαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αž“αŸ’αžŸαŸ„αž˜ 'αž›αž‘αŸ’αž’αž•αž› + "(ObjC IVar)" + Name.str()' αŸ” Symbol.cpp ៀ៑

αžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš + αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αŸ†αž“αž½αžŸαž±αŸ’αž™ += operator αŸ” αž›αž‘αŸ’αž’αž•αž›αž‚αžΊαž€αžΆαžšαžšαž…αž“αžΆαžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž’αžαŸ’αžαž“αŸαž™αŸ”

Fragment 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] ធថេរ 'αžαž˜αŸ’αžšαžΉαž˜' αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αžαž˜αŸ’αž›αŸƒαž–αžΈαžšαžŠαž„αž‡αžΆαž”αŸ‹αŸ—αž‚αŸ’αž“αžΆαŸ” αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αŸ†αž αž»αžŸαž˜αž½αž™αŸ” αž–αž·αž“αž·αžαŸ’αž™αž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ– 1158, 1160. LoadStoreVectorizer.cpp 1160

αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž€αžΌαžŠβ€‹αž…αž˜αŸ’αž›αŸ‚αž€β€‹αžŽαžΆαžŸαŸ‹β€‹αžŠαŸ‚αž›β€‹αž‘αŸ†αž“αž„β€‹αž‡αžΆβ€‹αž˜αžΆαž“β€‹αž€αŸ†αž αž»αžŸβ€‹αž‘αžΌαž‡αžΈαžαž›αŸ” αž“αŸ…αžŠαžΎαž˜, αž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž› αžαž˜αŸ’αžšαžΉαž˜ αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ” αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αž·αž…αŸ’αž…αž€αžΆαžšαž€αžΎαžαž‘αžΎαž„αž˜αŸ’αžαž„αž‘αŸ€αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŽαžΆαž˜αž½αž™αž‘αžΎαž™αŸ”

αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ–

  • V519 [CWE-563] ធថេរ 'Effects' αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αžαž˜αŸ’αž›αŸƒαž–αžΈαžšαžŠαž„αž‡αžΆαž”αŸ‹αŸ—αž‚αŸ’αž“αžΆαŸ” αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αŸ†αž αž»αžŸαž˜αž½αž™αŸ” αž–αž·αž“αž·αžαŸ’αž™αž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ– 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αžŠαŸ‚αž›αž”αž“αŸ’αžαž–αžΈαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž˜αž»αž“αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αŸ†αž αž»αžŸαž‘αžΌαž‡αžΈαžαž›αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ”

Fragment N29 - N...: αžαŸ‚αž„αžαŸ‚αž˜αžΆαž“αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž–αž·αž/αž˜αž·αž“αž–αž·αž

αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž…αŸαž‰αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αž‡αžΆαž…αŸ’αžšαžΎαž“αžαžΆ αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž‘αžΆαŸ†αž„αž˜αžΌαž› (V547) αž¬αž•αŸ’αž“αŸ‚αž€αžšαž”αžŸαŸ‹αžœαžΆ (V560) αž‚αžΊαžαŸ‚αž„αžαŸ‚αž–αž·αžαž¬αž˜αž·αž“αž–αž·αžαŸ” αž‡αžΆαžšαžΏαž™αŸ—αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž€αŸ†αž αž»αžŸαž–αž·αžαž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž€αžΌαžŠ sloppy αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž–αž„αŸ’αžšαžΈαž€αž˜αŸ‰αžΆαž€αŸ’αžšαžΌ αž“αž·αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžœαžΆαžŸαž˜αž αŸαžαž»αž•αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž˜αžΎαž›αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αŸ†αž αž»αžŸαž‘αžΌαž‡αžΈαžαž›αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž€αžΎαžαž‘αžΎαž„αž–αžΈαž–αŸαž›αž˜αž½αž™αž‘αŸ…αž–αŸαž›αž˜αž½αž™αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž•αŸ’αž“αŸ‚αž€αž“αŸƒαž€αžΌαžŠαž“αŸαŸ‡αž‚αžΊαž‚αž½αžšαž±αŸ’αž™αžŸαž„αŸ’αžŸαŸαž™αŸ–

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 αž˜αž·αž“αžŸαž˜αž αŸαžαž»αž•αž›αž‘αŸαž–αŸ’αžšαŸ„αŸ‡αž”αŸ’αžšαžŸαž·αž“αž”αžΎ αž›αŸαžαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈ > αŸ‘αŸ£αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αž»αžαž„αžΆαžšαž“αžΉαž„αž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž˜αžΆαž“αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αž‡αžΆαž…αŸ’αžšαžΎαž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž˜αžΆαž“αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ 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

Fragment 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 ៦៣

αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž€αŸ†αž αž»αžŸ αž¬β€‹αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸβ€‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹β€‹αž˜αž½αž™β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž”αŸ†αžŽαž„β€‹αž–αž“αŸ’αž™αž›αŸ‹β€‹αž’αŸ’αžœαžΈβ€‹αž˜αž½αž™β€‹αžŠαž›αŸ‹β€‹αž’αŸ’αž“αž€β€‹αžŸαžšαžŸαŸαžšβ€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αžŠαŸ‚αž›β€‹αž’αžΆαž“β€‹αž€αžΌαžŠαŸ” αž€αžΆαžšαžšαž…αž“αžΆαž“αŸαŸ‡αž˜αž·αž“αž–αž“αŸ’αž™αž›αŸ‹αž’αŸ’αžœαžΈαžŠαž›αŸ‹αžαŸ’αž‰αž»αŸ†αž‘αŸ αž αžΎαž™αž˜αžΎαž›αž‘αŸ…αž‚αž½αžšαž±αŸ’αž™αžŸαž„αŸ’αžŸαŸαž™αžŽαžΆαžŸαŸ‹αŸ” αž™αž€αž›αŸ’αž’αž€αž»αŸ†αžŸαžšαžŸαŸαžšαž”αŸ‚αž”αž αŸ’αž“αžΉαž„ :)

αž’αž»αž‰αž‘αŸ’αžšαžΆαž“αŸ‹? αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŠαž›αŸ‹αž–αŸαž›αž’αŸ’αžœαžΎαžαŸ‚ αž¬αž€αžΆαž αŸ’αžœαŸαŸ”

αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„ LLVM 8 αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio

αž–αž·αž€αžΆαžšαž—αžΆαž–αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžšαŸ„αž‚αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžαŸ’αž˜αžΈαŸ”

αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆαž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αžŸαž€αž˜αŸ’αž˜αž…αŸ†αž“αž½αž“ 30 αž“αŸƒαž€αžΆαžšαžœαž·αž“αž·αž…αŸ’αž†αŸαž™αž…αžΆαžŸαŸ‹αž‚αžΊαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αžŸαžΌαž˜αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž’αŸ’αžœαžΎαžšαŸ„αž‚αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžαŸ’αž˜αžΈαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈ αž˜αž»αž“ αž–αž·αž“αž·αžαŸ’αž™αŸ” αžŸαžšαž»αž”αž˜αž€ αž€αžΆαžšαžœαž·αž“αž·αž…αŸ’αž†αŸαž™αž‚αŸ„αž›αž”αŸ†αžŽαž„αž‘αžΌαž‘αŸ…αž…αŸ†αž“αž½αž“ 66 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ C++ αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸαŸ‡αŸ”

Fragment 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 ៑ៀ៦

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αžŸαžΆαžαžΆαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš if αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž€αžΆαžšαž αŸ…αž‘αŸ…αž€αžΆαž“αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰. αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™αž’αž»αž„ CtorDtorsByPriority αž“αžΉαž„αž˜αž·αž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αž˜αŸ’αžšαŸ‡αž‘αžΎαž™αŸ”

Fragment 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;

αž“αŸ… glance αžŠαŸ†αž”αžΌαž„ αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž˜αž·αž“αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‘αŸαŸ” αžœαžΆαž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž‡αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš αž”αŸ†αž”αŸ‚αž€ αž˜αžΆαž“αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž˜αž½αž™αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž αžΎαž™αž’αŸ’αž“αž€αž’αžΆαž…αž›αž»αž”αžœαžΆαž”αžΆαž“αž™αŸ‰αžΆαž„αžŸαžΆαž˜αž‰αŸ’αž‰αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž˜αž·αž“αž˜αŸ‚αž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαžΆαž˜αž‰αŸ’αž‰αž‘αŸαŸ”

αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚αž…αŸαž‰αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αž“αŸ…αž›αžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ–

Lex.setIgnoreColonInIdentifiers(false);
return false;

αž αžΎαž™αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž›αŸαžαž€αžΌαžŠαž“αŸαŸ‡αž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžŠαž›αŸ‹αž”αžΆαž“αž‘αŸαŸ” αž€αžšαžŽαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž€αžΆαžšαž αŸ…αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰. αž αžΎαž™β€‹αž₯αž‘αžΌαžœβ€‹αž“αŸαŸ‡β€‹αž“αŸ…β€‹αž˜αŸ’αž“αžΆαž€αŸ‹β€‹αž―αž„β€‹αž‚αŸ’αž˜αžΆαž“β€‹αž“αŸαž™β€‹ αž”αŸ†αž”αŸ‚αž€ αž˜αžΎαž›β€‹αž‘αŸ…β€‹αž˜αž·αž“β€‹αž‚αŸ’αžšαŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹β€‹αžŸαŸ„αŸ‡! αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžŸαžΆαžαžΆαž˜αž½αž™αž‚αž½αžšαžαŸ‚αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™ αž”αŸ†αž”αŸ‚αž€αž˜αž·αž“αž˜αŸ‚αž“αž“αŸ…αž›αžΎαž‘αŸ αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰?

Fragment 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 αž‘αŸ†αž αŸ†αž“αŸƒαžšαž”αžΆαŸ†αž„αž”αŸŠαžΈαžαž‚αžΊαžαž·αž…αž‡αžΆαž„αž‘αŸ†αž αŸ†αž“αŸƒ operand αžŠαŸ†αž”αžΌαž„αŸ” αž“αŸαŸ‡αž“αžΉαž„αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž”αžΆαžαŸ‹αž”αž„αŸ‹αž”αŸŠαžΈαžαžαŸ’αž–αžŸαŸ‹αŸ” RuntimeDyld.cpp 815

αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆαž˜αž»αžαž„αžΆαžš getStubAlignment αž”αŸ’αžšαž—αŸαž‘αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ αž˜αž·αž“αž”αžΆαž“αž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆ. αž…αžΌαžšαž™αžΎαž„αž‚αžŽαž“αžΆαžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αž“αŸ’αžŸαŸ„αž˜ αžŠαŸ„αž™αžŸαž“αŸ’αž˜αžαžαžΆαž’αž“αž»αž‚αž˜αž“αŸαžαŸ’αžšαž‘αž”αŸ‹αžαž˜αŸ’αž›αŸƒ αŸ¨αŸ–

~(getStubAlignment() - 1)

~(8u-1)

0xFFFFFFFF8u

αž₯αž‘αžΌαžœαž€αžαŸ‹αžŸαŸ†αž‚αžΆαž›αŸ‹αžαžΆαž’αžαŸαžš αž‘αŸ†αž αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž˜αžΆαž“αž”αŸ’αžšαž—αŸαž‘ 64 αž”αŸŠαžΈαžαžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž…αž»αŸ‡αž αžαŸ’αžαž›αŸαžαžΆαŸ” αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž“αŸ…αž–αŸαž›αž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš DataSize & 0xFFFFFFFF8u αžšαžΆαž›αŸ‹αž”αŸŠαžΈαžαž›αŸ†αžŠαžΆαž”αŸ‹αžαŸ’αž–αžŸαŸ‹αžŸαžΆαž˜αžŸαž·αž”αž–αžΈαžšαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αžΎαž„αžœαž·αž‰αž‘αŸ…αžŸαžΌαž“αŸ’αž™αŸ” αž—αžΆαž‚αž…αŸ’αžšαžΎαž“ αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αž„αŸ‹αž”αžΆαž“αž“αŸ„αŸ‡αž‘αŸαŸ” αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžŸαŸαž™αžαžΆαž‚αžΆαžαŸ‹αž…αž„αŸ‹αž‚αžŽαž“αžΆαŸ– DataSize & 0xFFFFFFFFFFFFFF8u αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αžŸαž‡αž»αž›αž€αŸ†αž αž»αžŸ αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αžŸαžšαžŸαŸαžšαž“αŸαŸ‡αŸ–

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

αž¬αž’αž‰αŸ’αž…αžΉαž„αŸ–

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

Fragment 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 αž”αŸŠαžΈαžαž“αŸƒαž€αžΆαžšαž‚αž»αžŽαž“αžΉαž„αž–αž„αŸ’αžšαžΈαž€αž‘αŸ…αž”αŸ’αžšαž—αŸαž‘ αž‘αŸ†αž αŸ† _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

αž€αžΆαžšαžœαž·αž“αž·αž…αŸ’αž†αŸαž™αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžαŸ’αž˜αžΈαž“αŸαŸ‡αž€αŸ†αžŽαžαŸ‹αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž›αž”αŸ†αžŽαŸ‚αž€αž“αŸƒαž€αžΌαžŠαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž˜αŸ’αž›αž„ αž αžΎαž™αžˆαŸ’αž˜αŸ„αŸ‡αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž˜αž½αž™αž–αž½αž€αž‚αŸαž˜αž·αž“αž”αžΆαž“αž€αŸ‚αžœαžΆαž‘αŸαŸ”

αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€αž‘αžΈαž–αžΈαžšαž–αž½αž€αž‚αŸαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš op0 αž“αŸ…αž›αžΎ op1. αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž“αŸ…β€‹αž€αž“αŸ’αž›αŸ‚αž„β€‹αž˜αž½αž™β€‹αž‚αŸβ€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž‡αž½αžŸαž‡αž»αž›β€‹αžœαžΆβ€‹αž‘αŸαŸ” αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž‘αŸ†αž“αž„αž‡αžΆαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžŠαžΌαž…αž“αŸαŸ‡αŸ–

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

αž”αŸ†αžŽαŸ‚αž€ N36αŸ– αž—αžΆαž–αž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹αž’αžαŸαžš

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] ធថេរ 'αžšαž”αŸ€αž”' αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αžαžΆαŸ†αž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαŸ„αž™αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž’αž“αž»αž‚αž˜αž“αŸαž‘αŸαŸ” SIModeRegister.cpp ៀ៨

αžœαžΆαž˜αžΆαž“αŸ‡αžαžΆαž€αŸ‹αž™αžΆαŸ‰αž„αžαžΆαŸ†αž„αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž˜αž»αžαž„αžΆαžšαž“αžΌαžœαžˆαŸ’αž˜αŸ„αŸ‡αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αžŸαž˜αžΆαž‡αž·αž€αžαŸ’αž“αžΆαž€αŸ‹αŸ” αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž™αž›αŸ‹αž…αŸ’αžšαž‘αŸ†αŸ” αž™αžΎαž„β€‹αž˜αžΆαž“β€‹αž€αžšαžŽαžΈβ€‹αž”αŸ‚αž”β€‹αž“αŸαŸ‡β€‹αž“αŸ…β€‹αž…αŸ†αž–αŸ„αŸ‡β€‹αž˜αž»αžβ€‹αž™αžΎαž„αŸ” αž€αžΆαžšαž”αž‰αŸ’αž…αŸαž‰αž˜αžαž·αž“αŸαŸ‡αž˜αž·αž“αžŸαž˜αž αŸαžαž»αž•αž›αž‘αŸαŸ–

Mode &= Mask;

αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž˜αž»αžαž„αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž’αžŸαŸ‹αž αžΎαž™αŸ” αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž“αŸαŸ‡αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‘αŸ€αžαž‘αŸαŸ” αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž’αŸ’αž“αž€αž‚αž½αžšαžŸαžšαžŸαŸαžšαžœαžΆαžŠαžΌαž…αž“αŸαŸ‡αŸ–

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

αž”αŸ†αžŽαŸ‚αž€ N37αŸ– αž—αžΆαž–αž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹αž’αžαŸαžš

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] ធថេរ 'αž‘αŸ†αž αŸ†' αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αžαžΆαŸ†αž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ„αž™αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž’αž“αž»αž‚αž˜αž“αŸαž‘αŸαŸ” Object.cpp ៀ្ៀ

αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž‚αžΊαžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„αž€αžšαžŽαžΈαž˜αž»αž“αŸ” αžœαžΆαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžαžΆ:

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 αŸ₯៨

αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžαž»αž˜αž½αž™αž‘αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž’αž»αž„αžŠαžΌαž…αž‡αžΆ std:: αžœαŸ‰αž·αž…αž‘αŸαžš > αž’αŸ’αž“αž€β€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αžαŸ‚β€‹αžŸαžšαžŸαŸαžšβ€‹ xxx.push_back(X αžαŸ’αž˜αžΈ)αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž”αŸ†αž”αŸ’αž›αŸ‚αž„αžŠαŸ„αž™αž”αŸ’αžšαž™αŸ„αž›αž–αžΈ X* Π² std::unique_ptr.

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‘αžΌαž‘αŸ…αž‚αžΊαžŸαžšαžŸαŸαžš xxx.emplace_back(X αžαŸ’αž˜αžΈ)αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαžœαžΆαž…αž„αž€αŸ’αžšαž„: αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž emplace_back αž”αž„αŸ’αž€αžΎαžαž’αžΆαžαž»αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž–αžΈαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αžšαž”αžŸαŸ‹αžœαžΆ αž αžΎαž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αžΆαž…αž”αŸ’αžšαžΎαž’αŸ’αž“αž€αžŸαžΆαž„αžŸαž„αŸ‹αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αŸ”

αžœαžΆαž˜αž·αž“αž˜αžΆαž“αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž‘αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαŸ‰αž·αž…αž‘αŸαžšαž–αŸαž‰ αž“αŸ„αŸ‡αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αž‘αžΎαž„αžœαž·αž‰αŸ” αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αžΈαžαžΆαŸ†αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž’αžΆαž…αž”αžšαžΆαž‡αŸαž™ αžŠαŸ‚αž›αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž›αžΎαž€αž›αŸ‚αž„ std::bad_alloc. αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž‘αŸ’αžšαž“αž·αž…αž“αžΉαž„αž”αžΆαžαŸ‹αž”αž„αŸ‹ αž αžΎαž™αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž‘αžΎαž™αŸ”

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž‚αžΊαžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαž unique_ptrαžŠαŸ‚αž›αž“αžΉαž„αž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹αž‘αŸ’αžšαž“αž·αž… αž˜αž»αž“αž–αŸαž›αžœαŸ‰αž·αž…αž‘αŸαžšαž–αŸ’αž™αžΆαž™αžΆαž˜αž€αŸ†αžŽαžαŸ‹αž‘αžΈαžαžΆαŸ†αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž‘αžΎαž„αžœαž·αž‰αŸ–

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 ៣្ៀ
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'αž’αžΆαžαž»' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” DWARFDebugFrame.cpp 519
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'AllEdges' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” CFGMST.h ្៦៨
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'VMaps' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” SimpleLoopUnswitch.cpp αž†αŸ’αž“αžΆαŸ† 2012
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆ' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” FDRLogBuilder.h ៣០
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž€αž»αž„αžαžΊαž“αŸαžš 'PendingSubmodules' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” ModuleMap.cpp 810
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Objects' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” DebugMap.cpp ៨៨
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž€αž»αž„αžαžΊαž“αŸαžš 'αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžšαŸ’αž' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-isel-fuzzer.cpp ៦០
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Modifiers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-stress.cpp ៦៨αŸ₯
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Modifiers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-stress.cpp ៦៨αŸ₯
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Modifiers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-stress.cpp ៦៨αŸ₯
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Modifiers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-stress.cpp ៦៨αŸ₯
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Modifiers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-stress.cpp ៦៨αŸ₯
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Modifiers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-stress.cpp ៦៨αŸ₯
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Modifiers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-stress.cpp ៦៨αŸ₯
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Modifiers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-stress.cpp ៦៨αŸ₯
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Modifiers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” llvm-stress.cpp ៦៨αŸ₯
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž€αž»αž„αžαžΊαž“αŸαžš 'Operands' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” GlobalISelEmitter.cpp αž†αŸ’αž“αžΆαŸ† ៑៩៑៑
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž’αž»αž„ 'Stash' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” GlobalISelEmitter.cpp 2100
  • V1023 [CWE-460] αž‘αŸ’αžšαž“αž·αž…αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž˜αŸ’αž…αžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž€αž»αž„αžαžΊαž“αŸαžš 'Matchers' αžŠαŸ„αž™αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš 'emplace_back' αŸ” αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ” GlobalISelEmitter.cpp 2702

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αŸαž‰αž€αžΆαžšαž–αŸ’αžšαž˜αžΆαž“αžŸαžšαž»αž”αž…αŸ†αž“αž½αž“ 60 αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžˆαž”αŸ‹αŸ” αžαžΎαž˜αžΆαž“αž–αž·αž€αžΆαžšαž—αžΆαž–αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ LLVM αžŠαŸ‚αžšαž¬αž‘αŸ? αž”αžΆαž‘β€‹αž¬β€‹αž…αžΆαžŸβ€‹αžαŸ’αž‰αž»αŸ†β€‹αž˜αžΆαž“αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αžŸαžšαžŸαŸαžšαž…αŸαž‰αž“αžΌαžœαž”αŸ†αžŽαŸ‚αž€αž€αžΌαžŠαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαŸ’αžαž”αž‘αž“αŸ„αŸ‡ αžœαžΆαž‡αžΆαž–αŸαž›αž›αŸ’αž„αžΆαž… αž¬αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž™αž”αŸ‹ αž αžΎαž™αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžαžΆαžœαžΆαžŠαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž αŸ…αžœαžΆαž˜αž½αž™αžαŸ’αž„αŸƒαŸ”

αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž’αŸ’αž“αž€αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžœαžΆαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž αžΎαž™αž“αžΉαž„αž…αž„αŸ‹αžŸαžΆαž€αž›αŸ’αž”αž„αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio αŸ”

αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž‘αžΆαž‰β€‹αž™αž€β€‹αž§αž”αž€αžšαžŽαŸβ€‹αžœαž·αž—αžΆαž‚β€‹αž“αž·αž„β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž‚αŸ’αžšαžΆαž”αŸ‹β€‹αž…αž»αž… minesweeper αž“αŸ… αž‘αŸ†αž–αŸαžšαž“αŸαŸ‡.

αžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αž αž”αŸ’αžšαžΎαž€αžΆαžšαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αžαž‡αžΆαž”αŸ’αžšαž…αžΆαŸ†αŸ” αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαŸ‚αž˜αŸ’αžαž„αž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž–αž½αž€αž™αžΎαž„αž€αŸ’αž“αž»αž„αž‚αŸ„αž›αž”αŸ†αžŽαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αž–αŸαž‰αž“αž·αž™αž˜αž“αžΌαžœαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸƒαž€αžΆαžšαžœαž·αž—αžΆαž‚αž‹αž·αžαž·αžœαž“αŸ’αž αž αžΎαž™ PVS-Studio αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαž’αž˜αŸ’αž˜αžαžΆαž“αŸ„αŸ‡αž‘αŸαŸ”

αžŸαžΌαž˜αžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αž‚αž»αžŽαž—αžΆαž– αž“αž·αž„αž—αžΆαž–αž‡αžΏαž‡αžΆαž€αŸ‹αž“αŸƒαž€αžΌαžŠαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€!

αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„ LLVM 8 αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚ PVS-Studio

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž‘αžŸαŸ’αžŸαž“αž·αž€αž‡αž“αžŠαŸ‚αž›αž“αž·αž™αžΆαž™αž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸ αžŸαžΌαž˜αž”αŸ’αžšαžΎαžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚αŸ– Andrey Karpov αŸ” αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„ LLVM 8 αž‡αžΆαž˜αž½αž™ PVS-Studio.

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹