рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо 8 рдореЗрдВ рдмрдЧ рдвреВрдВрдврдирд╛

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

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

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

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

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

рдЗрд╕рдХрд╛ рдореИрдВ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ:

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

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

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

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

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

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V501 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-570] '||' рдХреЗ рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ 'Name.startswith("avx512.mask.permvar.")' рд╣реИрдВред рдСрдкрд░реЗрдЯрд░ред рдСрдЯреЛрдЕрдкрдЧреНрд░реЗрдб.рд╕реАрдкреАрдкреА 73

рдпрд╣ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ "avx512.mask.permvar" рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдЪреЗрдХ рдореЗрдВ, рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рдФрд░ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдкрд╛рда рдХреЛ рд╕рд╣реА рдХрд░рдирд╛ рднреВрд▓ рдЧрдПред

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N2: рдЯрд╛рдЗрдкреЛ

enum CXNameRefFlags {
  CXNameRange_WantQualifier = 0x1,
  CXNameRange_WantTemplateArgs = 0x2,
  CXNameRange_WantSinglePiece = 0x4
};

void AnnotateTokensWorker::HandlePostPonedChildCursor(
    CXCursor Cursor, unsigned StartTokenIndex) {
  const auto flags = CXNameRange_WantQualifier | CXNameRange_WantQualifier;
  ....
}

рдЪреЗрддрд╛рд╡рдиреА рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: V501 '|' рдХреЗ рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ 'CXNameRange_WantQualifier' рд╣реИрдВред рдСрдкрд░реЗрдЯрд░ред CIndex.cpp 7245

рдПрдХ рдЯрд╛рдЗрдкреЛ рдХреЗ рдХрд╛рд░рдг, рдПрдХ рд╣реА рдирд╛рдорд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рджреЛ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ CXNameRange_WantQualifier.

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N3: рдСрдкрд░реЗрдЯрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рднреНрд░рдо

int PPCTTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index) {
  ....
  if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian() ? 1 : 0)
    return 0;
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V502 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-783] рд╢рд╛рдпрдж '?:' рдСрдкрд░реЗрдЯрд░ рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рднрд┐рдиреНрди рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред '?:' рдСрдкрд░реЗрдЯрд░ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ '==' рдСрдкрд░реЗрдЯрд░ рд╕реЗ рдХрдо рд╣реИред PPCTargetTransformInfo.cpp 404

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

рдЕрдм, рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

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

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

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

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

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

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N4, N5: рд╢реВрдиреНрдп рд╕реВрдЪрдХ

Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
  ....
  TypedInit *LHS = dyn_cast<TypedInit>(Result);
  ....
  LHS = dyn_cast<TypedInit>(
    UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get())
      ->Fold(CurRec));
  if (!LHS) {
    Error(PasteLoc, Twine("can't cast '") + LHS->getAsString() +
                    "' to string");
    return nullptr;
  }
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V522 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] рд╢реВрдиреНрдп рд╕реВрдЪрдХ 'рдПрд▓рдПрдЪрдПрд╕' рдХрд╛ рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЯреАрдЬреАрдкрд╛рд░реНрд╕рд░.рд╕реАрдкреАрдкреА 2152

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

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

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N6: рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

static Expected<bool>
ExtractBlocks(....)
{
  ....
  std::unique_ptr<Module> ProgClone = CloneModule(BD.getProgram(), VMap);
  ....
  BD.setNewProgram(std::move(ProgClone));                                // <=
  MiscompiledFunctions.clear();

  for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
    Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first);  // <=
    assert(NewF && "Function not found??");
    MiscompiledFunctions.push_back(NewF);
  }
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: рд╡реА522 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] рдирд▓ рдкреЙрдЗрдВрдЯрд░ 'рдкреНрд░реЛрдЧрдХреНрд▓реЛрди' рдХреА рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЧрд╝рд▓рддрд╕рдВрдХрд▓рди.рд╕реАрдкреАрдкреА 601

рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд╕реВрдЪрдХ рдкреНрд░реЛрдЧрдХреНрд▓реЛрди рд╡рд╕реНрддреБ рдХрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

BD.setNewProgram(std::move(ProgClone));

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдм рдкреНрд░реЛрдЧрдХреНрд▓реЛрди рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕ рдареАрдХ рдиреАрдЪреЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first);

