PVS-Studio рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ LLVM 8 рдореЗрдВ рдмрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо 8.0.0

рд╣рдорд╛рд░реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рдХреЗ рдЕрдВрддрд┐рдо рд╕рддреНрдпрд╛рдкрди рдХреЗ рдмрд╛рдж рджреЛ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВред рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рдЙрдкрдХрд░рдг рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрд▓рдПрд▓рд╡реАрдПрдо 8.0.0 рд░рд┐рд▓реАрдЬ рдореЗрдВ рдирдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рдвреВрдВрдвреЗрдВред

рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛


рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрд╛рд░-рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ ( 1 , 2 , 3 )ред рдХреБрдЫ рдирдпрд╛ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

рд╣рд░ рдмрд╛рд░ LLVM рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рд╣рдорд╛рд░реЗ рдореЗрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

рджреЗрдЦрд┐рдП, рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдиреЗ рдирдП рдХреАрдбрд╝реЗ рдвреВрдВрдврдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ рд╣реИ! рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрдо рд╣реЛ рд░рд╣реА рд╣реИред рдХреНрд▓реИрдВрдЧ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рддрд╛ рд╣реИ рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╣рдореЗрд╢рд╛ рдЖрддреНрдорд╛ рдореЗрдВ рдХреБрдЫ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рд╣рдо рднреА рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рдмреИрдареЗ рд╣реИрдВ! рд╣рдордиреЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдиреЗрддреГрддреНрд╡ рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдПрдХ рдмреБрд░рд╛ рдЬрд╡рд╛рдм рд╣реИред рдЗрд╕рдореЗрдВ рдХреЛрдИ рдкреНрд░рдорд╛рдг рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЕрдм рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рдИ рдЧрдИ рд╣реИрдВред рдЬреЛ рдореБрдЭреЗ рд░реЛрдЪрдХ рд▓рдЧреЗ, рдЕрдм рдореИрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛ред рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрддреНрдпрдВрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ)ред рдФрд░ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдореИрдВрдиреЗ рдЗрди рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╢рд╛рдо рдореЗрдВ рдкрд╛рдпрд╛ рдФрд░ рд▓рд┐рдЦрд╛ред

рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрди рдХреЛ рдХрдИ рд╣рдлреНрддреЛрдВ рддрдХ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ред рдореИрдВ рдЦреБрдж рдХреЛ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ :)ред

рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдХреМрди рд╕реА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдиреЛрдЯ рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВ ред

рдирдП рдФрд░ рдкреБрд░рд╛рдиреЗ рдирд┐рджрд╛рди


рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рдЧрднрдЧ рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЬреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реА рдереАрдВ, рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рднрд╛рдЧ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдирдП рдХреАрдбрд╝реЗ рдХреНрдпреЛрдВ рдкрд╛рдП рдЧрдП? рдЗрд╕рдХреЗ 3 рдХрд╛рд░рдг рд╣реИрдВ:

  1. рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреА рд╣реИ, рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдВрд╢реЛрдзрд┐рдд рдФрд░ рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рдирдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдорд╛рдорд▓реЗ рд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВред рд╣рдорд╛рд░реЗ рд▓реЗрдЦ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ!
  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-Studio рдЪреЗрддрд╛рд╡рдиреА: 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-Studio рдЪреЗрддрд╛рд╡рдиреА: 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-Studio рдЪреЗрддрд╛рд╡рдиреА: V502 [CWE-783] рд╢рд╛рдпрдж '?:' рдСрдкрд░реЗрдЯрд░ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред '?:' рдСрдкрд░реЗрдЯрд░ рдХреА '==' рдСрдкрд░реЗрдЯрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИред PPCTargetTransformInfo.cpp 404

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрдВрджрд░ рдЧрд▓рддреА рд╣реИред рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕реБрдВрджрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЬреАрдм рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ :)ред

рдЕрдм, рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ:

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

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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

рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧрд▓рддреА рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, 0/1 рд╕реВрдЪрдХрд╛рдВрдХ рдЪрд░ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХреЛрд╖реНрдардХ рдЬреЛрдбрд╝реЗрдВ:

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

