เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต LLVM 8-เตฝ เดฌเด—เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต

เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต LLVM 8-เตฝ เดฌเด—เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต
เดžเด™เตเด™เดณเตเดŸเต† PVS-Studio เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต LLVM เดชเตเดฐเต‹เดœเด•เตโ€Œเดฑเตเดฑเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจ เด•เต‹เดกเต เดชเดฐเดฟเดถเต‹เดงเดจ เด•เดดเดฟเดžเตเดžเต เดฐเดฃเตเดŸเต เดตเตผเดทเดคเตเดคเดฟเดฒเต‡เดฑเต†เดฏเดพเดฏเดฟ. เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด…เดจเดฒเตˆเดธเตผ เด‡เดชเตเดชเต‹เดดเตเด‚ เดชเดฟเดถเด•เตเด•เดณเตเด‚ เดธเดพเดงเตเดฏเดคเดฏเตเดณเตเดณ เด•เต‡เดŸเตเดชเดพเดŸเตเด•เดณเตเด‚ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดงเดพเดจ เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเด‚. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, LLVM 8.0.0 เดชเดคเดฟเดชเตเดชเดฟเตฝ เดžเด™เตเด™เตพ เดชเตเดคเดฟเดฏ เดชเดฟเดถเด•เตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดŽเดดเตเดคเต‡เดฃเตเดŸ เดฒเต‡เด–เดจเด‚

เดธเดคเตเดฏเด‚ เดชเดฑเดžเตเดžเดพเตฝ, เดˆ เดฒเต‡เด–เดจเด‚ เดŽเดดเตเดคเดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเดšเตเดšเดฟเดฒเตเดฒ. เดžเด™เตเด™เตพ เด‡เดคเดฟเดจเด•เด‚ เดจเดฟเดฐเดตเดงเดฟ เดคเดตเดฃ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดš เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดŽเดดเตเดคเตเดจเตเดจเดคเต เดฐเดธเด•เดฐเดฎเดฒเตเดฒ (1, 2, 3). เดชเตเดคเดฟเดฏ เด•เดพเดฐเตเดฏเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดŽเดดเตเดคเตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต, เดชเด•เตเดทเต‡ เดŽเดจเดฟเด•เตเด•เต เดฎเดฑเตเดฑเต เดฎเดพเตผเด—เดฎเดฟเดฒเตเดฒ.

เด“เดฐเต‹ เดคเดตเดฃเดฏเตเด‚ LLVM-เดจเตเดฑเต† เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เดชเตเดฑเดคเตเดคเดฟเดฑเด™เตเด™เตเด•เดฏเต‹ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•เดฏเต‹ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เด•เตเดฒเดพเด™เต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเตผ, เดžเด™เตเด™เดณเตเดŸเต† เดฎเต†เดฏเดฟเดฒเดฟเตฝ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดšเต‹เดฆเตเดฏเด™เตเด™เตพ เดžเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต:

เดจเต‹เด•เตเด•เต‚, Clang เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเดฑเดฟเดจเตเดฑเต† เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เดชเตเดคเดฟเดฏ เดชเดฟเดถเด•เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เดชเด เดฟเดšเตเดšเต! PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดธเด•เตเดคเดฟ เด•เตเดฑเดฏเตเดจเตเดจเดคเดพเดฏเดฟ เดŽเดจเดฟเด•เตเด•เต เดคเต‹เดจเตเดจเตเดจเตเดจเต. เด•เตเดฒเดพเด™เต เดฎเตเดฎเตเดชเดคเตเดคเต‡เดคเดฟเดจเต‡เด•เตเด•เดพเตพ เด•เต‚เดŸเตเดคเตฝ เดชเดฟเดถเด•เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเตเดŸเต† เด•เดดเดฟเดตเตเด•เตพ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด‡เดคเดฟเดจเต† เด•เตเดฑเดฟเดšเตเดšเต เดคเดพเด™เตเด•เตพ เดŽเดจเตเดคเต เด•เดฐเตเดคเตเดจเตเดจเต?

เด‡เดคเดฟเดจเต เดžเดพเตป เดŽเดชเตเดชเต‹เดดเตเด‚ เด‡เดคเตเดชเต‹เดฒเต† เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดคเตเดคเดฐเด‚ เดจเตฝเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต:

เดžเด™เตเด™เดณเตเด‚ เดตเต†เดฑเตเดคเต† เด‡เดฐเดฟเด•เตเด•เดพเดฑเดฟเดฒเตเดฒ! เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด…เดจเดฒเตˆเดธเดฑเดฟเดจเตเดฑเต† เด•เดดเดฟเดตเตเด•เตพ เดžเด™เตเด™เตพ เด—เดฃเตเดฏเดฎเดพเดฏเดฟ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเดฟ. เด…เดคเดฟเดจเดพเตฝ เดตเดฟเดทเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸ, เดžเด™เตเด™เตพ เดฎเตเดฎเตเดชเดคเตเดคเต†เดชเตเดชเต‹เดฒเต† เดฒเต€เดกเต เดคเตเดŸเดฐเตเดจเตเดจเต.

เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เด‡เดคเตŠเดฐเต เดฎเต‹เดถเด‚ เด‰เดคเตเดคเดฐเดฎเดพเดฃเต. เด…เดคเดฟเตฝ เดคเต†เดณเดฟเดตเตเด•เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒ. เด…เดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เดžเดพเตป เด‡เดชเตเดชเต‹เตพ เดˆ เดฒเต‡เด–เดจเด‚ เดŽเดดเตเดคเตเดจเตเดจเดคเต. เด…เดคเดฟเดจเดพเตฝ, LLVM เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด’เดฐเดฟเด•เตเด•เตฝ เด•เต‚เดŸเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเดฟเตฝ เดชเดฒเดคเดฐเด‚ เดชเดฟเดถเด•เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เดŽเดจเดฟเด•เตเด•เต เดฐเดธเด•เดฐเดฎเดพเดฏเดฟ เดคเต‹เดจเตเดจเดฟเดฏเดต เดžเดพเตป เด‡เดชเตเดชเต‹เตพ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚. เด•เตเดฒเดพเด™เต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เดˆ เดชเดฟเดถเด•เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเดฟเดจเตเดฑเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต† เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดตเดณเดฐเต† เด…เดธเต—เด•เดฐเตเดฏเดฎเดพเดฃเต). เดชเด•เตเดทเต‡ เดจเดฎเตเด•เตเด•เต เด•เดดเดฟเดฏเตเด‚. เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดˆ เดชเดฟเดถเด•เตเด•เดณเต†เดฒเตเดฒเดพเด‚ เดžเดพเตป เด’เดฐเต เดตเตˆเด•เตเดจเตเดจเต‡เดฐเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดฟ เดŽเดดเตเดคเดฟ.

เดŽเดจเตเดจเดพเตฝ เดฒเต‡เด–เดจเด‚ เดŽเดดเตเดคเดพเตป เดเดคเดพเดจเตเด‚ เด†เดดเตเดšเด•เตพ เดŽเดŸเตเดคเตเดคเต. เด‡เดคเต†เดฒเตเดฒเดพเด‚ เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเดพเตป เดŽเดจเดฟเด•เตเด•เต เดŽเดจเตเดจเต†เดคเตเดคเดจเตเดจเต† เดงเตˆเดฐเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ :).

เดตเดดเดฟเดฏเดฟเตฝ, เดชเดฟเดถเด•เตเด•เดณเตเด‚ เดธเดพเดงเตเดฏเดคเดฏเตเดณเตเดณ เด•เต‡เดŸเตเดชเดพเดŸเตเด•เดณเตเด‚ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเตป เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด…เดจเดฒเตˆเดธเดฑเดฟเตฝ เดŽเดจเตเดคเต เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเด•เดณเดพเดฃเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด‡เดคเต เดชเดฐเดฟเดšเดฏเดชเตเดชเต†เดŸเดพเตป เดžเดพเตป เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต. เด•เตเดฑเดฟเดชเตเดชเต.

เดชเตเดคเดฟเดฏเดคเตเด‚ เดชเดดเดฏเดคเตเดฎเดพเดฏ เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เตเดธเต

เด‡เดคเดฟเดจเด•เด‚ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เดเด•เดฆเต‡เดถเด‚ เดฐเดฃเตเดŸเต เดตเตผเดทเด‚ เดฎเตเดฎเตเดชเต LLVM เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดตเต€เดฃเตเดŸเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏ เดชเดฟเดถเด•เตเด•เตพ เดถเดฐเดฟเดฏเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เด‡เดชเตเดชเต‹เตพ เดˆ เดฒเต‡เด–เดจเด‚ เดชเดฟเดถเด•เตเด•เดณเตเดŸเต† เด’เดฐเต เดชเตเดคเดฟเดฏ เดฌเดพเดšเตเดšเต เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚. เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เดชเตเดคเดฟเดฏ เดฌเด—เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดคเต? เด‡เดคเดฟเดจเต 3 เด•เดพเดฐเดฃเด™เตเด™เดณเตเดฃเตเดŸเต:

  1. LLVM เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดตเดฟเด•เดธเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดชเดดเดฏ เด•เต‹เดกเต เดฎเดพเดฑเตเดฑเตเด•เดฏเตเด‚ เดชเตเดคเดฟเดฏ เด•เต‹เดกเต เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚, เดชเดฐเดฟเดทเตเด•เดฐเดฟเดšเตเดšเดคเตเด‚ เดŽเดดเตเดคเดฟเดฏเดคเตเดฎเดพเดฏ เด•เต‹เดกเดฟเตฝ เดชเตเดคเดฟเดฏ เดชเดฟเดถเด•เตเด•เตพ เด‰เดฃเตเดŸเต. เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เดตเดฟเดถเด•เดฒเดจเด‚ เดชเดคเดฟเดตเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เด‡เดคเต เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดคเต†เดณเดฟเดฏเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดŸเดฏเตเด•เตเด•เดฟเดŸเต†เดฏเดฒเตเดฒ. เดžเด™เตเด™เดณเตเดŸเต† เดฒเต‡เด–เดจเด™เตเด™เตพ เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด…เดจเดฒเตˆเดธเดฑเดฟเดจเตเดฑเต† เด•เดดเดฟเดตเตเด•เตพ เดจเดจเตเดจเดพเดฏเดฟ เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด•เต‹เดกเต เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเด‚ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเดฟเดถเด•เตเด•เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดšเต†เดฒเดตเต เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเดพเดฏเดฟ เด‡เดคเดฟเดจเต เดฏเดพเดคเตŠเดฐเต เดฌเดจเตเดงเดตเตเดฎเดฟเดฒเตเดฒ. เดธเตเดฅเดฟเดฐเดฎเดพเดฏเดฟ เด’เดฐเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เดกเต เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•!
  2. เดžเด™เตเด™เตพ เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เตเดธเต เด…เดจเตเดคเดฟเดฎเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ, เด…เดจเดฒเตˆเดธเตผ เดฎเตเดฎเตเดชเดคเตเดคเต† เดธเตเด•เดพเดจเตเด•เดณเดฟเตฝ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เดพเดคเตเดค เดชเดฟเดถเด•เตเด•เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚.
  3. 2 เดตเตผเดทเด‚ เดฎเตเดฎเตเดชเต เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒเดพเดคเตเดค เดชเตเดคเดฟเดฏ เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เตเดธเต เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเดฟเตฝ เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต. เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเตเดŸเต† เดตเดฟเด•เดธเดจเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เด•เดพเดฃเดฟเด•เตเด•เดพเตป เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เด…เดตเดฐเต† เดนเตˆเดฒเตˆเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต.

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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V522 [CWE-476] เดจเตพ เดชเต‹เดฏเดฟเดจเตเดฑเตผ 'LHS' เดจเตเดฑเต† เดกเดฟเดฑเดซเดฑเตปเดธเดฟเด™เต เดจเดŸเดจเตเดจเต‡เด•เตเด•เดพเด‚. TGPparser.cpp 2152

