рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдЬреАрд╕реАрд╕реА 10 рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдмрдирд╛рдо рдЬреАрд╕реАрд╕реА 10

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

рдЬреАрд╕реАрд╕реА рд╕рдВрдХрд▓рдХ рдХреЛрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдордп


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

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рд╢рд╛рд╕реНрддреНрд░реАрдп рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╕реНрдЯреЗрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рди рдХреЗрд╡рд▓ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд┐рдХрд╕рд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рднреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм, PlatformIO, Azure DevOps, Travis CI, CircleCI, GitLab CI / CD, Jenkins, Visual Studio рдЬреИрд╕реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рд╣реИред рдпреЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджрдорди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рддрдВрддреНрд░ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдмрдбрд╝реА рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднреА рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд▓реНрджреА рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рд╣реИред рдЗрддреНрдпрд╛рджрд┐ рдЗрддреНрдпрд╛рджрд┐ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реИрд╕реЗ рднреА, рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдЧрдпрд╛ рд╣реИ: "рдХреНрдпрд╛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреБрдЫ рдРрд╕рд╛ рдвреВрдВрдв рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ?"ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрди рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреА рд╕реНрд╡рдпрдВ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рд▓реЗрдЦ рд▓рд┐рдЦреЗрдВрдЧреЗред

рдЖрдЗрдП GCC рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред рдЖрдЗрдП рдмреЗрд╣рддрд░ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИред

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

рджреВрд╕рд░реЗ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдПред рдореИрдХреНрд░реЛрдЬрд╝, рдореИрдХреНрд░реЛрдЬрд╝ ... рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рд╣реИрдВ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдХреНрдпреЛрдВ рджреЗрддрд╛ рд╣реИред рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ред рдореБрдЭреЗ рдореИрдХреНрд░реЛрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВ ред рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реА рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд▓реЗрдХрд┐рди рд╕реАрд╕реАрд╕реА рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЬреАрд╕реАрд╕реА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рдВ, рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди .c рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╣рд╛рдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░:

//  alias.c
....
struct alias_set_hash : int_hash <int, INT_MIN, INT_MIN + 1> {};
struct GTY(()) alias_set_entry {
  alias_set_type alias_set;
  bool has_zero_child;
  bool is_pointer;
  bool has_pointer;
  hash_map<alias_set_hash, int> *children;
};
....

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ C рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди C ++ рд╣реИред

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

10 рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ


Fragment N1, рдЕрд╕рдлрд▓ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд▓рдЧрддрд╛ рд╣реИ

static bool
try_crossjump_to_edge (int mode, edge e1, edge e2,
                       enum replace_direction dir)
{
  ....
  if (FORWARDER_BLOCK_P (s->dest))
    s->dest->count += s->count ();