рд╡реИрд╕реЗ, рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рд╣реИ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рднрдбрд╝рдХрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдФрд░ рдХреЛрд╖реНрдардХ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рд▓рдЪ рди рдХрд░реЗрдВред рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдпрд╣рд╛рдВ "рдЕрдзреНрдпрд╛рдп рд╕рдВрдЪрд╛рд▓рдХ рд╕реЗ рдбрд░реЗрдВ ?: рдФрд░ рдЗрд╕реЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ" рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ред

рдлреНрд░реИрдЧрдореЗрдВрдЯ рдПрди 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-Studio рдЪреЗрддрд╛рд╡рдиреА: V522 [CWE-476] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'LHS' рдХреА рдбреНрд░реАрдлрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИред TGParser.cpp 2152

рдпрджрд┐ рдПрд▓рдПрдЪрдПрд╕ рд╕реВрдЪрдХ рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдЗрд╕ рдмрд╣реБрдд рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрдЧрд╛ : LHS-> getAsString () ред

рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрдм рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЫрд┐рдкреА рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕реНрдЯреЗрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рднреА рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рддрдиреА рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЕрдиреНрдп рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реБрд░рдХреНрд╖рд╛ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдкреВрд░рдХ рд╣реИред

RHS рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ: V522 [CWE-476] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'RHS' рдХреА рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред TGParser.cpp 2186

Fragment N6: рдореВрд╡рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдХрд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

 static Expected<bool> ExtractBlocks(....) { .... std::unique_ptr<Module> ProgClone = CloneModule(BD.getProgram(), VMap); .... BD.setNewProgram(std::move(ProgClone)); // <= MiscompiledFunctions.clear(); for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) { Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first); // <= assert(NewF && "Function not found??"); MiscompiledFunctions.push_back(NewF); } .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V522 [CWE-476] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'ProgClone' рдХреА Dereferencing рд╣реЛ рд╕рдХрддреА рд╣реИред рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░ .рдкреАрд╕реА 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) { 

рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд▓реВрдк рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднреА рдПрдХ рдЧрд▓рддреА рд╣реИ, рдФрд░ рдХреЛрдб рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдмрд╣реБрдд рдкреНрд░рд╕рд┐рджреНрдз рд╕рдорд╛рдирддрд╛ рд╕реЗ рдорд┐рд▓реЗ рдереЗ! рдПрдХ рдЧрд▓рддреА рджреВрд╕рд░реЗ рдХрд╛ рдЕрдкрдорд╛рди рдХрд░рддреА рд╣реИ :)ред

Fragment N7: рдореВрд╡рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдХрд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V522 [CWE-476] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'рдЯреЗрд╕реНрдЯ' рдХреА рдбреНрд░рд╛рдлреНрдЯрд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред рдорд┐рд╕рдХрдВрдкреНрд▓реАрдХреЗрдЯреЗрд╢рдиред 709

рдлрд┐рд░ рд╕реЗ рд╡рд╣реА рд╕реНрдерд┐рддрд┐ред рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдореИрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдореЗрдВ рддреЗрдЬреА рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдЖрдВрджреЛрд▓рди рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рд╕реА ++ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреЗ рдмрд╛рджред рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ C ++ рднрд╛рд╖рд╛ рдкрд╕рдВрдж рд╣реИ! рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреИрд░ рдХреЛ рд╢реВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирдП рддрд░реАрдХреЗ рд╣реИрдВред PVS-Studio рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ :)ред