เดชเต‹เดฏเดฟเดจเตเดฑเตผ เด†เดฃเต†เด™เตเด•เดฟเตฝ LHS เด…เดธเดพเดงเตเดตเดพเดฃเต, เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต เดจเตฝเด•เดฃเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดชเด•เดฐเด‚, เด‡เดคเต‡ เดจเตพ เดชเต‹เดฏเดฟเดจเตเดฑเตผ เด’เดดเดฟเดตเดพเด•เตเด•เดชเตเดชเต†เดŸเตเด‚: LHS->getAsString().

เด’เดฐเต เดชเดฟเดถเด•เต เดนเดพเตปเดกเตโ€Œเดฒเดฑเดฟเตฝ เด’เดฐเต เดชเดฟเดถเด•เต เดฎเดฑเดžเตเดžเดฟเดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด‡เดคเต เดตเดณเดฐเต† เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฏ เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเดฎเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เด†เดฐเตเด‚ เด…เดต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดŽเดคเตเดฐ เดคเดตเดฃ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฒเตเด‚, เดŽเดคเตเดคเดฟเดšเตเดšเต‡เดฐเดพเดตเตเดจเตเดจ เดŽเดฒเตเดฒเดพ เด•เต‹เดกเตเด•เดณเตเด‚ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเดฑเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต. เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เดตเดฟเดถเด•เดฒเดจเด‚ เดฎเดฑเตเดฑเต เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เตเด‚ เดชเดฟเดถเด•เต เดชเดฐเดฟเดฐเด•เตเดทเดฃ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดคเด•เดณเตเด‚ เดŽเด™เตเด™เดจเต† เดชเต‚เตผเดคเตเดคเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเตเดฑเต† เดฎเดฟเด•เดšเตเดš เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฃเดฟเดคเต.

เดธเดฎเดพเดจเดฎเดพเดฏ เดชเต‹เดฏเดฟเดจเตเดฑเตผ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตฝ เดชเดฟเดถเด•เต HRH เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เด•เต‹เดกเดฟเตฝ เด…เดจเตเดตเดฆเดจเต€เดฏเด‚: V522 [CWE-476] เดจเตพ เดชเต‹เดฏเดฟเดจเตเดฑเตผ 'RHS' เดจเตเดฑเต† เดกเดฟเดฑเดซเดฑเตปเดธเดฟเด™เต เดจเดŸเดจเตเดจเต‡เด•เตเด•เดพเด‚. TGPparser.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] เดจเตพ เดชเต‹เดฏเดฟเดจเตเดฑเตผ 'เดชเตเดฐเต‹เด—เตเด•เตเดฒเต‹เตบ' เดกเต€เดฑเดซเดฑเตปเดธเดฟเด™เต เดจเดŸเดจเตเดจเต‡เด•เตเด•เดพเด‚. Miscompilation.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] เดจเตพ เดชเต‹เดฏเดฟเดจเตเดฑเตผ 'เดŸเต†เดธเตเดฑเตเดฑเต' เดกเต€เดฑเดซเดฑเตปเดธเดฟเด™เต เดจเดŸเดจเตเดจเต‡เด•เตเด•เดพเด‚. Miscompilation.cpp 709

เดตเต€เดฃเตเดŸเตเด‚ เด…เดคเต‡ เด…เดตเดธเตเดฅ. เด†เดฆเตเดฏเด‚, เด’เดฌเตเดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เดจเต€เด•เตเด•เดฟ, เดชเดฟเดจเตเดจเต€เดŸเต เด’เดจเตเดจเตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เดพเดคเตเดคเดคเตเดชเต‹เดฒเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. C++ เตฝ เดฎเต‚เดตเตเดฎเต†เดจเตเดฑเต เดธเต†เดฎเดพเดจเตเดฑเดฟเด•เตโ€Œเดธเต เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเดคเดฟเดจเต เดถเต‡เดทเด‚ เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด•เต‹เดกเดฟเตฝ เดžเดพเตป เดˆ เดธเดพเดนเดšเดฐเตเดฏเด‚ เด•เต‚เดŸเตเดคเตฝ เด•เต‚เดŸเตเดคเตฝ เด•เดพเดฃเตเดจเตเดจเต. เด…เดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เดžเดพเตป C++ เดญเดพเดทเดฏเต† เด‡เดทเตเดŸเดชเตเดชเต†เดŸเตเดจเตเดจเดคเต! เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เด•เดพเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเต†เดŸเดฟเดตเดฏเตเด•เตเด•เดพเตป เด•เต‚เดŸเตเดคเตฝ เด•เต‚เดŸเตเดคเตฝ เดชเตเดคเดฟเดฏ เดตเดดเดฟเด•เดณเตเดฃเตเดŸเต. เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เดŽเดฒเตเดฒเดพเดฏเตโ€Œเดชเตเดชเต‹เดดเตเด‚ เดœเต‹เดฒเดฟ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ :).