рд▓реЗрдХрд┐рди рд╣рдХреАрдХрдд рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛! рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓реВрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

рдХрдВрдЯреЗрдирд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЧрд╝рд▓рддрд╕рдВрдХрд▓рд┐рддрдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛:

MiscompiledFunctions.clear();

рдЕрдЧрд▓рд╛, рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЖрдХрд╛рд░ рд▓реВрдк рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {

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

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N7: рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: рд╡реА522 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] рдирд▓ рдкреЙрдЗрдВрдЯрд░ 'рдЯреЗрд╕реНрдЯ' рдХрд╛ рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЧрд╝рд▓рддрд╕рдВрдХрд▓рди.рд╕реАрдкреАрдкреА 709

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N8: рд╢реВрдиреНрдп рд╕реВрдЪрдХ

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: рд╡реА522 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] рдирд▓ рдкреЙрдЗрдВрдЯрд░ 'рдЯрд╛рдЗрдк' рдХрд╛ рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд┐рдЯреАрдлрдВрдХреНрд╢рдирдбрдореНрдкрд░.рд╕реАрдкреАрдкреА 233

рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдмрдЧрд┐рдВрдЧ рдкреНрд░рд┐рдВрдЯрдЖрдЙрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЖрдорддреМрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд╣реА рдПрдХ рдорд╛рдорд▓рд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рд╣реИ. рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдЧрд╛ред

рдареАрдХ рдХрд░реЗрдВ:

if (Type)
  Type->dump(*this);
else
  Printer << "<unknown-type>";

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N9: рд╢реВрдиреНрдп рд╕реВрдЪрдХ

void SearchableTableEmitter::collectTableEntries(
    GenericTable &Table, const std::vector<Record *> &Items) {
  ....
  RecTy *Ty = resolveTypes(Field.RecType, TI->getType());
  if (!Ty)                                                              // <=
    PrintFatalError(Twine("Field '") + Field.Name + "' of table '" +
                    Table.Name + "' has incompatible type: " +
                    Ty->getAsString() + " vs. " +                       // <=
                    TI->getType()->getAsString());
   ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: рд╡реА522 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] рдирд▓ рдкреЙрдЗрдВрдЯрд░ 'рдЯрд╛рдЗ' рдХрд╛ рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред SearchableTableEmitter.cpp 614

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N10: рдЯрд╛рдЗрдкреЛ

bool FormatTokenLexer::tryMergeCSharpNullConditionals() {
  ....
  auto &Identifier = *(Tokens.end() - 2);
  auto &Question = *(Tokens.end() - 1);
  ....
  Identifier->ColumnWidth += Question->ColumnWidth;
  Identifier->Type = Identifier->Type;                    // <=
  Tokens.erase(Tokens.end() - 1);
  return true;
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: 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;
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V622 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-478] 'рд╕реНрд╡рд┐рдЪ' рдХрдерди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ 'рдХреЗрд╕' рдСрдкрд░реЗрдЯрд░ рдЧрд╛рдпрдм рд╣реИред SystemZAsmParser.cpp 652

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N12: рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкреЙрдЗрдВрдЯрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛

InlineCost AMDGPUInliner::getInlineCost(CallSite CS) {
  Function *Callee = CS.getCalledFunction();
  Function *Caller = CS.getCaller();
  TargetTransformInfo &TTI = TTIWP->getTTI(*Callee);

  if (!Callee || Callee->isDeclaration())
    return llvm::InlineCost::getNever("undefined callee");
  ....
}

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

рд╕реВрдЪрдХ рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕реЗ рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЯреАрдЯреАрдЖрдИ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ.

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

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

рдкрд░ рдЕрдм рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЧрдИ рд╣реИтАж

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N13 - N...: рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдкреЙрдЗрдВрдЯрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛

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

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V595 [CWE-476] 'CalleeFn' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬрд╛рдБрдЪреЗрдВ: 1079, 1081ред SimplifyLibCalls.cpp 1079

рдФрд░ рдпрд╣рд╛рдБ:

