рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рджреЛ рд╕рд╛рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрднреА рднреА рдмрдЧ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдХреЗ рдмреАрдЪ рдЕрдЧреНрд░рдгреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рдо рдирдП рдХреАрдбрд╝реЗ рдХреЗ рд▓рд┐рдП LLVM 8.0.0 рд░рд┐рд▓реАрдЬ рдХреЛ рд╕реНрдХреИрди рдХрд░рдХреЗ рдХрд░реЗрдВрдЧреЗред
рдЬреЛ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдорди рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдордЬреЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЬрд╛рдВрдЪрд╛ рд╣реИ (
1 ,
2 ,
3 )ред рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдирдпрд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдерд╛ред
рдЬрдм рднреА рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд╣реЛрддрд╛ рд╣реИ рдпрд╛
рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдИрдореЗрд▓ рдкрдврд╝рдиреЗ рдХреЛ рдорд┐рд▓рддреЗ рд╣реИрдВ:
рдЕрд░реЗ, рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирдП рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдорд┐рд▓реЗ! рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдХреНрд▓реИрдВрдЧ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдм рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рдЖрдк рдХреНрдпрд╛ рдХрд╣реЗрдВрдЧреЗ?рдЗрд╕ рдкрд░ рдореИрдВ рдЦреБрд╢реА рд╕реЗ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛:
рд╣рдо рдпрд╛ рддреЛ рдЪрд╛рд░реЛрдВ рдУрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ! рд╣рдордиреЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ - рд╣рдо рдЕрднреА рднреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмреБрд░рд╛ рдЬрд╡рд╛рдм рд╣реИ, рдореБрдЭреЗ рдбрд░ рд╣реИред рдпрд╣ рдХреЛрдИ рд╕рдмреВрдд рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ LLVM рдХреЛ рдПрдХ рдмрд╛рд░ рдФрд░ рдЪреЗрдХ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЧреЛрдВ рдХреЛ рдкрд╛рдпрд╛ рд╣реИред рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЙрди рдкрд░ рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдЗрди рдмрдЧреНрд╕ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ (рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ) - рдФрд░ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░, рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рдЙрди рд╕рднреА рдмрдЧреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╢рд╛рдо рд▓рдЧреАред
рд▓реЗрдЦ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рд╕рдкреНрддрд╛рд╣ рд▓рдЧ рдЧрдПред рдореИрдВ рд╕рд┐рд░реНрдл рдкрд╛рда рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рд╕рд╛рдордЧреНрд░реА рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрд╛ :)ред
рд╡реИрд╕реЗ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдмрдЧ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕
рдкреЛрд╕реНрдЯ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдирдП рдФрд░ рдореМрдЬреВрджрд╛ рдирд┐рджрд╛рди
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛, рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдХрдИ рдЪреЗрдХреЛрдВ рдореЗрдВ рд╕реЗ рдЖрдЦрд┐рд░реА рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЬреЛ рдХреАрдбрд╝реЗ рдкрд╛рдП рдЧрдП рдереЗ, рд╡реЗ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдП рдЧрдП рдереЗред рдпрд╣ рдЖрд▓реЗрдЦ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рднрд╛рдЧ рджрд┐рдЦрд╛рдПрдЧрд╛ред рдирдП рдХреАрдбрд╝реЗ рдХреИрд╕реЗ рдЖрддреЗ рд╣реИрдВ? рдЗрд╕рдХреЗ рддреАрди рдХрд╛рд░рдг рд╣реИрдВ:
- рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реА рд╣реИ; рд▓реЗрдЦрдХ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирдпрд╛ рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рджреЛрдиреЛрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдФрд░ рдирдП рднрд╛рдЧреЛрдВ рдореЗрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдирдП рдХреАрдбрд╝реЗ рд╣реИрдВред рдпрд╣ рддрдереНрдп рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордЬрдмреВрдд рддрд░реНрдХ рд╣реИ рдмрдЬрд╛рдп рд╣рд░ рдЕрдм рдФрд░ рдлрд┐рд░ред рд╣рдорд╛рд░реЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдпрд╛ рдмрдЧ-рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХреЛ рдХрдо рдЦрд░реНрдЪреАрд▓рд╛ рдмрдирд╛рдиреЗ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ!
- рд╣рдо рдореМрдЬреВрджрд╛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдзрд╛рд░рддреЗ рд╣реИрдВ, рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдЙрди рдмрдЧреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкреЙрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдереЗред
- рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдирдП рдирд┐рджрд╛рди рдХреЗ рд╕рд╛рде рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЦрдВрдб рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдкреНрд░рдЧрддрд┐ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗред
рдореМрдЬреВрджрд╛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдП рдЧрдП рджреЛрд╖
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 1: рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░реЗрдВstatic bool ShouldUpgradeX86Intrinsic(Function *F, StringRef Name) { if (Name == "addcarryx.u32" ||
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢:
V501 [CWE-570] рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'Name.startswith ("avx512.mask.permvarред")' рдмрд╛рдИрдВ рдУрд░ рдФрд░ рджрд╛рдИрдВ рдУрд░ '||' рдСрдкрд░реЗрдЯрд░ред AutoUpgrade.cpp 73
рдХреА рдШрдЯрдирд╛ "avx512.mask.permvarред" рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рджреЛ рдмрд╛рд░ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдереА, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЙрдкреА рдХреА рдЧрдИ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 2: рдЯрд╛рдЗрдкреЛ 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- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V501 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'CXNameRange_WantQualifier' рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ '|' рдСрдкрд░реЗрдЯрд░ред CIndex.cpp 7245
рдПрдХ рдЯрд╛рдЗрдкреЛ рдХреЗ рдХрд╛рд░рдг рджреЛ рдмрд╛рд░ рдирд╛рдорд┐рдд
CXNameRange_WantQualifier рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 3: рдСрдкрд░реЗрдЯрд░ рдкреВрд░реНрд╡рддрд╛ рдкрд░ рднреНрд░рдо 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))
рдЯрд░реНрдиреЗрд░реА рдСрдкрд░реЗрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рддрд░реНрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрд╖реНрдардХ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рди рдХрд░реЗрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ
рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ
рд╣реИ , "рдЦрдВрдб рд╕реЗ рд╕рд╛рд╡рдзрд╛рди ?: рдСрдкрд░реЗрдЯрд░ рдФрд░ рдЗрд╕реЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ"ред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 4, 5: рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 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] рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдХреА Lereferencing 'LHS' рд╣реЛ рд╕рдХрддреА рд╣реИред TGParser.cpp 2152
рдпрджрд┐
LHS рд╕реВрдЪрдХ рд╢реВрдиреНрдп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣
рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдЧрд╛ рдХрд┐ рдмрд╣реБрдд рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ:
LHS-> getAsString () ред
рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдареАрдХ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдмрдЧреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рд╣реИред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рднреА рдЬрд╛рдВрдЪ рдпреЛрдЧреНрдп рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рддрдиреА рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЕрдиреНрдп рдХреЛрдб рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕рдВрд░рдХреНрд╖рдг рдХрд╛ рдорддрд▓рдм рд╣реИред
RHS рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рджреЛрд╖рдкреВрд░реНрдг рд╣реИрдВрдбрд▓рд░ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: V522 [CWE-476] рдЕрд╢рдХреНрдд рдкреЙрдЗрдВрдЯрд░ 'RHS' рдХреА рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред TGParser.cpp 2186
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 6: рдПрдХ рдЪрд╛рд▓ рдХреЗ рдмрд╛рдж рдПрдХ рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ static Expected<bool> ExtractBlocks(....) { .... std::unique_ptr<Module> ProgClone = CloneModule(BD.getProgram(), VMap); .... BD.setNewProgram(std::move(ProgClone));
PVS-Studio рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V522 [CWE-476] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'ProgClone' рдХреА рдбреНрд░рд╛рдлреНрдЯрд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░ .рдкреАрд╕реА 601
рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░
ProgClone рдкрд╣рд▓реЗ рд╡рд╕реНрддреБ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ:
BD.setNewProgram(std::move(ProgClone));
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ,
ProgClone рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдмрди рдЧрдпрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП, рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдереЛрдбрд╝рд╛ рдФрд░ рдЖрдЧреЗ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ:
Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first);
рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛! рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓реВрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
MiscompiledFunctions рдХрдВрдЯреЗрдирд░ рдХреЛ рдкрд╣рд▓реЗ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
MiscompiledFunctions.clear();
рдФрд░ рдлрд┐рд░ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рд▓реВрдк рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд▓реВрдк рдЕрднреА рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рднреА рд╣реИ, рдФрд░ рдХреЛрдб рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдЬреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рд╡рд╣ рдХреБрдЦреНрдпрд╛рдд рддреНрд░реБрдЯрд┐ рд╕рдорддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рдмрдЧ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рднреЗрд╕ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)ред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 7: рдПрдХ рдЪрд╛рд▓ рдХреЗ рдмрд╛рдж рдПрдХ рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ 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));
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V522 [CWE-476] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'рдЯреЗрд╕реНрдЯ' рдХреА рдбреНрд░рд╛рдлреНрдЯрд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред рдорд┐рд╕рдХрдВрдкреНрд▓реАрдХреЗрдЯреЗрд╢рдиред 709
рдпрд╣ рдПрдХ рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖред C ++ рдореЗрдВ рдореВрд╡рдореЗрдВрдЯ рд╢рдмреНрджрд╛рд░реНрде рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рддреНрд░реБрдЯрд┐ рдХрднреА рдЕрдзрд┐рдХ рдмрдврд╝ рд░рд╣реА рд╣реИред рдпрд╣реА рдореБрдЭреЗ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╕рдВрдж рд╣реИ! рдЖрдкрдХреЛ рдкреИрд░ рдореЗрдВ рдЦреБрдж рдХреЛ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЗ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ :)ред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 8: рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 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] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'рдкреНрд░рдХрд╛рд░' рдХреА рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред рдкреНрд░рд┐рдЯреАрдлрдВрдХреНрд╢рдирдбреЙрдкрд░ред 233
рддреНрд░реБрдЯрд┐ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреА рддрд░рд╣, рдбрд┐рдмрдЧ рдбреЗрдЯрд╛ рдХреЛ рдореБрджреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдпрд╛ рддреЛ рдкрд░реНрдпрд╛рдкреНрдд рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдирдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдлрд╝рдВрдХреНрд╢рди рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдирд┐рд╢реНрдЪрд┐рдд рдХреЛрдб:
if (Type) Type->dump(*this); else Printer << "<unknown-type>";
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 9: рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ void SearchableTableEmitter::collectTableEntries( GenericTable &Table, const std::vector<Record *> &Items) { .... RecTy *Ty = resolveTypes(Field.RecType, TI->getType()); if (!Ty)
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V522 [CWE-476] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'Ty' рдХреА рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред SearchableTableEmitter.cpp 614
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рдЯрд┐рдкреНрдкрдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 10: рдЯрд╛рдЗрдкреЛ bool FormatTokenLexer::tryMergeCSharpNullConditionals() { .... auto &Identifier = *(Tokens.end() - 2); auto &Question = *(Tokens.end() - 1); .... Identifier->ColumnWidth += Question->ColumnWidth; Identifier->Type = Identifier->Type;
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V570 'рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░-> рдЯрд╛рдЗрдк' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╣реА рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред FormatTokenLexer.cpp 249
рд╕реНрд╡рдпрдВ рдХреЛ рдПрдХ рдЪрд░ рд╕реМрдВрдкрдирд╛ рдПрдХ рдЕрд░реНрдерд╣реАрди рдСрдкрд░реЗрд╢рди рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
Identifier->Type = Question->Type;
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 11: рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рд╡рд┐рд░рд╛рдо void SystemZOperand::print(raw_ostream &OS) const { switch (Kind) { break; case KindToken: OS << "Token:" << getToken(); break; case KindReg: OS << "Reg:" << SystemZInstPrinter::getRegisterName(getReg()); break; .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V622 [CWE-478] 'рд╕реНрд╡рд┐рдЪ' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ 'рдХреЗрд╕' рдСрдкрд░реЗрдЯрд░ рдЧрд╛рдпрдм рд╣реЛред SystemZAsmParser.cpp 652
рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз
рдмреНрд░реЗрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 12: рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЪреЗрдХ рдХрд░рдирд╛ 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"); .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V595 [CWE-476] 'рдХреИрд▓рд▓реА' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 172, 174ред AMDGPUInline.cpp 172
рдЬрдм
рдЧреЗрдЯрдЯреАрдЯреАрдЖрдИ рдлрдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
рдХреИрд▓реА рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрд╣рд▓реЗ
рдбрд┐рд░реЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕реВрдЪрдХ рдХреЛ
рдирд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП:
if (!Callee || Callee->isDeclaration())
рдмрд╣реБрдд рджреЗрд░ рд╕реЗ ...
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 13 - рдирд╣реАрдВ ....: рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЪреЗрдХ рдХрд░рдирд╛рдкрд┐рдЫрд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдкрд╛рдИ рдЧрдИ рд╣реИ:
static Value *optimizeDoubleFP(CallInst *CI, IRBuilder<> &B, bool isBinary, bool isPrecise = false) { .... Function *CalleeFn = CI->getCalledFunction(); StringRef CalleeNm = CalleeFn->getName();
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V595 [CWE-476] 'CalleeFn' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреНрд╕: 1079, 1081. рд╕рд┐рдореНрдкрд▓реАрдлрд╛рдИрд▓рд╛рдЗрдм рдХреЙрд▓рд╕ред 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());
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V595 [CWE-476] 'рдПрдирдбреА' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 532, 534ред SemaTemplateInstantiateDecl.cpp 532
рдФрд░ рдпрд╣рд╛рдБ:
- V595 [CWE-476] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'U' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 404, 407. DWARFFormValue.cpp 404
- V595 [CWE-476] 'ND' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 2149, 2151. SemaTemplateInstantiate.cpp 2149
рддрдм рдореИрдВрдиреЗ V595 рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рдЦреЛ рджреА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреНрдп рдХреАрдбрд╝реЗ рд╣реИрдВ рдЬреЛ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рд╣реИрдВред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 17, 18: рд╕рдВрджрд┐рдЧреНрдз рдкрд╛рд░реА static inline bool processLogicalImmediate(uint64_t Imm, unsigned RegSize, uint64_t &Encoding) { .... unsigned Size = RegSize; .... uint64_t NImms = ~(Size-1) << 1; .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V629 [CWE-190] '~ (рдЖрдХрд╛рд░ - 1) << 1' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде 32-рдмрд┐рдЯ рдореВрд▓реНрдп рдХрд╛ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯрд┐рдВрдЧред AArch64AddressingModes.h 260
рдпрд╣ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЬрд╛рдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐
рдЖрдХрд╛рд░ рдЪрд░ рдХрд╛ рдореВрд▓реНрдп 16 рд╣реИ; рддрдм
NImms рдЪрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ:
1111111111111111111111111111111111111111111111111111111111100000
рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдорд┐рд▓реЗрдЧрд╛:
0000000000000000000000000000000011111111111111111111111111100000
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЧрдгрдирд╛рдПрдВ 32-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ
uint64_t рдкрд░ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддрдп рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
uint64_t NImms = ~static_cast<uint64_t>(Size-1) << 1;
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдФрд░ рдмрдЧ: V629 [CWE-190] 'Immr << 6' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде 32-рдмрд┐рдЯ рдореВрд▓реНрдп рдХрд╛ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯрд┐рдВрдЧред AArch64AddressingModes.h 269
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 19: рдХреАрд╡рд░реНрдб рдХреЛ рдорд┐рд╕ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ ? void AMDGPUAsmParser::cvtDPP(MCInst &Inst, const OperandVector &Operands) { .... if (Op.isReg() && Op.Reg.RegNo == AMDGPU::VCC) {
PVS-Studio рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢:
V646 [CWE-670] рдЖрд╡реЗрджрди рдХреЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ 'рдФрд░' рдХреАрд╡рд░реНрдб рдЧрд╛рдпрдм рд╣реИред AMDGPUAsmParser.cpp 5655
рдпрд╣ рдПрдХ рдмрдЧ рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдкрд╣рд▓реЗ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж рд╕реЗ
рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИ , рддреЛ рдпрд╣ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕
рджреВрд╕рд░рд╛ рдХреАрд╡рд░реНрдб рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓рд╛рдкрддрд╛
рдЕрдиреНрдп рдХреЛрдб рдХреЛ рдХрдо рдкрдардиреАрдп рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╕рдВрднрд╡рддрдГ рдЦрддрд░рдирд╛рдХ рд╣реИред рдпрджрд┐ рдПрдХ рджрд┐рди рднреА рдЧрд╛рдпрдм рд░рд╣рд╛, рддреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рднрд╛рд░реА рдмрджрд▓рд╛рд╡ рдЖрдПрдЧрд╛ред рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ
рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 20: рдЪрд╛рд░ рд╕рдорд╛рди рдЯрд╛рдЗрдкреЛ 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();
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢:
- V655 [CWE-480] рддрд╛рд░ рд╕рдорд╡рд░реНрддреА рдереЗ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред 'рдкрд░рд┐рдгрд╛рдо + Name.str ()' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рддреАрдХред Cpp 32
- V655 [CWE-480] рддрд╛рд░ рд╕рдорд╡рд░реНрддреА рдереЗ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред 'рдкрд░рд┐рдгрд╛рдо +' (рдУрдмрдЬреИрдХ рдХреНрд▓рд╛рд╕) "+ Name.str () 'рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рддреАрдХ
- V655 [CWE-480] рддрд╛рд░ рд╕рдорд╡рд░реНрддреА рдереЗ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред 'рд░рд┐рдЬрд▓реНрдЯ +' (ObjC Class EH) "+ Name.str () 'рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рддреАрдХред Cpp 38
- V655 [CWE-480] рддрд╛рд░ рд╕рдорд╡рд░реНрддреА рдереЗ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред 'рд░рд┐рдЬрд▓реНрдЯ +' (ObjC IVar) "+ Name.str () 'рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рддреАрдХред Cpp 41
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдЧрд▓рддреА рд╕реЗ + рдХреЗ рдмрдЬрд╛рдп + рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЪрд╛рд░ рдЕрд░реНрдерд╣реАрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 21: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ 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(); } } }
рдмрдЧ рдХреЛ рдкрд╣рд▓реЗ рдЦреБрдж рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдореИрдВрдиреЗ рдЫрд╡рд┐ рдХреЛ рдЗрд╕рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рддрд╛рдХрд┐ рдЖрдк рддреБрд░рдВрдд рдЙрддреНрддрд░ рдХреА рдУрд░ рди рджреЗрдЦреЗрдВ:
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V708 [CWE-758] рдЦрддрд░рдирд╛рдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'FeaturesMap [Op] = FeaturesMap.size (), рдЬрд╣рд╛рдВ' FeaturesMap '' рдореИрдк 'рд╡рд░реНрдЧ рдХрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред RISCVCompressInstEmitter.cpp 490
рджреЛрд╖рдкреВрд░реНрдг рд░реЗрдЦрд╛ рдпрд╣ рд╣реИ:
FeaturesMap[Op] = FeaturesMap.size();
рдпрджрд┐
Op рддрддреНрд╡ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореИрдк рдореЗрдВ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдореИрдк рдореЗрдВ рдХреБрд▓ рддрддреНрд╡реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЕрднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдирдП рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ
рдЖрдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдирд╣реАрдВред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 22 - рдирд╣реАрдВред 24: рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ Error MachOObjectFile::checkSymbolTable() const { .... } else { MachO::nlist STE = getSymbolTableEntry(SymDRI); NType = STE.n_type;
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
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 25 - рдирд╣реАрдВред 27: рдЕрдзрд┐рдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯрдпреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рддреЗ рд╣реИрдВред
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
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 28: рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ 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)
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V547 [CWE-571] рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'рдиреЗрдХреНрд╕реНрдЯрдмрд╛рдЗрдЯ! = 0x90' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред X86DisassemblerDecoder.cpp 379
рдЪреЗрдХ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рдЕрдЧрд▓рд╛рдмрд╛рдЗрдЯ рд╡реИрд░рд┐рдПрдмрд▓
0x90 рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рд╕рд┐рд░реНрдл рдкрд┐рдЫрд▓реЗ рдЪреЗрдХ рд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рддрд░реНрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 29 - рдирд╣реАрдВ ....: рд╣рдореЗрд╢рд╛ рд╕рд╣реА / рдЧрд▓рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБрдПрдХ рд╕рдВрдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ (
V547 ) рдпрд╛ рдХрд┐рд╕реА рд╕реНрдерд┐рддрд┐ (
V560 ) рдХреЗ рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдпрд╛ рдЧрд▓рдд рд╣реЛрддреА рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рдХреЗ рдмрдЬрд╛рдп, рдпреЗ рдЕрдХреНрд╕рд░ рдмрд╕ рдЦрд░рд╛рдм рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВ, рдореИрдХреНрд░реЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдкреНрд░рднрд╛рд╡, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдРрд╕реА рд╕рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЕрднреА рднреА рдЬрд╛рдВрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ:
static DecodeStatus DecodeGPRPairRegisterClass(MCInst &Inst, unsigned RegNo, uint64_t Address, const void *Decoder) { DecodeStatus S = MCDisassembler::Success; if (RegNo > 13) return MCDisassembler::Fail; if ((RegNo & 1) || RegNo == 0xe) S = MCDisassembler::SoftFail; .... }
PVS-Studio рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢:
V560 [CWE-570] рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ: RegNo == 0xeред ARMDisassembler.cpp 939
0xE рд╕реНрдерд┐рд░рд╛рдВрдХ 14 рджрд╢рдорд▓рд╡ рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдЪреЗрдХ
RegNo == 0xe рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐
RegNo> 13 , рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕реЗ рдЕрдиреНрдп V547 рдФрд░ V560 рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ
рджреЗрдЦреАрдВ , рд▓реЗрдХрд┐рди,
V595 рдХреА рддрд░рд╣, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдордЧреНрд░реА рдереА :)ред рдЗрд╕рд▓рд┐рдП, рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреАрдбрд╝реЗ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЖрдВрдХрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рдЙрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЙрдмрд╛рдК рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рддреЗ рд╕рдордп рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдмрдЧ рдирд╣реАрдВ рд╣реИред
bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons, tok::TokenKind ClosingBraceKind) { bool HasError = false; .... HasError = true; if (!ContinueOnSemicolons) return !HasError; .... }
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V547 [CWE-570] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ '! HasError' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред рдЕрдирд╡реЗрд░рдкреНрд▓реАрдирдкреЗрд░рд░.рдХрдк 1635
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 30: рд╕рдВрджрд┐рдЧреНрдз рд╡рд╛рдкрд╕реА 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(); } .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V612 [CWE-670] рдПрдХ рд▓реВрдк рдХреЗ рднреАрддрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд 'рд╡рд╛рдкрд╕реА'ред R600OptimizeVectorRegisters.cpp 63
рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рдмрдЧ рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдбрд┐рдВрдЧ рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рд╛рдереА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдХреЛ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдмрддрд╛рдирд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдХреЛрдб рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рдЯреБрдХрдбрд╝рд╛ рд╣реИред рдХреГрдкрдпрд╛ рдРрд╕рд╛ рдХреЛрдб рди рд▓рд┐рдЦреЗрдВ :)ред
рдердХрд╛рди рдорд╣рд╕реВрд╕ рд╣реЛ рд░рд╣реА рд╣реИ? рдареАрдХ рд╣реИ, рдпрд╣ рдХреБрдЫ рдЪрд╛рдп рдпрд╛ рдХреЙрдлреА рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдирдП рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдП рдЧрдП рджреЛрд╖
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдирд┐рджрд╛рди рдХреЗ рд▓рд┐рдП 30 рдЙрджрд╛рд╣рд░рдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдирдП рдирд┐рджрд╛рди рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ
рдкрд┐рдЫрд▓реЗ рдЪреЗрдХ рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗред рдкрд┐рдЫрд▓реЗ рджреЛ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, C ++ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ 66 рдирдП рдирд┐рджрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 31: рдЕрдЧрдореНрдп рдХреЛрдб 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(); }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V779 [CWE-561]
рдЕрдЧрдореНрдп рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛред рдирд┐рд╖реНрдкрд╛рджрди
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
рдпрджрд┐ рдХрдерди рдХреА рджреЛрдиреЛрдВ рд╢рд╛рдЦрд╛рдПрдВ рдПрдХ
рд╡рд╛рдкрд╕реА рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА
рд╣реИрдВ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐
CtorDtorsByPriority рдХрдВрдЯреЗрдирд░ рдХреЛ рдХрднреА рднреА рд╕рд╛рдлрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 32: рдЕрдЧрдореНрдп рдХреЛрдб 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);
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V779 [CWE-561] рдЕрдЧрдореНрдп рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛред LLParser.cpp 835
рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдкрд╣рд▓реЗ рдЗрд╕ рднрд╛рдЧ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
return ParseTypeIdEntry(SummaryID); break;
рдЗрд╕ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЕрдЬреАрдм рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ;
рдмреНрд░реЗрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Lex.setIgnoreColonInIdentifiers(false); return false;
рджрд░рдЕрд╕рд▓, рдпрд╣ рдХреЛрдб рдЕрдЧрдореНрдп рд╣реИред
рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рднреА рдХреЗрд╕ рд▓реЗрдмрд▓ рдПрдХ
рд╡рд╛рдкрд╕реА рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ
рд╣реИрдВ , рдФрд░ рдЕрд░реНрдерд╣реАрди рдЕрдХреЗрд▓рд╛
рдмреНрд░реЗрдХ рдЕрдм рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ! рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ
рд╡рд╛рдкрд╕реА рдХреЗ рдмрдЬрд╛рдп рдПрдХ
рд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдерд╛?
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 33: рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдХрд╛ рдЖрдХрд╕реНрдорд┐рдХ рд╕рдорд╛рд╢реЛрдзрди 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); .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V784 рдмрд┐рдЯ рдорд╛рд╕реНрдХ рдХрд╛ рдЖрдХрд╛рд░ рдкрд╣рд▓реЗ рдСрдкрд░реЗрдВрдб рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдХрдо рд╣реИред рдпрд╣ рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рдХреЗ рдиреБрдХрд╕рд╛рди рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред RuntimeDyld.cpp 815
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
getStubAlignment рдлрд╝рдВрдХреНрд╢рди рдПрдХ
рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреИрд╕реЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдЧреА, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди 8 рд▓реМрдЯрд╛рдПрдЧрд╛:
~ (getStubAlignment () - 1)
~ (8u-1)
0xFFFFFFF8u
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
DataSize рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдкреНрд░рдХрд╛рд░ 64-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИред рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ DataSize & 0xFFFFFFF8 рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рднреА 32 рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдРрд╕рд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╢рд╛рдпрдж рдЙрдирдХрд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдпрд╣ DataSize рдФрд░ 0xFFFFFFFFFFFFFFFFFFF8u рд╣реИред
рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
DataSize &= ~(static_cast<uint64_t>(getStubAlignment()) - 1);
рдпрд╛ рдЗрд╕ рддрд░рд╣:
DataSize &= ~(getStubAlignment() - 1ULL);
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 34: рдЦрд░рд╛рдм рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг 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); .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V1028 [CWE-190] рд╕рдВрднрд╛рд╡рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ред 'Num_lts * рд╕реНрдХреЗрд▓' рдСрдкрд░реЗрдЯрд░ рдХреЗ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдСрдкрд░реЗрдВрдбреНрд╕ рдкрд░ 'size_t' рдкреНрд░рдХрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВред X86ISelowering.h 1577
рдЯрд╛рдЗрдк рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдкрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧреБрдгрди рдкрд╣рд▓реЗ рд╣реЛрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА 32-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо рдХреЛ
size_t рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 35: рдЦрд░рд╛рдм рдХреЙрдкреА-рдкреЗрд╕реНрдЯ 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()));
V778 [CWE-682] рджреЛ рд╕рдорд╛рди рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рдкрд╛рдП рдЧрдПред рд╢рд╛рдпрдж, рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ рдФрд░ 'Op0' рдХреЗ рдмрдЬрд╛рдп 'Op1' рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред InstCombineCompares.cpp 5507
рдпрд╣ рдирдпрд╛ рдХреВрд▓ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдирд╛рдо рдмрджрд▓реЗ рдЧрдП рд╣реИрдВред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА
Op0 рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдореЗрдВ
Op1 рдореЗрдВ рдмрджрд▓ рдЧрдП рдереЗред рдХреЛрдб рдХреЛ рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) { I.setOperand(1, ConstantFP::getNullValue(Op1->getType())); return &I; }
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 36: рдЪрд░ рдХреЛ рдорд┐рд▓рд╛рдпрд╛ struct Status { unsigned Mask; unsigned Mode; Status() : Mask(0), Mode(0){}; Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) { Mode &= Mask; }; .... };
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V1001 [CWE-563] 'рдореЛрдб' рд╡реЗрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред SIModeRegister.cpp 48
рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдирд╛рдо рд╣реЛрдирд╛ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдорд┐рд╢реНрд░рдг рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЙрдард╛рддреЗ рд╣реИрдВред рдЖрдк рдпрд╣рд╛рдВ рдЬреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдЙрд╕реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╡реНрдпрд░реНрде рд╣реИ:
Mode &= Mask;
рддрд░реНрдХ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ рд╢рд╛рдпрдж рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) { this->Mode &= Mask; };
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 37: рдЪрд░ рдорд┐рд▓рд╛рдпрд╛ 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; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V1001 [CWE-563] 'рдЖрдХрд╛рд░' рдЪрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Object.cpp 424
рдпрд╣ рдПрдХ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИред рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг:
this->Size += this->EntrySize;
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред 38 - рдирд╣реАрдВред 47: рдкреЙрдЗрдВрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯрд░ рдЪреЗрдХ рдХрд░рдирд╛рд╣рдордиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ
V595 рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрд╛ред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрдм рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдирдпрд╛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ
V1004 рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдФрд░ рдпрд╣ рдЯрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рднреА рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдмрд┐рдВрджреБрдУрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдХреЛрдб рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИрдВред
int getGEPCost(Type *PointeeType, const Value *Ptr, ArrayRef<const Value *> Operands) { .... if (Ptr != nullptr) {
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: 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)
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V1004 [CWE-476] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'FD' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 3228, 3231ред CGDebugInfo.cpp 3231
рдПрдлрдбреА рдкреЙрдЗрдВрдЯрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕реАрдзреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред
рдПрдХ рдФрд░ рдпрд╣рд╛рдБ:
static void computePolynomialFromPointer(Value &Ptr, Polynomial &Result, Value *&BasePtr, const DataLayout &DL) { PointerType *PtrTy = dyn_cast<PointerType>(Ptr.getType()); if (!PtrTy) {
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V1004 [CWE-476] 'PtrTy' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╢рдХреНрдд рд░реВрдк рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 960, 965. рдЗрдВрдЯрд░рд▓реАрд╡реНрдбрд╡реЙрд▓реНрдбрдХреЙрдореНрдмрд┐рдиреЗрдкрд╛рд╕рдкрд╛рд╕ред 965
рдЖрдк рдЙрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ? рдЕрдкрдиреЗ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪреЗрдВред
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдЪреЗрддрд╛рд╡рдиреА рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ:
- V1004 [CWE-476] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'Expr' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреЗрд╡рдЬрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1049, 1078. DebugInfoMetadata.cpp 1078
- V1004 [CWE-476] рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'рдкреАрдЖрдИ' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрди: 733, 753ред LegacyPassManager.cpp 753
- V1004 [CWE-476] nullrr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'StatepointCall' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреИрд░-рдЬрд░реВрд░реА рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 4371, 4379. рд╡реЗрд░рд┐рдлрд╛рдпрд░.рдХреИрдк 4379
- V1004 [CWE-476] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'рдЖрд░рд╡реА' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреЗрд╡рдЬрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 2263, 2268ред TGParser.cpp 2268
- V1004 [CWE-476] nullrr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'CalleeFn' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1081, 1096. рд╕рд░рд▓реАрдХреГрдд рд▓рд╛рдЗрдХ рдХреЙрд▓ред 1096
- V1004 [CWE-476] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'TC' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреЗрд╡рдЬрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1819, 1824. Driver.cpp 1824
рд╕реНрдирд┐рдкреЗрдЯ рдирдВред рек No. - рдирд╣реАрдВред 60: рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрдХ рджреЛрд╖ (рд╕рдВрднрд╛рд╡рд┐рдд рдореЗрдореЛрд░реА рд▓реАрдХ) std::unique_ptr<IRMutator> createISelMutator() { .... std::vector<std::unique_ptr<IRMutationStrategy>> Strategies; Strategies.emplace_back( new InjectorIRStrategy(InjectorIRStrategy::getDefaultOps())); .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢:
V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'рд╕реНрдЯреНрд░реЗрдЯреЗрдЬреАрдЬрд╝' рдХрдВрдЯреЗрдирд░ рдореЗрдВ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реЛрдЧрд╛ред llvm-isel-fuzzer.cpp 58
рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ
xxx.push_back (рдирдпрд╛ X) рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рддрддреНрд╡ рдХреЗ рдкреНрд░рдХрд╛рд░
std :: рд╡реЗрдХреНрдЯрд░ <std :: unique_ptr <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 рдХреЗ рд▓рд┐рдП рдЦрддрд░рдирд╛рдХ рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рдЖрдкрдХреЛ рдЗрд╕ рдмрдЧ рдкреИрдЯрд░реНрди рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрдиреНрдп рдорд╛рдорд▓реЗ:
- V1023 [CWE-460] added emplace_back тАЩрд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ is рдкрд╛рд╕тАЩ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реВрдЪрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реЛрдЧрд╛ред PassManager.h 546
- V1023 [CWE-460] A pointer without owner is added to the 'AAs' container by the 'emplace_back' method. A memory leak will occur in case of an exception. AliasAnalysis.h 324
- V1023 [CWE-460] A pointer without owner is added to the 'Entries' container by the 'emplace_back' method. A memory leak will occur in case of an exception. DWARFDebugFrame.cpp 519
- V1023 [CWE-460] A pointer without owner is added to the 'AllEdges' container by the 'emplace_back' method. A memory leak will occur in case of an exception. CFGMST.h 268
- V1023 [CWE-460] A pointer without owner is added to the 'VMaps' container by the 'emplace_back' method. A memory leak will occur in case of an exception. SimpleLoopUnswitch.cpp 2012
- V1023 [CWE-460] A pointer without owner is added to the 'Records' container by the 'emplace_back' method. A memory leak will occur in case of an exception. FDRLogBuilder.h 30
- V1023 [CWE-460] A pointer without owner is added to the 'PendingSubmodules' container by the 'emplace_back' method. A memory leak will occur in case of an exception. ModuleMap.cpp 810
- V1023 [CWE-460] A pointer without owner is added to the 'Objects' container by the 'emplace_back' method. A memory leak will occur in case of an exception. DebugMap.cpp 88
- V1023 [CWE-460] A pointer without owner is added to the 'Strategies' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-isel-fuzzer.cpp 60
- V1023 [CWE-460] A pointer without owner is added to the 'Modifiers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-stress.cpp 685
- V1023 [CWE-460] A pointer without owner is added to the 'Modifiers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-stress.cpp 686
- V1023 [CWE-460] A pointer without owner is added to the 'Modifiers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-stress.cpp 688
- V1023 [CWE-460] A pointer without owner is added to the 'Modifiers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-stress.cpp 689
- V1023 [CWE-460] A pointer without owner is added to the 'Modifiers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-stress.cpp 690
- V1023 [CWE-460] A pointer without owner is added to the 'Modifiers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-stress.cpp 691
- V1023 [CWE-460] A pointer without owner is added to the 'Modifiers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-stress.cpp 692
- V1023 [CWE-460] A pointer without owner is added to the 'Modifiers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-stress.cpp 693
- V1023 [CWE-460] A pointer without owner is added to the 'Modifiers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. llvm-stress.cpp 694
- V1023 [CWE-460] A pointer without owner is added to the 'Operands' container by the 'emplace_back' method. A memory leak will occur in case of an exception. GlobalISelEmitter.cpp 1911
- V1023 [CWE-460] A pointer without owner is added to the 'Stash' container by the 'emplace_back' method. A memory leak will occur in case of an exception. GlobalISelEmitter.cpp 2100
- V1023 [CWE-460] A pointer without owner is added to the 'Matchers' container by the 'emplace_back' method. A memory leak will occur in case of an exception. GlobalISelEmitter.cpp 2702
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВрдиреЗ 60 рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рд▓рд┐рдЦреАрдВ рдФрд░ рдЙрд╕ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛ рджреАред рдХреНрдпрд╛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдмрдЧ рдорд┐рд▓рд╛? рд╣рд╛рдБ, рдпрд╣ рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛, рд░рд╛рдд рдЧрд┐рд░ рдЧрдИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рджрд╕реНрддрдХ рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛редрдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрдпрд╛ рдФрд░ рдЗрд╕рдиреЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП PVS-Studio рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗрд▓рд┐рдП рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ редрд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рдБрдЪ , рдЙрди рдЬреИрд╕реЗ рдХрд┐ рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдмрдирд╛рдиреЗ рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИрдВредрдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдЧреБрдб рд▓рдХ!