เดถเด•เดฒเด‚ 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 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] เดจเตพ เดชเต‹เดฏเดฟเดจเตเดฑเตผ '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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V570 'เดเดกเดจเตเดฑเดฟเดซเดฏเตผ->เดŸเตˆเดชเตเดชเต' เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดธเตเดตเดฏเด‚ เด…เดธเตˆเตป เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: 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] nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต 'ND' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดฒเตˆเดจเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•: 532, 534. SemaTemplateInstantiateDecl.cpp 532

เดชเดฟเดจเตเดจเต† เด‡เดตเดฟเดŸเต†:

  • V595 [CWE-476] nullptr-เดจเต†เดคเดฟเดฐเต† เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต 'U' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดšเต†เด•เตเด•เต เดฒเตˆเดจเตเด•เตพ: 404, 407. DWARFormValue.cpp 404
  • V595 [CWE-476] nullptr-เดจเต†เดคเดฟเดฐเต† เดธเตเดฅเดฟเดฐเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต 'ND' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดฒเตˆเดจเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•: 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V629 [CWE-190] '~(เดตเดฒเดฟเดชเตเดชเด‚ - 1) << 1' เดŽเด•เตเดธเตเดชเตเดฐเดทเตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•. 32-เดฌเดฟเดฑเตเดฑเต เดฎเต‚เดฒเตเดฏเดคเตเดคเดฟเดจเตเดฑเต† เดฌเดฟเดฑเตเดฑเต เดทเดฟเดซเตเดฑเตเดฑเดฟเด‚เด—เต, เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดตเดฟเดชเตเดฒเต€เด•เดฐเดฃเดคเตเดคเต‹เดŸเต† 64-เดฌเดฟเดฑเตเดฑเต เดคเดฐเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต. AArch64AddressingModes.h 260

เด‡เดคเตŠเดฐเต เดฌเด—เต เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฟเดฒเตเดฒ, เด•เต‹เดกเต เด‰เดฆเตเดฆเต‡เดถเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต† เดคเดจเตเดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดตเดณเดฐเต† เดธเด‚เดถเดฏเดพเดธเตเดชเดฆเดฎเดพเดฏ เดธเตเดฅเดฒเดฎเดพเดฃเต, เด…เดคเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดŽเดจเตเดจเต เดชเดฑเดฏเดพเด‚ เดตเดฒเตเดชเตเดชเด‚ 16 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฃเต, เดคเตเดŸเตผเดจเตเดจเต เด•เต‹เดกเดฟเดจเตเดฑเต† เดฐเดšเดฏเดฟเดคเดพเดตเต เด…เดคเต เด’เดฐเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเตฝ เดฒเดญเดฟเด•เตเด•เดพเตป เดชเดฆเตเดงเดคเดฟเดฏเดฟเดŸเตเดŸเต เดจเดฟเด‚เดธเต เด…เตผเดคเตเดฅเด‚:

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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: 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] เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เตพ เด•เต‚เดŸเตเดŸเดฟเดฏเดฟเดฃเด•เตเด•เดฟเดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. 'เดซเดฒเด‚ + Name.str()' เดŽเด•เตเดธเตเดชเตเดฐเดทเตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•. Symbol.cpp 32
  • V655 [CWE-480] เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เตพ เด•เต‚เดŸเตเดŸเดฟเดฏเดฟเดฃเด•เตเด•เดฟเดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. 'เดซเดฒเด‚ + "(ObjC เด•เตเดฒเดพเดธเต)" + Name.str()' เดŽเด•เตเดธเตเดชเตเดฐเดทเตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•. Symbol.cpp 35
  • V655 [CWE-480] เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เตพ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเดคเตเดคเดคเดพเดฃเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. 'เดซเดฒเด‚ + "(ObjC เด•เตเดฒเดพเดธเต EH) " + Name.str()' เดŽเด•เตเดธเตเดชเตเดฐเดทเตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•. Symbol.cpp 38
  • V655 [CWE-480] เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เตพ เด•เต‚เดŸเตเดŸเดฟเดฏเดฟเดฃเด•เตเด•เดฟเดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. 'เดซเดฒเด‚ + "(ObjC IVar)" + Name.str()' เดŽเด•เตเดธเตเดชเตเดฐเดทเตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•. Symbol.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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: 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] 'เดŽเดซเด•เตเดŸเตโ€Œเดธเต' เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดจเต เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏเดฟ เดฐเดฃเตเดŸเต เดคเดตเดฃ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเตเดชเด•เตเดทเต‡ เด‡เดคเต เด’เดฐเต เดคเต†เดฑเตเดฑเดพเดฃเต. เดฒเตˆเดจเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•: 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V560 [CWE-570] เดธเต‹เดชเดพเดงเดฟเด•เดฎเดพเดฏ เดชเดฆเดชเตเดฐเดฏเต‹เด—เดคเตเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดญเดพเด—เด‚ เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดคเต†เดฑเตเดฑเดพเดฃเต: RegNo == 0xe. ARMDisassembler.cpp 939