void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
                            const Decl *Tmpl, Decl *New,
                            LateInstantiatedAttrVec *LateAttrs,
                            LocalInstantiationScope *OuterMostScope) {
  ....
  NamedDecl *ND = dyn_cast<NamedDecl>(New);
  CXXRecordDecl *ThisContext =
    dyn_cast_or_null<CXXRecordDecl>(ND->getDeclContext());         // <=
  CXXThisScopeRAII ThisScope(*this, ThisContext, Qualifiers(),
                             ND && ND->isCXXInstanceMember());     // <=
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V595 [CWE-476] 'ND' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬрд╛рдБрдЪреЗрдВ: 532, 534. SemaTemplateInstantiateDecl.cpp 532

рдФрд░ рдпрд╣рд╛рдБ:

  • V595 [CWE-476] 'U' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 404, 407ред DWARFormValue.cpp 404
  • V595 [CWE-476] 'ND' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬрд╛рдБрдЪреЗрдВ: 2149, 2151. SemaTemplateInstantiate.cpp 2149

рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ V595 рдирдВрдмрд░ рд╡рд╛рд▓реА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рд╣ рдЧрдИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рднреА рд╕рдорд╛рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рд╣реИ.

рдЯреБрдХрдбрд╝рд╛ рдПрди17, рдПрди18: рд╕рдВрджрд┐рдЧреНрдз рдмрджрд▓рд╛рд╡

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V629 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-190] '~(рдЖрдХрд╛рд░ - 1) << 1' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред 32-рдмрд┐рдЯ рдорд╛рди рдХрд╛ рдмрд┐рдЯ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ред AArch64AddressingModes.h 260

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

рдорд╛рди рд▓реАрдЬрд┐рдП рд╡реЗрд░рд┐рдПрдмрд▓ рдЖрдХрд╛рд░ 16 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдЗрд╕реЗ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдПрдирдПрдордЖрдИрдПрдордПрд╕ рдЕрд░реНрде:

1111111111111111111111111111111111111111111111111111111111100000

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реЛрдЧрд╛:

0000000000000000000000000000000011111111111111111111111111100000

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

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

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

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N19: рдЧреБрдо рдХреАрд╡рд░реНрдб рдЕрдиреНрдп?

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V646 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-670] рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рддрд░реНрдХ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ 'рдЕрдиреНрдп' рдХреАрд╡рд░реНрдб рдЧрд╛рдпрдм рд╣реИред AMDGPUAsmParser.cpp 5655

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N20: рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдЪрд╛рд░ рдЯрд╛рдЗрдкреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдБ

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

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

  • V655 [CWE-480] рддрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 'рдкрд░рд┐рдгрд╛рдо + Name.str()' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рддреАрдХ.рд╕реАрдкреАрдкреА 32
  • V655 [CWE-480] рддрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 'рдкрд░рд┐рдгрд╛рдо + "(ObjC рдХреНрд▓рд╛рд╕)" + Name.str()' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рддреАрдХ.рд╕реАрдкреАрдкреА 35
  • V655 [CWE-480] рддрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 'рдкрд░рд┐рдгрд╛рдо + "(рдУрдмреАрдЬреЗрд╕реА рдХреНрд▓рд╛рд╕ рдИрдПрдЪ) " + Name.str()' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рддреАрдХ.рд╕реАрдкреАрдкреА 38
  • V655 [CWE-480] рддрд╛рд░реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 'рдкрд░рд┐рдгрд╛рдо + "(ObjC IVar)" + Name.str()' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рддреАрдХ.рд╕реАрдкреАрдкреА 41

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N21: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░

static void getReqFeatures(std::map<StringRef, int> &FeaturesMap,
                           const std::vector<Record *> &ReqFeatures) {
  for (auto &R : ReqFeatures) {
    StringRef AsmCondString = R->getValueAsString("AssemblerCondString");

    SmallVector<StringRef, 4> Ops;
    SplitString(AsmCondString, Ops, ",");
    assert(!Ops.empty() && "AssemblerCondString cannot be empty");

    for (auto &Op : Ops) {
      assert(!Op.empty() && "Empty operator");
      if (FeaturesMap.find(Op) == FeaturesMap.end())
        FeaturesMap[Op] = FeaturesMap.size();
    }
  }
}