рдЦрдВрдбрди N8: рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V522 [CWE-476] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'рдкреНрд░рдХрд╛рд░' рдХреА рдбреНрд░рд╛рдлреНрдЯрд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред рдкреНрд░рд┐рдЯреАрдлрдВрдХреНрд╢рдирдбреЙрдкрд░ред 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) // <= PrintFatalError(Twine("Field '") + Field.Name + "' of table '" + Table.Name + "' has incompatible type: " + Ty->getAsString() + " vs. " + // <= TI->getType()->getAsString()); .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V522 [CWE-476] рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ 'Ty' рдХреА Dereferencing рд╣реЛ рд╕рдХрддреА рд╣реИред 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; // <= Tokens.erase(Tokens.end() - 1); return true; } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: 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-Studio рдЪреЗрддрд╛рд╡рдиреА: V622 [CWE-478] 'рд╕реНрд╡рд┐рдЪ' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ 'рдХреЗрд╕' рдСрдкрд░реЗрдЯрд░ рдЧрд╛рдпрдм рд╣реЛред SystemZAsmParser.cpp 652

рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рдмреНрд░реЗрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдпрд╣рд╛рдВ рдХреБрдЫ рдФрд░ рд▓рд┐рдЦрдирд╛ рднреВрд▓ рдЧрдП рд╣реИрдВ?

Fragment N12: рдбреЗрд░реАрдлреЗрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЪреЗрдХ рдХрд░рдирд╛

 InlineCost AMDGPUInliner::getInlineCost(CallSite CS) { Function *Callee = CS.getCalledFunction(); Function *Caller = CS.getCaller(); TargetTransformInfo &TTI = TTIWP->getTTI(*Callee); if (!Callee || Callee->isDeclaration()) return llvm::InlineCost::getNever("undefined callee"); .... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V595 [CWE-476] 'рдХреИрд▓рд▓реА' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 172, 174ред AMDGPUInline.cpp 172

рдЬрдм GetTTI рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЗрд▓реА рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдФрд░ рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реВрдЪрдХ рдХреЛ рдЕрд╢рдХреНрдд рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП:

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

рд▓реЗрдХрд┐рди рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЪреБрдХреА рд╣реИ ...

Fragment N13 - N ...: рдкреЙрдЗрдВрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЪреЗрдХ рдХрд░рдирд╛

рдкрд┐рдЫрд▓реЗ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╕реНрдерд┐рддрд┐ рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИред рд╡рд╣ рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 [CWE-476] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'CalleeFn' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреНрд╕: 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()); // <= CXXThisScopeRAII ThisScope(*this, ThisContext, Qualifiers(), ND && ND->isCXXInstanceMember()); // <= .... } 

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 [CWE-476] null рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'ND' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 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 рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рдереАред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

Fragment N17, N18: рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рдкрд╛рд░реА

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V629 [CWE-190] '~ (рдЖрдХрд╛рд░ - 1) << 1' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде 32-рдмрд┐рдЯ рдореВрд▓реНрдп рдХрд╛ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯрд┐рдВрдЧред AArch64AddressingModes.h 260

рд╢рд╛рдпрдж рдпрд╣ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреЛрдб рдмрд┐рд▓реНрдХреБрд▓ рдЗрдЪреНрдЫрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рдЬрдЧрд╣ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдХрд╛рд░ рдЪрд░ 16 рд╣реИ, рдФрд░ рдлрд┐рд░ NImms рдЪрд░ рдореЗрдВ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛рдмрджреНрдз рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ:

1111111111111111111111111111111111111111111111111111111111100000

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рд╣реИ:

0000000000000000000000000000000011111111111111111111111111100000

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдЧрдгрдирд╛ 32-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реЛрддреА рд╣реИрдВред рдФрд░ рддрднреА, рдЗрд╕ 32-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ uint64_t рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рд╢реВрдиреНрдп рд╣реЛрдВрдЧреЗред

рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

рдРрд╕реА рд╣реА рд╕реНрдерд┐рддрд┐: V629 [CWE-190] 'Immr << 6' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде 32-рдмрд┐рдЯ рдореВрд▓реНрдп рдХрд╛ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯрд┐рдВрдЧред AArch64AddressingModes.h 269

рд╕реНрдирд┐рдкреЗрдЯ N19: рджреВрд╕рд░рд╛ рдХреАрд╡рд░реНрдб рдЧреБрдо рд╣реИ ?

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V646 [CWE-670] рдЖрд╡реЗрджрди рдХреЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ 'рдФрд░' рдХреАрд╡рд░реНрдб рдЧрд╛рдпрдм рд╣реИред AMDGPUAsmParser.cpp 5655