เดธเตเดฅเดฟเดฐเดฎเดพเดฏ 0xE เดŽเดจเตเดจเดคเต เดฆเดถเดพเด‚เดถเดคเตเดคเดฟเดฒเต† เดฎเต‚เดฒเตเดฏเด‚ 14 เด†เดฃเต. เดชเดฐเต€เด•เตเดท RegNo == 0xe เด…เตผเดคเตเดฅเดฎเดฟเดฒเตเดฒ เด•เดพเดฐเดฃเด‚ เดŽเด™เตเด•เดฟเตฝ RegNo > 13, เดคเตเดŸเตผเดจเตเดจเต เดซเด‚เด—เตเดทเตป เด…เดคเดฟเดจเตเดฑเต† เดจเดฟเตผเดตเตเดตเดนเดฃเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เตเด‚.

V547, V560 เดŽเดจเตเดจเต€ เดเดกเดฟเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดฎเดฑเตเดฑเต เดจเดฟเดฐเดตเดงเดฟ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เดณเตเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด…เดคเตเดชเต‹เดฒเต† V595, เดˆ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เตพ เดชเด เดฟเด•เตเด•เดพเตป เดŽเดจเดฟเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเดฟเดฒเตเดฒเดพเดฏเดฟเดฐเตเดจเตเดจเต. เด’เดฐเต เดฒเต‡เด–เดจเด‚ เดŽเดดเตเดคเดพเตป เดŽเดจเดฟเด•เตเด•เต เดฎเดคเดฟเดฏเดพเดฏ เดฎเต†เดฑเตเดฑเต€เดฐเดฟเดฏเตฝ เด‰เดฃเตเดŸเต†เดจเตเดจเต เด‡เดคเดฟเดจเด•เด‚ เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต :). เด…เดคเดฟเดจเดพเตฝ, PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต LLVM-เตฝ เด‡เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดŽเดคเตเดฐ เดชเดฟเดถเด•เตเด•เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเต เด…เดฑเดฟเดฏเดฟเดฒเตเดฒ.

เดˆ เดŸเตเดฐเดฟเด—เดฑเตเด•เตพ เดชเด เดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดฟเดฐเดธเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต†เดจเตเดจเดคเดฟเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดžเดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดคเดฐเดพเด‚. เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เต‹เดกเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต เดจเตฝเด•เตเดจเตเดจเดคเดฟเตฝ เด…เดจเดฒเตˆเดธเตผ เดคเดฟเด•เดšเตเดšเตเด‚ เดถเดฐเดฟเดฏเดพเดฃเต. เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เด’เดฐเต เดคเต†เดฑเตเดฑเดฒเตเดฒ.

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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V612 [CWE-670] เด’เดฐเต เดฒเต‚เดชเตเดชเดฟเดจเตเดณเตเดณเดฟเตฝ เด‰เดชเดพเดงเดฟเด•เดณเดฟเดฒเตเดฒเดพเดคเตเดค 'เดฎเดŸเด™เตเด™เตฝ'. R600OptimizeVectorRegisters.cpp 63

เด•เต‹เดกเต เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตผเดฎเดพเตผเด•เตเด•เต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด‰เดฆเตเดฆเต‡เดถเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เดชเดฟเดถเด•เต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดคเดฏเดพเดฃเดฟเดคเต. เดˆ เดกเดฟเดธเตˆเตป เดŽเดจเดฟเด•เตเด•เต เด’เดจเตเดจเตเด‚ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ, เดตเดณเดฐเต† เดธเด‚เดถเดฏเดพเดธเตเดชเดฆเดฎเดพเดฏเดฟ เดคเต‹เดจเตเดจเตเดจเตเดจเต. เด…เด™เตเด™เดจเต† เดŽเดดเตเดคเดพเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต :).

เดฎเดŸเตเดคเตเดคเต‹? เด…เดชเตเดชเต‹เตพ เดšเดพเดฏเดฏเต‹ เด•เดพเดชเตเดชเดฟเดฏเต‹ เด‰เดฃเตเดŸเดพเด•เตเด•เดพเตป เดธเดฎเดฏเดฎเดพเดฏเดฟ.

เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต LLVM 8-เตฝ เดฌเด—เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต

เดชเตเดคเดฟเดฏ เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เตเดธเต เดตเดดเดฟ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดžเตเดž เดตเตˆเด•เดฒเตเดฏเด™เตเด™เตพ

เดชเดดเดฏ เดกเดฏเด—เตเดจเต‹เดธเตเดฑเตเดฑเดฟเด•เตเดธเดฟเดจเตเดฑเต† 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V779 [CWE-561] เดฒเดญเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดค เด•เต‹เดกเต เด•เดฃเตเดŸเต†เดคเตเดคเดฟ. เด’เดฐเต เดชเดฟเดถเด•เต เด‰เดฃเตเดŸเดพเด•เดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต. ExecutionUtils.cpp 146

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฑเตเดŸเต† เดฐเดฃเตเดŸเต เดถเดพเด–เด•เดณเตเด‚ if เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด’เดฐเต เด•เต‹เดณเดฟเตฝ เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต เดฎเดŸเด•เตเด•เด‚. เด…เดคเดจเตเดธเดฐเดฟเดšเตเดšเต, เด•เดฃเตเดŸเต†เดฏเตเดจเตผ CtorDtorsBy Priority เด’เดฐเดฟเด•เตเด•เดฒเตเด‚ เดฎเดพเดฏเตโ€Œเด•เตเด•เดฟเดฒเตเดฒ.