  if (FORWARDER_BLOCK_P (s2->dest))
    s2->dest->count -= s->count ();
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V778 рджреЛ рд╕рдорд╛рди рдХреЛрдб рдЕрдВрд╢ рдкрд╛рдП рдЧрдПред рд╢рд╛рдпрдж, рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ рдФрд░ 's2' рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ 's' рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред cfgcleanup.c 2126

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

if (FORWARDER_BLOCK_P (s2->dest))
  s2->dest->count -= s2->count ();

рдлреНрд░реИрдЧрдореЗрдВрдЯ рдПрди 2, рдЯрд╛рдЗрдкреЛ

tree
vn_reference_lookup_pieces (....)
{
  struct vn_reference_s vr1;
  ....
  vr1.set = set;
  vr1.set = base_set;
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V519 'vr1.set' рдЪрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 3448, 3449. рдЯреНрд░реА- ssa-sccvn.c 3449

рдпрд╣ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдПрдХ рд╣реА рдЪрд░ рдореЗрдВ рджреЛ рдмрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рди рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЯрд╛рдЗрдкреЛ рд╣реИред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдЧреЗ рдпрд╣ рдХреЛрдб рд╣реИ:

vr1.set = set;
vr1.base_set = base_set;

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд╕рдВрджрд┐рдЧреНрдз рдХреЛрдб рдореЗрдВ рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдЯреБрдХрдбрд╝рд╛ N3, рдПрдХ рдЪрд░ рдХреЛ рдЦреБрдж рдХреЛ рд╕реМрдВрдкрдирд╛

static omp_context *
new_omp_context (gimple *stmt, omp_context *outer_ctx)
{
  omp_context *ctx = XCNEW (omp_context);

  splay_tree_insert (all_contexts, (splay_tree_key) stmt,
         (splay_tree_value) ctx);
  ctx->stmt = stmt;

  if (outer_ctx)
    {
      ctx->outer = outer_ctx;
      ctx->cb = outer_ctx->cb;
      ctx->cb.block = NULL;
      ctx->local_reduction_clauses = NULL;
      ctx->outer_reduction_clauses = ctx->outer_reduction_clauses;  // <=
      ctx->depth = outer_ctx->depth + 1;
    }
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V570 'ctx-> external_reduction_clauses' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╣реА рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред omp-low.c 935

рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рдЪрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИред

рдЯреБрдХрдбрд╝рд╛ рдХрд░рдирд╛ N4ред 0,1,2, рдлреНрд░реЗрдбреА рдЖрдкрдХреЛ рдЙрдард╛рдПрдЧрд╛ред

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

#define GET_MODE(RTX)    ((machine_mode) (RTX)->mode)
....
static int
add_equal_note (rtx_insn *insns, rtx target, enum rtx_code code, rtx op0,
                rtx op1, machine_mode op0_mode)
{
  ....
  if (commutative_p
      && GET_MODE (xop0) != xmode0 && GET_MODE (xop1) != xmode1
      && GET_MODE (xop0) == xmode1 && GET_MODE (xop1) == xmode1)
    std::swap (xop0, xop1);
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ:
((рдорд╢реАрди_рдореЛрдб) (xop1) -> рдореЛрдб) == xmode1ред Optabs.c 1053

рдЗрди рджреЛ рдЙрдк рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:

  • GET_MODE (xop1)! = Xmode1
  • GET_MODE (xop1) == xmode1

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

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд╢реВрдиреНрдп рдФрд░ рд▓реЛрдЧреЛрдВ рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрд░рд╣ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

&& GET_MODE (xop0) != xmode0 && GET_MODE (xop1) != xmode1
&& GET_MODE (xop0) == xmode1 && GET_MODE (xop1) == xmode0

рдмреЗрд╢рдХ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдирд╣реАрдВ рд╣реВрдВред

рдЯреБрдХрдбрд╝реЗ рдХрд░рдирд╛ N5ред рддрд░реНрдХ рдореВрд▓реНрдп рдореЗрдВ рд╕рдВрджрд┐рдЧреНрдз рдкрд░рд┐рд╡рд░реНрддрди

bool
ipa_polymorphic_call_context::set_by_invariant (tree cst,
                                                tree otr_type,
                                                HOST_WIDE_INT off)
{
  poly_int64 offset2, size, max_size;
  bool reverse;
  tree base;

  invalid = false;
  off = 0;                // <=
  ....
  if (otr_type && !contains_type_p (TREE_TYPE (base), off, otr_type))
    return false;

  set_by_decl (base, off);
  return true;
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V763 рдкреИрд░рд╛рдореАрдЯрд░ 'рдСрдл' рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред ipa-polymorphic-call.c 766 рдСрдл

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



cgraph_node *
cgraph_node::create_clone (....)
{
  ....
  new_node->icf_merged = icf_merged;
  new_node->merged_comdat = merged_comdat;   // <=
  new_node->thunk = thunk;
  new_node->unit_id = unit_id;
  new_node->merged_comdat = merged_comdat;   // <=
  new_node->merged_extern_inline = merged_extern_inline;
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V519 'new_node-> merged_comdat' рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рджреЛ рдмрд╛рд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 406, 409. cgraphclones.c 409 рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ

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

рдЦрдВрдбрди N7ред рдХреЛрдб рдЬреЛ рдЦрддрд░рдирд╛рдХ рджрд┐рдЦрддрд╛ рд╣реИ

static void
complete_mode (struct mode_data *m)
{
  ....
  if (m->cl == MODE_COMPLEX_INT || m->cl == MODE_COMPLEX_FLOAT)
    alignment = m->component->bytesize;
  else
    alignment = m->bytesize;

  m->alignment = alignment & (~alignment + 1);

  if (m->component)
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'm-> рдШрдЯрдХ' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 407, 415. genmodes.c 407

рд╢реБрд░реБрдЖрдд рдореЗрдВ, m-> рдШрдЯрдХ рд╕реВрдЪрдХ рдХреЛ if рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ dereferenced рдЬрд╛рддрд╛ рд╣реИ ред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐: m-> рдШрдЯрдХ-> рдмрд╛рдЗрдЯрд╕реЗрдЬрд╝ ред

рдпрд╣ рдЖрдЧреЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реВрдЪрдХ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЪреЗрдХ рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдпрджрд┐ (m-> рдШрдЯрдХ) ред

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

рдЦрдВрдбрди N8ред рджреЛрд╣рд░реА рдЬрд╛рдБрдЪ

void
pointer_and_operator::wi_fold (value_range &r, tree type,
                               const wide_int &lh_lb,
                               const wide_int &lh_ub,
                               const wide_int &rh_lb ATTRIBUTE_UNUSED,
                               const wide_int &rh_ub ATTRIBUTE_UNUSED) const
{
  // For pointer types, we are really only interested in asserting
  // whether the expression evaluates to non-NULL.
  if (wi_zero_p (type, lh_lb, lh_ub) || wi_zero_p (type, lh_lb, lh_ub))
    r = range_zero (type);
  else 
    r = value_range (type);
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V501 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'wi_zero_p (рдкреНрд░рдХрд╛рд░, lh_lb, lh_ub)' рдмрд╛рдИрдВ рдУрд░ рдФрд░ 'рджрд╛рдИрдВ рдУрд░' рдСрдкрд░реЗрдЯрд░ред рд░реЗрдВрдЬ-op.cc 2657

рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдЬреАрдм рдЬрд╛рдБрдЪред Wi_zero_p рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рдХреЗ рд╕рдорд╛рди рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рджреЛ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рдХреЛ рд╕рдВрджреЗрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рджреВрд╕рд░реА рдХреЙрд▓ рдХреЛ рдмрд╛рд╣рд░ рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: rh_lb , rh_ubред рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рдЗрди рддрд░реНрдХреЛрдВ рдХреЛ рдЕрдкреНрд░рдпреБрдХреНрдд ( ATTRIBUTE_UNUSED ) рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

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

if (wi_zero_p (type, lh_lb, lh_ub))
  r = range_zero (type);
else 
  r = value_range (type);

рдпрд╛ рдпрд╣рд╛рдБ рдХреБрдЫ рдЯрд╛рдЗрдкреЛ рд╣реИ? рдпрд╛ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдЧрд▓рддреА? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рд▓реЗрдХрд┐рди рдХреЛрдб рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИред

рдЯреБрдХрдбрд╝реЗ рдХрд░рдирд╛ N9ред рдЦрддрд░рдирд╛рдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ

struct algorithm
{
  struct mult_cost cost;
  short ops;
  enum alg_code op[MAX_BITS_PER_WORD];
  char log[MAX_BITS_PER_WORD];
};

static void
synth_mult (struct algorithm *alg_out, unsigned HOST_WIDE_INT t,
            const struct mult_cost *cost_limit, machine_mode mode)
{
  int m;
  struct algorithm *alg_in, *best_alg;
  ....
  /* Cache the result.  */
  if (!cache_hit)
  {
    entry_ptr->t = t;
    entry_ptr->mode = mode;
    entry_ptr->speed = speed;
    entry_ptr->alg = best_alg->op[best_alg->ops];
    entry_ptr->cost.cost = best_cost.cost;
    entry_ptr->cost.latency = best_cost.latency;
  }

  /* If we are getting a too long sequence for `struct algorithm'
     to record, make this search fail.  */
  if (best_alg->ops == MAX_BITS_PER_WORD)
    return;
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V781 'best_alg-> ops' рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рд╢рд╛рдпрдж рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдЬрд┐рдХ рдореЗрдВ рдХреЛрдИ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 3157, 3164. expmed.c 3157

рдЪрд▓реЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рдХрд░реЗрдВ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдХреНрдпрд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ:

if (!cache_hit)
{
  entry_ptr->alg = best_alg->op[best_alg->ops];
}
if (best_alg->ops == MAX_BITS_PER_WORD)

рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЪрд░ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд░рд┐рдПрдмрд▓ best_alg-> рдСрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдЪрд░ рд╕реАрдорд╛ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рд╕рд░рдгреА рдХрд╛ рдУрд╡рд░рдлрд╝реНрд▓реЛ (рдХреНрд▓рд╛рд╕рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ CWE-193: рдСрдлрд╝-рдмрд╛рдп-рд╡рди рдПрд░рд░ ) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

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

рдШрд░реНрд╖рдг N10ред рдХреЛрдб рдЬреЛ 4 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛:

static bool
dw_val_equal_p (dw_val_node *a, dw_val_node *b)
{
  ....
  case dw_val_class_vms_delta:
    return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
            && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V501 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ! Strcmp (a-> v.val_vms_delta.lbl1, b-> v.val_vms_delta.lbl1) рдмрд╛рдИрдВ рдУрд░ рдФрд░ '&&' рд╕рдВрдЪрд╛рд▓рдХ рдХреЗ рджрд╛рдИрдВ рдУрд░ред dwarf2out.c 1481

рджреЛ strcmp рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░рд░реНрдердХ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рдерд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

return (   !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
        && !strcmp (a->v.val_vms_delta.lbl2, b->v.val_vms_delta.lbl2));

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

return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));

рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЬреАрд╕реАрд╕реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдирдП рд▓реЗрдЦ рдХреЗ рдмрд╛рдж рдЗрд╕ рдХреЛрдб рдХреЛ рдмрджрд▓реЗрдВрдЧреЗ рдпрд╛ рдирд╣реАрдВред

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


рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЦреБрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рд╡реИрд╕реЗ, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рднреА рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрдВрдж рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреАред рд╡реЗ рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ: " рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдлреНрд░реА рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк "ред

рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдФрд░ рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдХреЛ рдкрдврд╝реЗ ред рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддреЗрдВ рд╣реИрдВред

рд╕рдВрдХрд▓рдХ рдЬрд╛рдБрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЕрдиреНрдп рд▓реЗрдЦ


  1. рдПрд▓рдПрд▓рд╡реАрдПрдо рдЪреЗрдХ (рдХреНрд▓реИрдВрдЧ) (рдЕрдЧрд╕реНрдд 2011), рджреВрд╕рд░рд╛ рдЪреЗрдХ (рдЕрдЧрд╕реНрдд 2012), рддреАрд╕рд░рд╛ рдЪреЗрдХ (рдЕрдХреНрдЯреВрдмрд░ 2016), рдЪреМрдерд╛ рдЪреЗрдХ (рдЕрдкреНрд░реИрд▓ 2019)
  2. рдЬреАрд╕реАрд╕реА рдХреА рд╕рдореАрдХреНрд╖рд╛ (рдЕрдЧрд╕реНрдд 2016)
  3. Huawei рдЖрд░реНрдХ рдХрдВрдкрд╛рдЗрд▓рд░ (рджрд┐рд╕рдВрдмрд░ 2019) рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ
  4. .NET рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо ("рд░реЛрдЬрд╝рд▓рд┐рди") рдХрд╛ рд╕рддреНрдпрд╛рдкрди (рджрд┐рд╕рдВрдмрд░ 2015), рджреВрд╕рд░рд╛ рдирд┐рд░реАрдХреНрд╖рдг (рдЕрдкреНрд░реИрд▓ 2019)
  5. рд░реЛрд╕рд▓рд┐рди рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рд░рд┐рд╡реНрдпреВ (рдЕрдЧрд╕реНрдд 2019)
  6. PascalABC.NET рдХреА рдЬрд╛рдБрдЪ (рдорд╛рд░реНрдЪ 2017)



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

All Articles