рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдмрдирд╛рдо рдХреНрд▓реИрдВрдЧ

PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ / CLANG
рд╣рдордиреЗ рдЕрдХрд╕реНрдорд╛рдд рдХреНрд▓реИрдВрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред рдХрдЯ рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдгред

PVS-Studio рдЕрдм рдПрдХ рдмрд╛рд╣рд░реА Microsoft Visual C ++ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА рд╣реИред рд╡рд┐рдЬреБрдЕрд▓ C ++ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдмреЗрд╣рдж рдзреАрдорд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдпрд╣ рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдареАрдХ-рдареАрдХ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ cl.exe рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕рд╛рдХреНрд╖реНрдпреЛрдВ рд╕реЗ рдореИрдВ рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ * .i рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рд╕рдВрдХрд▓рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдо рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВред рдФрд░ рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдорд╛рд░реА рдкрд╕рдВрдж рдХреНрд▓реИрдВрдЧ рдореЗрдВ рд▓рд╛рдЧреВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧреАред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдк рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ cl.exe рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реИред

рдХреНрд▓реИрдВрдЧ рд╕реА рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ (C, C ++, Objective-C, Objective-C ++, C ++ 11 рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕ рд╕рдкреЛрд░реНрдЯ рдореЗрдВ) рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рдВрдХрд▓рдХ рд╣реИред рд╡рд┐рдХрд╛рд╕ Apple рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдпреЛрдЬрд┐рдд рд╣реИред рдХреНрд▓реИрдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рддрд╛рдХрдд рдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рдпрдо рд╣реИрдВред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХреНрд▓реИрдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдкреНрдкрд▓ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

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

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

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

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛ред рд▓рдЧрднрдЧ рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред

рддреНрд░реБрдЯрд┐ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ N рез


static SDValue PerformSELECTCombine(...) { ... SDValue LHS = N->getOperand(1); SDValue RHS = N->getOperand(2); ... if (!UnsafeFPMath && !DAG.isKnownNeverZero(LHS) && !DAG.isKnownNeverZero(RHS)) ... if (!UnsafeFPMath && !DAG.isKnownNeverZero(LHS) && !DAG.isKnownNeverZero(LHS)) ... } 

PVS-Studio рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕: V501 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ! 'DAG.isKnownNeverZero (LHS)' рдмрд╛рдИрдВ рдУрд░ рдФрд░ '&&' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╣реИрдВред LLVMX86CodeGen x86isellowering.cpp 11635

рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдХреЛрдб рдПрдХ рд╕рд╛рде LHS рдФрд░ RHS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ LHS рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдПрдХ рд▓рд╛рдЗрди рдХрд╛ рдЯрд╛рдЗрдкреЛ рдпрд╛ рдХреЙрдкреА рдХрд┐рдпрд╛ рд╣реБрдЖ рдЯреБрдХрдбрд╝рд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрд░рдПрдЪрдПрд╕ рдЪрд░ рднреА рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рддреНрд░реБрдЯрд┐ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ N2


 MapTy PerPtrTopDown; MapTy PerPtrBottomUp; void clearBottomUpPointers() { PerPtrTopDown.clear(); } void clearTopDownPointers() { PerPtrTopDown.clear(); } 

PVS-Studio Diagnostics: V524 рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ 'ClearTopDownPointers' рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ 'ClearBottomUpPointers' рдлрд╝рдВрдХреНрд╢рди (ObjCARC.cpp, рдкрдВрдХреНрддрд┐ 718) рдХреЗ рд╢рд░реАрд░ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордХрдХреНрд╖ рд╣реИред LLVMScalarOpts objcarc.cpp 1322

рдХреНрд▓рд╛рд╕рд┐рдХ рдХреЙрдкреА-рдкреЗрд╕реНрдЯред рдлрд╝рдВрдХреНрд╢рди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдЙрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд╢рд░реАрд░ рд╣реА рдирд╣реАрдВред рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк:
 void clearBottomUpPointers() { PerPtrBottomUp.clear(); } 