рдпрд╣рд╛рдВ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рдкрд╣рд▓реЗ рдХрд╛ рддрддреНрдХрд╛рд▓реАрди рдмреНрд▓реЙрдХ рдЕрдЧрд░ рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИ , рддреЛ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рджреВрд╕рд░рд╛ рдХреАрд╡рд░реНрдб рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЛрдб рд╕рдорд╛рди рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдФрд░ рд▓рд╛рдкрддрд╛ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдЕрд╕реНрдкрд╖реНрдЯ рдФрд░ рдЦрддрд░рдирд╛рдХ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬрд╛рд░реА рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕реЗ рдФрд░ рдЬреЛрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

Fragment N20: рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд╛рд░ рдЯрд╛рдЗрдкреЛ

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:

  • 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

рд╕рдВрдпреЛрдЧ рд╕реЗ, + = рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп + рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдЕрд░реНрдерд╣реАрди рдбрд┐рдЬрд╛рдЗрди рд╣реИред

Fragment N21: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

 static void getReqFeatures(std::map<StringRef, int> &FeaturesMap, const std::vector<Record *> &ReqFeatures) { for (auto &R : ReqFeatures) { StringRef AsmCondString = R->getValueAsString("AssemblerCondString"); SmallVector<StringRef, 4> Ops; SplitString(AsmCondString, Ops, ","); assert(!Ops.empty() && "AssemblerCondString cannot be empty"); for (auto &Op : Ops) { assert(!Op.empty() && "Empty operator"); if (FeaturesMap.find(Op) == FeaturesMap.end()) FeaturesMap[Op] = FeaturesMap.size(); } } } 

рдЦрддрд░рдирд╛рдХ рдХреЛрдб рдХреЛ рдЦреБрдж рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдФрд░ рдпрд╣ рд╡реНрдпрд╛рдХреБрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╕реНрд╡реАрд░ рд╣реИ, рддрд╛рдХрд┐ рддреБрд░рдВрдд рдЬрд╡рд╛рдм рди рджреЗрдЦреЗрдВ:

рд╣рдореНрдореНрдо ...


PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V708 [CWE-758] рдЦрддрд░рдирд╛рдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'FeaturesMap [Op] = FeaturesMap.size (), рдЬрд╣рд╛рдВ' FeaturesMap '' рдорд╛рдирдЪрд┐рддреНрд░ 'рд╡рд░реНрдЧ рдХрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред RISCVCompressInstEmitter.cpp 490

рд╕рдорд╕реНрдпрд╛ рд░реЗрдЦрд╛:

 FeaturesMap[Op] = FeaturesMap.size(); 

рдпрджрд┐ рдУрдк рддрддреНрд╡ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирдХреНрд╢реЗ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдирдХреНрд╢реЗ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╣рд╛рдБ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЕрднреА рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдирдП рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЖрдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ рдирд╣реАрдВред

рдлреНрд░реИрдЧрдореЗрдВрдЯ рдПрди 22-рдПрди 24: рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V519 [CWE-563] 'NType' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1663, 1664ред MachOObjectFile.cpp 1664

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред рдмрд╕ рд╕рддрд╣реА рджреЛрд╣рд░рд╛рдпрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрдХ рдЧрдбрд╝рдЧрдбрд╝рд╛рд╣рдЯред

рдЗрд╕реА рддрд░рд╣:

  • V519 [CWE-563] 'B.NDesc' рдЪрд░ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1488, 1489. llvm-nm.cpp 1489
  • V519 [CWE-563] рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 59, 61. coff2yaml.cpp 61

рдШрд░реНрд╖рдг N25-N27: рдЕрдзрд┐рдХ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди

рдЕрдм рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V519 [CWE-563] 'рд╕рдВрд░реЗрдЦрдг' рдЪрд░ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1158, 1160ред LoadStoreVectorizer.cpp 1160

рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм рдХреЛрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕рдВрд░реЗрдЦрдг рдЪрд░ рдХреЛ рд╢рд░реНрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдлрд┐рд░ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рддреНрдпрд╛рдкрди рдХреЗред

рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдпрд╣рд╛рдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:

  • V519 [CWE-563] 'рдЗрдлреЗрдХреНрдЯреНрд╕' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 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) // PAUSE instruction support // <= break; } .... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : 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 == 0 %eред 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-Studio рдЪреЗрддрд╛рд╡рдиреА: V547 [CWE-570] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ '! HasError' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИред рдЕрдирд╡реЗрд░рдкреНрд▓реАрдирдкреЗрд░рд░.рдХрдк 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(); } .... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V612 [CWE-670] рдПрдХ рд▓реВрдк рдХреЗ рднреАрддрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд 'рд╡рд╛рдкрд╕реА'ред R600OptimizeVectorRegisters.cpp 63

рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рдЧрд▓рддреА рд╣реИ рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд╛рд▓ рд╣реИ рдЬреЛ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдХреЛ рдХреБрдЫ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдореБрдЭреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ :)ред

рдХреНрдпрд╛ рдЖрдк рдердХреЗ рд╣реБрдП рд╣реИрдВ? рдлрд┐рд░ рдЪрд╛рдп рдпрд╛ рдХреЙрдлреА рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордпред

рдХреЙрдлрд╝реА


рдирдП рдирд┐рджрд╛рди рджреНрд╡рд╛рд░рд╛ рджреЛрд╖реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрд░рд╛рдиреЗ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ 30 рдЯреНрд░рд┐рдЧрд░ рдХрд╛рдлреА рд╣реИрдВред рдЖрдЗрдП рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдирдП рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЪреЗрдХ рдХреЗ рдмрд╛рдж рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдерд╛ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, 66 рд╕рд╛рдорд╛рдиреНрдп рдЙрджреНрджреЗрд╢реНрдп рдирд┐рджрд╛рди рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди C ++ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗред

Fragment N31: рдЕрдЧрдореНрдп рдХреЛрдб

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V779 [CWE-561] рдЕрдЧрдореНрдп рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛред рдирд┐рд╖реНрдкрд╛рджрди

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рд╡рд┐рд╡рд░рдг рдХреА рджреЛрдиреЛрдВ рд╢рд╛рдЦрд╛рдПрдВ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, CtorDtorsByPriority рдХрдВрдЯреЗрдирд░ рдХрднреА рдЦрд╛рд▓реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╕реНрдирд┐рдкреЗрдЯ N32: рдЕрдЧрдореНрдп рдХреЛрдб

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V779 [CWE-561] рдЕрдЧрдореНрдп рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛред LLParser.cpp 835

рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕реНрдерд┐рддрд┐ред рдЖрдЗрдП рдЗрд╕ рдЬрдЧрд╣ рдХреА рд╢реБрд░реБрдЖрдд рджреЗрдЦреЗрдВ:

 return ParseTypeIdEntry(SummaryID); break; 

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреНрд░реЗрдХ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдпрд╣рд╛рдВ рдмрд╣реБрдд рд╣реА рд╢рд╛рдирджрд╛рд░ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

 Lex.setIgnoreColonInIdentifiers(false); return false; 

рджрд░рдЕрд╕рд▓, рдпрд╣ рдХреЛрдб рдЕрдЧрдореНрдп рд╣реИред рд╕реНрд╡рд┐рдЪ рдореЗрдВ рд╕рднреА рдорд╛рдорд▓реЗ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдЕрдм рд╡реНрдпрд░реНрде рдЕрдХреЗрд▓рд╛ рд╡рд┐рд░рд╛рдо рдЗрддрдирд╛ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ! рд╢рд╛рдпрдж рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд┐рд░рд╛рдо рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡рд╛рдкрд╕реА рдХреЗ рд╕рд╛рде рдирд╣реАрдВ?