рдЦрддрд░рдирд╛рдХ рдХреЛрдб рд╕реНрд╡рдпрдВ рдвреВрдВрдврдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдФрд░ рдпрд╣ рдзреНрдпрд╛рди рднрдЯрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╕реНрд╡реАрд░ рд╣реИ рддрд╛рдХрд┐ рддреБрд░рдВрдд рдЙрддреНрддрд░ рдкрд░ рдзреНрдпрд╛рди рди рджрд┐рдпрд╛ рдЬрд╛рдП:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо 8 рдореЗрдВ рдмрдЧ рдвреВрдВрдврдирд╛

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V708 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-758] рдЦрддрд░рдирд╛рдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: 'рдлреАрдЪрд░рдореИрдк[рдСрдк] = рдлреАрдЪрд░реНрд╕рдореИрдк.рд╕рд╛рдЗрдЬ()', рдЬрд╣рд╛рдВ 'рдлреАрдЪрд░рдореИрдк' 'рдореИрдк' рд╡рд░реНрдЧ рдХрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ. RISCVCompressInstEmitter.cpp 490

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

FeaturesMap[Op] = FeaturesMap.size();

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N22-N24: рдмрд╛рд░-рдмрд╛рд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V519 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-563] 'рдПрдирдЯрд╛рдЗрдк' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдмрд╛рд░ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпреЗ рдПрдХ рдЧрд▓рддреА рд╣реИ. рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬрд╛рдБрдЪреЗрдВ: 1663, 1664ред MacOObjectFile.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;
  ....
}

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

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

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

  • V519 [CWE-563] 'рдЗрдлреЗрдХреНрдЯреНрд╕' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдмрд╛рд░ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпреЗ рдПрдХ рдЧрд▓рддреА рд╣реИ. рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 152, 165ред WebAssemblyRegStackify.cpp 165
  • V519 [CWE-563] 'ExpectNoDerefChunk' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдмрд╛рд░ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпреЗ рдПрдХ рдЧрд▓рддреА рд╣реИ. рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 4970, 4973. SemaType.cpp 4973

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N28: рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╕реНрдерд┐рддрд┐

static int readPrefixes(struct InternalInstruction* insn) {
  ....
  uint8_t byte = 0;
  uint8_t nextByte;
  ....
  if (byte == 0xf3 && (nextByte == 0x88 || nextByte == 0x89 ||
                       nextByte == 0xc6 || nextByte == 0xc7)) {
    insn->xAcquireRelease = true;
    if (nextByte != 0x90) // PAUSE instruction support             // <=
      break;
  }
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V547 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдиреЗрдХреНрд╕реНрдЯрдмрд╛рдЗрдЯ != 0x90' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддреА рд╣реИред X86DisassemblerDecoder.cpp 379

рдЬрд╛рдВрдЪ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ. рдЪрд░ рдЕрдЧрд▓рд╛рдмрд╛рдЗрдЯ рд╣рдореЗрд╢рд╛ рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ 0x90, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЪреЗрдХ рд╕реЗ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИ.

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N29 - N...: рд╣рдореЗрд╢рд╛ рд╕рд╣реА/рдЧрд▓рдд рд╕реНрдерд┐рддрд┐рдпрд╛рдБ

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

static DecodeStatus DecodeGPRPairRegisterClass(MCInst &Inst, unsigned RegNo,
                                   uint64_t Address, const void *Decoder) {
  DecodeStatus S = MCDisassembler::Success;

  if (RegNo > 13)
    return MCDisassembler::Fail;

  if ((RegNo & 1) || RegNo == 0xe)
     S = MCDisassembler::SoftFail;
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V560 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-570] рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ: рд░реЗрдЧрдиреЛ == 0рдПрдХреНрд╕рдИред ARMDisassembler.cpp 939

рд╕реНрдерд┐рд░рд╛рдВрдХ 0xE рджрд╢рдорд▓рд╡ рдореЗрдВ рдорд╛рди 14 рд╣реИред рдЗрдВрддрд┐рд╣рд╛рди рд░реЗрдЧрдиреЛ == 0xe рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдкрдВрдЬреАрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ > 13, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдирд╛ рдирд┐рд╖реНрдкрд╛рджрди рдкреВрд░рд╛ рдХрд░ рд▓реЗрдЧрд╛ред

рдЖрдИрдбреА V547 рдФрд░ V560 рдХреЗ рд╕рд╛рде рдХрдИ рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдереАрдВ, рд▓реЗрдХрд┐рди рд╡реИрд╕реА рд╣реА V595, рдореБрдЭреЗ рдЗрди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рдереАред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдордЧреНрд░реА рдереА :)ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЕрдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХрд┐рддрдиреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

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

bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons,
                                          tok::TokenKind ClosingBraceKind) {
  bool HasError = false;
  ....
  HasError = true;
  if (!ContinueOnSemicolons)
    return !HasError;
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: 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 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-670] рдПрдХ рд▓реВрдк рдХреЗ рднреАрддрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд 'рд╡рд╛рдкрд╕реА'ред R600рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд╡реЗрдХреНрдЯрд░рд░рдЬрд┐рд╕реНрдЯрд░реНрд╕.cpp 63

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

рдердХрд╛ рд╣реБрдЖ? рдлрд┐рд░ рдЪрд╛рдп рдпрд╛ рдХреЙрдлрд╝реА рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо 8 рдореЗрдВ рдмрдЧ рдвреВрдВрдврдирд╛

рдирдП рдирд┐рджрд╛рди рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рджреЛрд╖

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N31: рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдХреЛрдб рдирд╣реАрдВ

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

  CtorDtorsByPriority.clear();

  return Error::success();
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V779 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-561] рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛ. ExecutionUtils.cpp 146

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ 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;
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V779 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-561] рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдХреЛрдб рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдореМрдЬреВрдж рд╣реЛ. рдПрд▓рдПрд▓рдкреАрдЕрд░реНрд╕.рд╕реАрдкреАрдкреА 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);
  ....
}

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

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

~(getStubAlignment() - 1)

~(8рдпреВ-1)

0xFFFFFFFF8u

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

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

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

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

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N34: рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдлрд▓ рдХрд╛рд╕реНрдЯ

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V1028 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-190] рд╕рдВрднрд╛рд╡рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ред 'NumElts * рд╕реНрдХреЗрд▓' рдСрдкрд░реЗрдЯрд░ рдХреЗ рдСрдкрд░реЗрдВрдб рдХреЛ 'size_t' рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рди рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкрд░ред X86ISelLowering.h 1577

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

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

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

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд╡реЗ рдмрджрд▓ рдЧрдпреЗ Op0 рдкрд░ Op1. рд▓реЗрдХрд┐рди рдПрдХ рдЬрдЧрд╣ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛. рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛:

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N36: рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рднреНрд░рдо

struct Status {
  unsigned Mask;
  unsigned Mode;

  Status() : Mask(0), Mode(0){};

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

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

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

Mode &= Mask;

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

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

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N37: рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рднреНрд░рдо

class SectionBase {
  ....
  uint64_t Size = 0;
  ....
};

class SymbolTableSection : public SectionBase {
  ....
};

void SymbolTableSection::addSymbol(Twine Name, uint8_t Bind, uint8_t Type,
                                   SectionBase *DefinedIn, uint64_t Value,
                                   uint8_t Visibility, uint16_t Shndx,
                                   uint64_t Size) {
  ....
  Sym.Value = Value;
  Sym.Visibility = Visibility;
  Sym.Size = Size;
  Sym.Index = Symbols.size();
  Symbols.emplace_back(llvm::make_unique<Symbol>(Sym));
  Size += this->EntrySize;
}

рдЪреЗрддрд╛рд╡рдиреА рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ: рд╡реА1001 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-563] 'рдЖрдХрд╛рд░' рд╡реЗрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ.рд╕реАрдкреАрдкреА 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());  // <=
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: рд╡реА1004 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] 'рдкреАрдЯреАрдЖрд░' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 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(); // <=
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: рд╡реА1004 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] 'рдПрдлрдбреА' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 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());     // <=
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: рд╡реА1004 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] 'PtrTy' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 960, 965ред рдЗрдВрдЯрд░рд▓реАрд╡реНрдбрд▓реЛрдбрдХреЙрдореНрдмрд╛рдЗрдирдкрд╛рд╕.рд╕реАрдкреАрдкреА 965

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

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

  • V1004 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] 'рдПрдХреНрд╕рдкреАрдЖрд░' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 1049, 1078. DebugInfoMetadata.cpp 1078
  • V1004 [CWE-476] 'PI' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 733, 753ред рд▓рд┐рдЧреЗрд╕реАрдкрд╛рд╕рдореИрдиреЗрдЬрд░.рд╕реАрдкреАрдкреА 753
  • V1004 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] 'рд╕реНрдЯреЗрдЯрдкреЙрдЗрдВрдЯрдХреЙрд▓' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 4371, 4379. рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛.рд╕реАрдкреАрдкреА 4379
  • V1004 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] 'рдЖрд░рд╡реА' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 2263, 2268. TGParser.cpp 2268
  • V1004 [CWE-476] 'CalleeFn' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬрд╛рдБрдЪреЗрдВ: 1081, 1096ред SimplifyLibCalls.cpp 1096
  • V1004 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] 'рдЯреАрд╕реА' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 1819, 1824ред рдбреНрд░рд╛рдЗрд╡рд░.рд╕реАрдкреАрдкреА 1824

рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N48-N60: рдЧрдВрднреАрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдПрдХ рджреЛрд╖ (рд╕рдВрднрд╛рд╡рд┐рдд рдореЗрдореЛрд░реА рд▓реАрдХ)

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

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

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

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рд▓рд┐рдЦрдирд╛ рд╣реИ xxx.emplace_back(рдирдпрд╛ рдПрдХреНрд╕)рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ: рд╡рд┐рдзрд┐ 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>())

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

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

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

  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рдкрд╛рд╕' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдкрд╛рд╕рдореИрдиреЗрдЬрд░.рдПрдЪ 546
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'AAs' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдЙрдкрдирд╛рдорд╡рд┐рд╢реНрд▓реЗрд╖рдг.h 324
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рдПрдВрдЯреНрд░реАрдЬрд╝' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. DWARFDebugFrame.cpp 519
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'AllEdges' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рд╕реАрдПрдлрдЬреАрдПрдордПрд╕рдЯреА.рдПрдЪ 268
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'VMaps' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. SimpleLoopUnswitch.cpp 2012
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд░рд┐рдХреЙрд░реНрдбреНрд╕' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. FDRLogBuilder.h 30
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'PendingSubmodules' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. ModuleMap.cpp 810
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдбреАрдмрдЧрдореИрдк.рд╕реАрдкреАрдкреА 88
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд░рдгрдиреАрддрд┐рдпрд╛рдБ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. llvm-isel-fuzzer.cpp 60
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕рдВрд╢реЛрдзрдХ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╕реНрдЯреНрд░реЗрд╕.рд╕реАрдкреАрдкреА 685
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕рдВрд╢реЛрдзрдХ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╕реНрдЯреНрд░реЗрд╕.рд╕реАрдкреАрдкреА 686
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕рдВрд╢реЛрдзрдХ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╕реНрдЯреНрд░реЗрд╕.рд╕реАрдкреАрдкреА 688
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕рдВрд╢реЛрдзрдХ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╕реНрдЯреНрд░реЗрд╕.рд╕реАрдкреАрдкреА 689
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕рдВрд╢реЛрдзрдХ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╕реНрдЯреНрд░реЗрд╕.рд╕реАрдкреАрдкреА 690
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕рдВрд╢реЛрдзрдХ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╕реНрдЯреНрд░реЗрд╕.рд╕реАрдкреАрдкреА 691
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕рдВрд╢реЛрдзрдХ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╕реНрдЯреНрд░реЗрд╕.рд╕реАрдкреАрдкреА 692
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕рдВрд╢реЛрдзрдХ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╕реНрдЯреНрд░реЗрд╕.рд╕реАрдкреАрдкреА 693
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕рдВрд╢реЛрдзрдХ' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. рдПрд▓рдПрд▓рд╡реАрдПрдо-рд╕реНрдЯреНрд░реЗрд╕.рд╕реАрдкреАрдкреА 694
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рдСрдкрд░реЗрдВрдб' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. GlobalISelEmitter.cpp 1911
  • V1023 [CWE-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'emplace_back' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рд╕реНрдЯреИрд╢' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. GlobalISelEmitter.cpp 2100
  • V1023 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-460] рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ 'рдПрдореНрдкреНрд▓реЗрд╕_рдмреИрдХ' рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ 'рдореИрдЪрд░реНрд╕' рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рдЬрд╛рдПрдЧреА. GlobalISelEmitter.cpp 2702

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

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

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

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

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

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо 8 рдореЗрдВ рдмрдЧ рдвреВрдВрдврдирд╛

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

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