เดถเด•เดฒเด‚ 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V784 เดฌเดฟเดฑเตเดฑเต เดฎเดพเดธเตเด•เดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเด‚ เด†เดฆเตเดฏ เด“เดชเตเดชเดฑเดฃเตเดŸเดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเดคเตเดคเต‡เด•เตเด•เดพเตพ เด•เตเดฑเดตเดพเดฃเต. เด‡เดคเต เด‰เดฏเตผเดจเตเดจ เดฌเดฟเดฑเตเดฑเตเด•เดณเตเดŸเต† เดจเดทเตเดŸเดคเตเดคเดฟเดจเต เด•เดพเดฐเดฃเดฎเดพเด•เตเด‚. RuntimeDyld.cpp 815

เดซเด‚เด—เตเดทเตป เดŽเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด• getStubAlinement เดฑเดฟเดŸเตเดŸเต‡เตบเดธเต เดคเดฐเด‚ เด’เดชเตเดชเดฟเดŸเดพเดคเตเดคเดคเต. เดซเด‚เด—เตโ€Œเดทเตป เดฎเต‚เดฒเตเดฏเด‚ 8 เดจเตฝเด•เตเดจเตเดจเต เดŽเดจเตเดจเต เด•เดฐเตเดคเดฟ, เดŽเด•เตโ€Œเดธเตโ€Œเดชเตเดฐเดทเดจเตเดฑเต† เดฎเต‚เดฒเตเดฏเด‚ เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเด‚:

~(getStubAlignment() - 1)

~(8u-1)

0xFFFFFFFF8u

เด‡เดชเตเดชเต‹เตพ เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด• เดกเดพเดฑเตเดฑ เดตเดฒเตเดชเตเดชเด‚ 64-เดฌเดฟเดฑเตเดฑเต เด’เดชเตเดชเดฟเดŸเดพเดคเตเดค เดคเดฐเด‚ เด‰เดฃเตเดŸเต. DataSize & 0xFFFFFFF8u เด“เดชเตเดชเดฑเต‡เดทเตป เดจเดŸเดคเตเดคเตเดฎเตเดชเต‹เตพ, เดŽเดฒเตเดฒเดพ เดฎเตเดชเตเดชเดคเตเดคเดฟเดฐเดฃเตเดŸเต เด‰เดฏเตผเดจเตเดจ เด“เตผเดกเตผ เดฌเดฟเดฑเตเดฑเตเด•เดณเตเด‚ เดชเต‚เดœเตเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเตเดจเดƒเดธเดœเตเดœเดฎเดพเด•เตเด•เดชเตเดชเต†เดŸเตเด‚. เดฎเดฟเด•เตเด•เดตเดพเดฑเตเด‚, เด‡เดคเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตผ เด†เด—เตเดฐเดนเดฟเดšเตเดšเดคเดฒเตเดฒ. เด…เดตเตป เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดžเดพเตป เดธเด‚เดถเดฏเดฟเด•เตเด•เตเดจเตเดจเต: DataSize & 0xFFFFFFFFFFFFFFF8u.

เดชเดฟเดถเด•เต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เด‡เดคเต เดŽเดดเตเดคเดฃเด‚:

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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V1028 [CWE-190] เดธเดพเดงเตเดฏเดฎเดพเดฏ เด“เดตเตผเดซเตเดฒเต‹. 'NumElts * เดธเตเด•เต†เดฏเดฟเตฝ' เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฑเดฟเดจเตเดฑเต† เด•เดพเดธเตเดฑเตเดฑเดฟเด‚เด—เต เด“เดชเตเดชเดฑเดฃเตเดŸเตเด•เตพ 'size_t' เดคเดฐเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด•, เดซเดฒเดฎเดฒเตเดฒ. X86ISelLowering.h 1577

เดคเดฐเด‚ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด—เตเดฃเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด“เดตเตผเดซเตเดฒเต‹ เด’เดดเดฟเดตเดพเด•เตเด•เดพเตป เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดคเดฐเด‚ เด•เดพเดธเตเดฑเตเดฑเดฟเด‚เด—เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต int. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดตเดฟเดŸเต† เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดคเดฐเด‚ เด•เดพเดธเตเดฑเตเดฑเดฟเด‚เด—เต เด“เดตเตผเดซเตเดฒเต‹เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เด†เดฆเตเดฏเด‚, เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด—เตเดฃเดฟเด•เตเด•เตเด‚, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เด—เตเดฃเดจเดคเตเดคเดฟเดจเตเดฑเต† 32-เดฌเดฟเดฑเตเดฑเต เดซเดฒเด‚ เดคเดฐเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เต‚. เดตเดฒเดฟเดชเตเดชเด‚_เดŸเดฟ.

เดถเด•เดฒเด‚ 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V1001 [CWE-563] 'เดฎเต‹เดกเต' เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เด…เดธเตˆเตป เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดชเด•เตเดทเต‡ เดซเด‚เด—เตโ€Œเดทเดจเตเดฑเต† เด…เดตเดธเดพเดจเดคเตเดคเต‹เดŸเต† เด…เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฟเดฒเตเดฒ. SIModeRegister.cpp 48

เดซเด‚เด—เตโ€Œเดทเตป เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เตพเด•เตเด•เต เด•เตเดฒเดพเดธเต เด…เด‚เด—เด™เตเด™เดณเตเดŸเต† เด…เดคเต‡ เดชเต‡เดฐเตเด•เตพ เดจเตฝเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เด…เดชเด•เดŸเด•เดฐเดฎเดพเดฃเต. เด†เดถเดฏเด•เตเด•เตเดดเดชเตเดชเดคเตเดคเดฟเดฒเดพเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต. เด…เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด’เดฐเต เด•เต‡เดธเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดจเดฎเตเดฎเตเดŸเต† เดฎเตเดจเตเดจเดฟเดฒเตเดณเตเดณเดคเต. เดˆ เดชเดฆเดชเตเดฐเดฏเต‹เด—เดคเตเดคเดฟเดจเต เด…เตผเดคเตเดฅเดฎเดฟเดฒเตเดฒ:

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 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] nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ 'Ptr' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดšเต†เด•เตเด•เต เดฒเตˆเดจเตเด•เตพ: 729, 738. TargetTransformInfoImpl.h 738

เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ Ptr เดคเตเดฒเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚ 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] nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ 'FD' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดšเต†เด•เตเด•เต เดฒเตˆเดจเตเด•เตพ: 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] nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ 'PtrTy' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดšเต†เด•เตเด•เต เดฒเตˆเดจเตเด•เตพ: 960, 965. InterleavedLoadCombinePass.cpp 965

เด…เดคเตเดคเดฐเด‚ เดชเดฟเดถเด•เตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเดตเดฏเด‚ เดŽเด™เตเด™เดจเต† เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเด‚? เด•เต‹เดกเต-เดฑเดฟเดตเตเดฏเต‚เดตเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เดถเตเดฐเดฆเตเดงเดพเดฒเตเดตเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด•, เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เต‹เดกเต เดชเดคเดฟเดตเดพเดฏเดฟ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป PVS-Studio เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•.

เด‡เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดชเดฟเดถเด•เตเด•เดณเตเดณเตเดณ เดฎเดฑเตเดฑเต เด•เต‹เดกเต เดถเด•เดฒเด™เตเด™เตพ เด‰เดฆเตเดงเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เด…เตผเดคเตเดฅเดฎเดฟเดฒเตเดฒ. เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เดžเดพเตป เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดฎเดพเดคเตเดฐเด‚ เด‡เดŸเตเด‚:

  • V1004 [CWE-476] 'Expr' เดชเต‹เดฏเดฟเดจเตเดฑเตผ nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดšเต†เด•เตเด•เต เดฒเตˆเดจเตเด•เตพ: 1049, 1078. DebugInfoMetadata.cpp 1078
  • V1004 [CWE-476] nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ 'PI' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดšเต†เด•เตเด•เต เดฒเตˆเดจเตเด•เตพ: 733, 753. LegacyPassManager.cpp 753
  • V1004 [CWE-476] 'StatepointCall' เดชเต‹เดฏเดฟเดจเตเดฑเตผ nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดฒเตˆเดจเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•: 4371, 4379. Verifier.cpp 4379
  • V1004 [CWE-476] nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ 'RV' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดšเต†เด•เตเด•เต เดฒเตˆเดจเตเด•เตพ: 2263, 2268. TGPparser.cpp 2268
  • V1004 [CWE-476] nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ 'CalleeFn' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดฒเตˆเดจเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•: 1081, 1096. SimplifyLibCalls.cpp 1096
  • V1004 [CWE-476] nullptr-เดจเต†เดคเดฟเดฐเต† เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเตเดฑเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚ 'TC' เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒเดพเดคเตเดค เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต. เดšเต†เด•เตเด•เต เดฒเตˆเดจเตเด•เตพ: 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-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต: V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดธเตเดŸเตเดฐเดพเดฑเตเดฑเดœเต€เดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-isel-fuzzer.cpp 58

เด’เดฐเต เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดจเตเดฑเต† เด…เดฑเตเดฑเดคเตเดคเต เด’เดฐเต เด˜เดŸเด•เด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดชเต‹เดฒเต† std:: เดตเต†เด•เตเดฑเตเดฑเตผ > เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดดเตเดคเดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ xxx.push_back(เดชเตเดคเดฟเดฏ X), เดฎเตเดคเตฝ เดชเดฐเต‹เด•เตเดทเดฎเดพเดฏ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เด‡เดฒเตเดฒ X* ะฒ std::unique_ptr.

เด’เดฐเต เดชเตŠเดคเต เดชเดฐเดฟเดนเดพเดฐเด‚ เดŽเดดเตเดคเตเด• เดŽเดจเตเดจเดคเดพเดฃเต xxx.emplace_back(เดชเตเดคเดฟเดฏ X)เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเตฝ: เดฐเต€เดคเดฟ emplace_back เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเต‡เดฐเดฟเดŸเตเดŸเต เด’เดฐเต เด˜เดŸเด•เด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด•เตบเดธเตเดŸเตเดฐเด•เตโ€ŒเดŸเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเดพเด•เตเด‚.

เด…เดคเต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดฒเตเดฒ. เดตเต†เด•เตเดฑเตเดฑเตผ เดจเดฟเดฑเดžเตเดžเดพเตฝ, เดฎเต†เดฎเตเดฎเดฑเดฟ เดตเต€เดฃเตเดŸเตเด‚ เด…เดฒเต‹เด•เตเด•เต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเด‚. เดฎเต†เดฎเตเดฎเดฑเดฟ เดฑเต€เดฒเต‹เด•เตเด•เต‡เดทเตป เด“เดชเตเดชเดฑเต‡เดทเตป เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเดพเด‚, เด…เดคเดฟเดจเตเดฑเต† เดซเดฒเดฎเดพเดฏเดฟ เด’เดฐเต เด…เดชเดตเดพเดฆเด‚ เดŽเดฑเดฟเดฏเดชเตเดชเต†เดŸเตเด‚ std::bad_alloc. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเด‚, เดธเตƒเดทเตเดŸเดฟเดšเตเดš เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เด’เดฐเดฟเด•เตเด•เดฒเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟเดฒเตเดฒ.