рдШрд░реНрд╖рдг N33: рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рдХрд╛ рдЖрдХрд╕реНрдорд┐рдХрдХрд░рдг

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V784 рдмрд┐рдЯ рдорд╛рд╕реНрдХ рдХрд╛ рдЖрдХрд╛рд░ рдкрд╣рд▓реЗ рдСрдкрд░реЗрдВрдб рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдХрдо рд╣реИред рдпрд╣ рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рдХреЗ рдиреБрдХрд╕рд╛рди рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред RuntimeDyld.cpp 815

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ getStubAlignment рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдорд╛рди рд▓реЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдорд╛рди 8 рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:

~ (getStubAlignment () - 1)

~ (8u-1)

0xFFFFFFF8u

рдЕрдм рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ DataSize рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ 64-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди DataSize & 0xFFFFFFF88, рд╕рднреА рдмрддреНрддреАрд╕ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдмрд┐рдЯреНрд╕ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡рд╣ рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: DataSize & 0xFFFFFFFFFFFFFFFFFFF8uред

рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

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

рдпрд╛ рддреЛ:

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

Fragment N34: рд╕реНрдкрд╖реНрдЯ рдХрд╛рд╕реНрдЯ рд╡рд┐рдлрд▓

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V1028 [CWE-190] рд╕рдВрднрд╛рд╡рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ред 'Num_lts * рд╕реНрдХреЗрд▓' рдСрдкрд░реЗрдЯрд░ рдХреЗ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдСрдкрд░реЗрдВрдбреНрд╕ рдкрд░ 'size_t' рдкреНрд░рдХрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВред X86ISelowering.h 1577

рдЯрд╛рдЗрдк рдЗрдВрдЯ рдХреЗ рдЪрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдкрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИредрд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЪрд░ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА 32-рдмрд┐рдЯ рдЧреБрдгрди рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЖрдХрд╛рд░_ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред

Fragment 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] рджреЛ рд╕рдорд╛рди рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рдкрд╛рдП рдЧрдПред рд╢рд╛рдпрдж, рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ рдФрд░ 'Op0' рдХреЗ рдмрдЬрд╛рдп 'Op1' рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред InstCombineCompares.cpp 5507

рдпрд╣ рдирдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рджрд╛рди рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХреБрдЫ рдирд╛рдо рдЗрд╕рдореЗрдВ рдмрджрд▓рдиреЗ рд▓рдЧреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЬрдЧрд╣ рдкрд░ рд╕рд╣реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдиреЛрдЯ рджреВрд╕рд░реЗ рдЦрдВрдб рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рд╣реИ рдХрд┐ Op0 рдкрд░ OP1 ред рд▓реЗрдХрд┐рди рдПрдХ рдЬрдЧрд╣ рдкрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛:

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

Fragment N36: рдЪрд░ рдореЗрдВ рднреНрд░рдо

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V1001 [CWE-563] 'рдореЛрдб' рд╡реЗрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред SIModeRegister.cpp 48

рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рджреЗрдирд╛ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рд╣реИред рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ:

 Mode &= Mask; 

рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рддрд░реНрдХ рдмрджрд▓рддрд╛ рд╣реИред рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИред рдЗрд╕ рддрд░реНрдХ рдХрд╛ рдЕрдм рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:

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

Fragment 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 рдХрд╛ рдпреБрд╡рд╛ рдирд┐рджрд╛рди рдЗрд╕рдХреЗ рдЕрд░реНрде рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рднреА рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реВрдЪрдХ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рдереА, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдЕрдВрджрд░ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 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. рдЗрдВрдЯрд░рд▓реАрд╡реНрдбрд╡реЙрдбрдХреЙрдореНрдмрд┐рдиреЗрдкрдкрд╛рд╕ред 965

рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдмрдЪрд╛рдПрдВ? рдХреЛрдб-рд╕рдореАрдХреНрд╖рд╛ рдкрд░ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рдХреЛрдб рдЕрдВрд╢реЛрдВ рдХреЛ рд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдореИрдВ рд▓реЗрдЦ рдореЗрдВ рдХреЗрд╡рд▓ рдЪреЗрддрд╛рд╡рдиреА рдХреА рдПрдХ рд╕реВрдЪреА рдЫреЛрдбрд╝реВрдВрдЧрд╛:

  • V1004 [CWE-476] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'Expr' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреЗрд╡рдЬрд╣ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1049, 1078. DebugInfoMetadata.cpp 1078
  • V1004 [CWE-476] рдирд▓ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж 'рдкреАрдЖрдИ' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрди: 733, 753ред LegacyPassManager.cpp 753
  • V1004 [CWE-476] The 'StatepointCall' pointer was used unsafely after it was verified against nullptr. Check lines: 4371, 4379. Verifier.cpp 4379
  • V1004 [CWE-476] The 'RV' pointer was used unsafely after it was verified against nullptr. Check lines: 2263, 2268. TGParser.cpp 2268
  • V1004 [CWE-476] The 'CalleeFn' pointer was used unsafely after it was verified against nullptr. Check lines: 1081, 1096. SimplifyLibCalls.cpp 1096
  • V1004 [CWE-476] The 'TC' pointer was used unsafely after it was verified against nullptr. Check lines: 1819, 1824. Driver.cpp 1824

N48-N60: , ( )

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

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рдВрдХреЗрддрдХ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд░рдгрдиреАрддрд┐рдпрд╛рдБ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рд╣реЛрдЧрд╛ред llvm-isel-fuzzer.cpp 58

рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕реЗ std :: рд╡реЗрдХреНрдЯрд░ <std :: unique_ptr <X >> рдЖрдк рдХреЗрд╡рд▓ xxx.push_back (рдирдпрд╛ X) рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ , рдХреНрдпреЛрдВрдХрд┐ X * рд╕реЗ std рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рд╣реИ : : unique_ptr <X> ред

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди xxx.emplace_back (рдирдпрд╛ X) рд▓рд┐рдЦрдирд╛ рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ: emplace_back рд╡рд┐рдзрд┐ рд╕реАрдзреЗ рддрд░реНрдХреЛрдВ рд╕реЗ рдПрдХ рддрддреНрд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИред

рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╡реЗрдХреНрдЯрд░ рднрд░рд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдореЗрдореЛрд░реА рд░реАрдЕрд▓реЛрдХреЗрд╢рди рдСрдкрд░реЗрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ std :: bad_alloc рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреЙрдЗрдВрдЯрд░ рдЦреЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдмрдирд╛рдИ рдЧрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрднреА рднреА рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ рдпреВрдиреАрдХ_рдкреНрд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП , рдЬреЛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реЛрдЧрд╛:

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

C ++ 14 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдЖрдк 'std :: make_unique' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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

рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рджреЛрд╖ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрд╕ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдкрдЯрд╛рдЗрдо рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реНрдореГрддрд┐ рдЖрдмрдВрдЯрди рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдмрд╕ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреБрд░рд╛ рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЛрдб LLVM рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЦрддрд░рд╛ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рдкрд╛рдпрд╛ рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕реАрдЦрд╛ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ:

  • 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 рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рд▓рд┐рдЦреАрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореИрдВ рд░реБрдХ рдЧрдпрд╛ред рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рджреЛрд╖ рд╣реИ рдЬреЛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ? рд╣рд╛рдБ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд▓рд┐рдЦреЗ, рддреЛ рдпрд╣ рджреЗрд░ рд╢рд╛рдо, рдпрд╛ рдмрд▓реНрдХрд┐, рд░рд╛рдд рднреА рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рд░рд╛рдЙрдВрдб рдСрдл рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдерд╛ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗ, рдФрд░ рдЖрдк рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИред

рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!



рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдПрдВрдбреНрд░реА рдХрд╛рд░рдкреЛрд╡ред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдПрд▓рдПрд▓рд╡реАрдПрдо 8 рдореЗрдВ рдХреАрдбрд╝реЗ рдвреВрдВрдврдирд╛ ред

Source: https://habr.com/ru/post/hi450008/


All Articles