рддреНрд░реБрдЯрд┐ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ N3


 static Value *SimplifyICmpInst(...) { ... case Instruction::Shl: { bool NUW = LBO->hasNoUnsignedWrap() && LBO->hasNoUnsignedWrap(); bool NSW = LBO->hasNoSignedWrap() && RBO->hasNoSignedWrap(); ... } 

PVS-Studio рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕: V501 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'LBO-> hasNoUnsignedWrap ()' рдмрд╛рдИрдВ рдУрд░ рдФрд░ '&&' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╣реИред рдПрд▓рдПрд▓рд╡реАрдПрдордПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдорд┐рдкреБрд▓рд╛рдЗрдЬрд╝ред рд╕реАрд╕реА 1891

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ:
 bool NUW = LBO->hasNoUnsignedWrap() && RBO->hasNoUnsignedWrap(); 


рдХреЙрдкреА-рдкреЗрд╕реНрдЯ N4 рддреНрд░реБрдЯрд┐


 Sema::DeduceTemplateArguments(...) { ... if ((P->isPointerType() && A->isPointerType()) || (P->isMemberPointerType() && P->isMemberPointerType())) ... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдирд┐рджрд╛рдиред V501 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'P-> isMemberPointerType ()' рдмрд╛рдИрдВ рдУрд░ рдФрд░ '&&' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ред clangSema sematemplatededuction.cpp 3240

рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдорд▓рд╛ рд╣реИ, рдкрд╛рдВрдЪрд╡реЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡рд┐рдкрд░реАрддред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ:

(P-> isMemberPointerType () рдФрд░& A-> isMemberPointerType ())

рдХреЙрдкреА-рдкреЗрд╕реНрдЯ N5 рддреНрд░реБрдЯрд┐


 static bool CollectBSwapParts(...) { ... // 2) The input and ultimate destinations must line up: if byte 3 of an i32 // is demanded, it needs to go into byte 0 of the result. This means that the // byte needs to be shifted until it lands in the right byte bucket. The // shift amount depends on the position: if the byte is coming from the high // part of the value (eg byte 3) then it must be shifted right. If from the // low part, it must be shifted left. unsigned DestByteNo = InputByteNo + OverallLeftShift; if (InputByteNo < ByteValues.size()/2) { if (ByteValues.size()-1-DestByteNo != InputByteNo) return true; } else { if (ByteValues.size()-1-DestByteNo != InputByteNo) return true; } ... } 

PVS-Studio рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕: V523 '' рддреЛ 'рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ' рдФрд░ 'рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред LLVMInstCombine instcombineandorxor.cpp 1387

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рдХрд╛рдлреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред

рдпрд╣рд╛рдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рд┐рдЪ рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИ


 void llvm::EmitAnyX86InstComments(...) { ... case X86::VPERMILPSri: DecodeVPERMILPSMask(4, MI->getOperand(2).getImm(), ShuffleMask); Src1Name = getRegName(MI->getOperand(0).getReg()); case X86::VPERMILPSYri: DecodeVPERMILPSMask(8, MI->getOperand(2).getImm(), ShuffleMask); Src1Name = getRegName(MI->getOperand(0).getReg()); break; ... } 

PVS-Studio рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕: V519 'Src1Name' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 211, 215. LLVMX86AsmPrinter x86instcomments.cpp 215

рдмрдбрд╝реЗ рдХреЛрдб рдореЗрдВ, рдРрд╕реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдмрд╕ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВред рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рд╣реИред рдЖрдк рдЬрд┐рддрдирд╛ рдЪрд╛рд╣реЗрдВ рдЙрддрдирд╛ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЖрдк рдЗрд╕ рд▓рд╛рдирдд рдХреЛ 'рддреЛрдбрд╝' рд╕рдХрддреЗ рд╣реИрдВред

рдХрдИ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реИрдВ, рдпрджрд┐ рдЧрд▓рддрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдпрд╛ рд╕рдВрджрд┐рдЧреНрдз рдХрд╛рд░реНрдп рд╣реИрдВред

рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдХрд╛рд░реНрд░рд╡рд╛рдИ N1, рдЬреЛ рдПрдХ рдЧрд▓рддреА рд╣реЛ рд╕рдХрддреА рд╣реИ


 AsmToken AsmLexer::LexLineComment() { // FIXME: This is broken if we happen to a comment at the end of a file, which // was .included, and which doesn't end with a newline. int CurChar = getNextChar(); while (CurChar != '\n' && CurChar != '\n' && CurChar != EOF) CurChar = getNextChar(); ... } 

рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ PVS-Studio: V501 рдмрд╛рдИрдВ рдФрд░ '&&' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ: CurChar! = '\ N' && CurChar! = '\' N 'LLVMMINARser asmlexer.cpp 149!

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдХрд░реНрдЪрд░! = '\ N' рдЪреЗрдХ рдпрд╣рд╛рдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИ рдФрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
 while (CurChar != '\n' && CurChar != '\r' && CurChar != EOF) 


N2 рдХреА рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ


 std::string ASTContext::getObjCEncodingForBlock(const BlockExpr *Expr) const { ... ParmOffset = PtrSize; // Argument types. ParmOffset = PtrSize; ... } 

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕: рд╡реА 519 'рдкрд░рдореЛрдлрд╕реЗрдЯ' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 3953, 3956ред clangAST astcontext.cpp 3956

рдПрди 3 рдХреА рдмреЗрд╡рдХреВрдлрд╛рдирд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдЬрд┐рд╕реЗ рдореБрдЭреЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ


 static unsigned getTypeOfMaskedICmp(...) { ... result |= (icmp_eq ? (FoldMskICmp_Mask_AllZeroes | FoldMskICmp_Mask_AllZeroes | FoldMskICmp_AMask_Mixed | FoldMskICmp_BMask_Mixed) : (FoldMskICmp_Mask_NotAllZeroes | FoldMskICmp_Mask_NotAllZeroes | FoldMskICmp_AMask_NotMixed | FoldMskICmp_BMask_NotMixed)); ... } 

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

V501 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'FoldMskICmp_Mask_AllZeroes' рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ '|' рдСрдкрд░реЗрдЯрд░ред LLVMInstCombine instcombineandorxor.cpp 505

V501 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'FoldMskICmp_Mask_NotAllZeroes' рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ '| рдСрдкрд░реЗрдЯрд░ред LLVMInstCombine instcombineandorxor.cpp 509

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

рд╡рд╣рд╛рдБ рдХреЛрдб рд╣реИ рдХрд┐ рдмрд╕ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реИред


рдпрд╣ рдХреЛрдб рддрдм рддрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рджреЛ рдПрдиреБрдо рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рди рд╣реЛред
 enum LegalizeAction { Legal, // The target natively supports this operation. Promote, // This operation should be executed in a larger type. Expand, // Try to expand this to other ops, otherwise use a libcall. Custom // Use the LowerOperation hook to implement custom lowering. }; enum LegalizeTypeAction { TypeLegal, // The target natively supports this type. TypePromoteInteger, // Replace this integer with a larger one. TypeExpandInteger, // Split this integer into two of half the size. ... }; LegalizeTypeAction getTypeAction(LLVMContext &Context, EVT VT) const; EVT getTypeToExpandTo(LLVMContext &Context, EVT VT) const { ... switch (getTypeAction(Context, VT)) { case Legal: return VT; case Expand: ... } 

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

V556 рд╡рд┐рднрд┐рдиреНрди рдПрдирдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ: рд╕реНрд╡рд┐рдЪ (ENUM_TYPE_A) {рдорд╛рдорд▓рд╛ ENUM_TYPE_B: ...}ред LLVMAsmPrinter targetlowering.h 268

V556 рд╡рд┐рднрд┐рдиреНрди рдПрдирдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ: рд╕реНрд╡рд┐рдЪ (ENUM_TYPE_A) {рдорд╛рдорд▓рд╛ ENUM_TYPE_B: ...}ред LLVMAsmPrinter targetlowering.h 270

TypeLegal рдХрд╛ рд╣реЛрдирд╛ рдХрд╛рдиреВрдиреА рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИ, рдФрд░ TypeExpandInteger рдХрд╛ рдирд╛рдо рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рд╡реНрдпрдВрдЬрди рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рдерд╛ рдЯрд╛рдЗрдкреЛ рдХрд╛ред рдХреЛрдб рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИ рдФрд░ рдЗрди рдирд╛рдореЛрдВ рдХреЗ рдореВрд▓реНрдп рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдбрд░рд╛рд╡рдирд╛ рдЬрдм рд╕рдВрдХрд▓рдХ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ? :)

рдкреБрдирд╢реНрдЪ


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреНрд▓реИрдВрдЧ рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рдирд╛ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреАред рдмрд╕ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ рдЬрд╣рд╛рдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдХреЛрдб рдХреЛ рдЦрд░рд╛рдм рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдЯреБрдХрдбрд╝реЗ atlcore.h рдореЗрдВ рд╣реИ:
 ATLASSUME(p != NULL); // Too expensive to check separately here if (*p == '\0') // ::CharNextA won't increment if we're at a \0 already return const_cast<_CharType*>(p+1); 

рдХреНрд▓реИрдВрдЧ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрд╕ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:
 do { ((void)0); #pragma warning(push) #pragma warning(disable : 4548) do {__noop(!!(p != 0));} while((0,0) #pragma warning(pop) ); } while(0); // Too expensive to check separately here if (*p == '\0') // ::CharNextA won't increment if we're at a \0 already return const_cast<_CharType*>(p+1); 

рдЙрдиреНрд╣реЛрдВрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд╛рдж 'рдЕрдЧрд░' рдмрдпрд╛рди рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдирд┐рдХрд▓рд╛ рдХрд┐ "рдЕрдЧрд░ (* p == '\ 0')" рдЕрдм рднреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЧрд▓рдд рдХреЛрдб рд╣реИред рдПрд╣, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдЬреАрд╡рди рдореЗрдВ рдХреЛрдИ рдЦреБрд╢реА рдирд╣реАрдВ рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд┐рдВрдХред


  1. рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ред рдмрдЬрдирд╛ред http://www.viva64.com/go.php?url=713
  2. VivaCore рдкреБрд╕реНрддрдХрд╛рд▓рдпред http://www.viva64.com/ru/vivacore-library/

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


All Articles