เด’เดฐเต เดธเตเดฐเด•เตเดทเดฟเดค เดชเดฐเดฟเดนเดพเดฐเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดคเดจเดคเต_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] เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ 'Emplace_back' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'Passes' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. PassManager.h 546
  • V1023 [CWE-460] เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ 'เดŽเดŽเดŽเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดšเต‡เตผเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. AliasAnalysis.h 324
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดŽเตปเดŸเตเดฐเดฟเด•เตพ' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. DWARFDebugFrame.cpp 519
  • V1023 [CWE-460] เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ 'Emplace_back' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'AllEdges' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. 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' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'Strategies' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-isel-fuzzer.cpp 60
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดฎเต‹เดกเดฟเดซเดฏเต‡เดดเตโ€Œเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-stress.cpp 685
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดฎเต‹เดกเดฟเดซเดฏเต‡เดดเตโ€Œเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-stress.cpp 686
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดฎเต‹เดกเดฟเดซเดฏเต‡เดดเตโ€Œเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-stress.cpp 688
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดฎเต‹เดกเดฟเดซเดฏเต‡เดดเตโ€Œเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-stress.cpp 689
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดฎเต‹เดกเดฟเดซเดฏเต‡เดดเตโ€Œเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-stress.cpp 690
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดฎเต‹เดกเดฟเดซเดฏเต‡เดดเตโ€Œเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-stress.cpp 691
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดฎเต‹เดกเดฟเดซเดฏเต‡เดดเตโ€Œเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-stress.cpp 692
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดฎเต‹เดกเดฟเดซเดฏเต‡เดดเตโ€Œเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. llvm-stress.cpp 693
  • V1023 [CWE-460] 'เดŽเด‚เดชเตเดฒเต‡เดธเต_เดฌเดพเด•เตเด•เต' เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 'เดฎเต‹เดกเดฟเดซเดฏเต‡เดดเตโ€Œเดธเต' เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต‡เด•เตเด•เต เด‰เดŸเดฎเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด’เดดเดฟเดตเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด’เดฐเต เดฎเต†เดฎเตเดฎเดฑเดฟ เดฒเต€เด•เตเด•เต เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚. 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 เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เตพ เดจเตฝเด•เดฟ, เดคเตเดŸเตผเดจเตเดจเต เดจเดฟเตผเดคเตเดคเดฟ. LLVM-เตฝ PVS-Studio เด…เดจเดฒเตˆเดธเตผ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจ เดฎเดฑเตเดฑเต เดคเด•เดฐเดพเดฑเตเด•เตพ เด‰เดฃเตเดŸเต‹? เด…เดคเต†, เดŽเดจเดฟเด•เตเด•เตเดฃเตเดŸเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดžเดพเตป เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เด•เต‹เดกเต เดถเด•เดฒเด™เตเด™เตพ เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ, เด…เดคเต เดตเตˆเด•เตเดจเตเดจเต‡เดฐเดฎเต‹ เดฐเดพเดคเตเดฐเดฟเดฏเต‹ เด†เดฏเดฟเดฐเตเดจเตเดจเต, เด…เดคเต เด’เดฐเต เดฆเดฟเดตเดธเด‚ เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เต‡เดฃเตเดŸ เดธเดฎเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต.

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เดฐเดธเด•เดฐเดฎเดพเดฏเดฟ เดคเต‹เดจเตเดจเดฟเดฏเต†เดจเตเดจเตเด‚ PVS-Studio เด…เดจเดฒเตˆเดธเตผ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเตเด‚ เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดจเดฒเตˆเดธเตผ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดฎเตˆเตปเดธเตเดตเต€เดชเตเดชเตผ เด•เต€ เดจเต‡เดŸเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚ เดˆ เดชเต‡เดœเต.

เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเดฟ, เดธเตเดฅเดฟเดฐเดฎเดพเดฏ เดตเดฟเดถเด•เดฒเดจเด‚ เดชเดคเดฟเดตเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•. เด’เดฑเตเดฑเดคเตเดคเดตเดฃ เดชเดฐเดฟเดถเต‹เดงเดจเด•เตพ, เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดพเดฒเดฟเดธเดฟเดธเดฟเดจเตเดฑเต† เดฐเต€เดคเดฟเดถเดพเดธเตเดคเตเดฐเด‚ เดœเดจเด•เต€เดฏเดฎเดพเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดจเดŸเดคเตเดคเดฟเดฏเดคเตเด‚ เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹เดฏเตเด‚ เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดธเดพเดนเดšเดฐเตเดฏเดฎเดฒเตเดฒ.

เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เต‹เดกเดฟเดจเตเดฑเต† เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเดตเตเด‚ เดตเดฟเดถเตเดตเดพเดธเตเดฏเดคเดฏเตเด‚ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเตฝ เดญเดพเด—เตเดฏเด‚!

เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด…เดจเดฒเตˆเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต LLVM 8-เตฝ เดฌเด—เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต

เด‡เด‚เด—เตเดฒเต€เดทเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‡เด•เตเดทเด•เดฐเตเดฎเดพเดฏเดฟ เดˆ เดฒเต‡เด–เดจเด‚ เดชเด™เตเด•เดฟเดŸเดพเตป เดจเดฟเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เดตเดฟเดตเตผเดคเตเดคเดจ เดฒเดฟเด™เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•: Andrey Karpov. เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต LLVM 8-เตฝ เดฌเด—เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•