рд╣рдорд╛рд░реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЕрдВрддрд┐рдо рдХреЛрдб рдЬрд╛рдВрдЪ рдХреЛ рджреЛ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИред рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЧреНрд░рдгреА рдЙрдкрдХрд░рдг рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрд▓рдПрд▓рд╡реАрдПрдо 8.0.0 рд░рд┐рд▓реАрдЬ рдореЗрдВ рдирдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдвреВрдВрдвреЗрдВрдЧреЗред
рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рд╣реИ
рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдореИрдВ рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдХрд┐рд╕реА рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдХрдИ рдмрд╛рд░ рдЬрд╛рдБрдЪ рдЪреБрдХреЗ рд╣реИрдВ (
рд╣рд░ рдмрд╛рд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдпрд╛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рджреЗрдЦрд┐рдП, рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдиреЗ рдирдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдвреВрдВрдврдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ рд╣реИ! рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХрдо рд╣реЛ рд░рд╣реА рд╣реИред рдХреНрд▓реИрдВрдЧ рдХреЛ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИред рдЖрдкрдХрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрдирд╛ рд╣реИ?
рдЗрд╕рдХрд╛ рдореИрдВ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ:
рд╣рдо рднреА рдЦрд╛рд▓реА рдирд╣реАрдВ рдмреИрдарддреЗ! рд╣рдордиреЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд░рд╣реЗрдВрдЧреЗред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдПрдХ рдЦрд╝рд░рд╛рдм рдЙрддреНрддрд░ рд╣реИ. рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдмреВрдд рдирд╣реАрдВ рд╣реИрдВ. рдФрд░ рдЗрд╕реАрд▓рд┐рдП рдореИрдВ рдЕрдм рдпрд╣ рд▓реЗрдЦ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдПрд▓рдПрд▓рд╡реАрдПрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рдФрд░ рдЗрд╕рдореЗрдВ рдХрдИ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рдИ рдЧрдИрдВред рдЕрдм рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧреЗред рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ (рдпрд╛ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ)ред рдкрд░ рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдПрдХ рд╣реА рд╢рд╛рдо рдореЗрдВ рдЗрди рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдвреВрдВрдв рд▓рд┐рдпрд╛ рдФрд░ рд▓рд┐рдЦ рд▓рд┐рдпрд╛ред
рд▓реЗрдХрд┐рди рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрдИ рд╕рдкреНрддрд╛рд╣ рд▓рдЧ рдЧрдПред рдореИрдВ рдпрд╣ рд╕рдм рдкрд╛рда рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ :)ред
рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ
рдирдпреЗ рдФрд░ рдкреБрд░рд╛рдиреЗ рдирд┐рджрд╛рди
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рдЧрднрдЧ рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рдереА, рдФрд░ рдкрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рдпрд╣ рдЖрд▓реЗрдЦ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рдмреИрдЪ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред рдирдП рдмрдЧ рдХреНрдпреЛрдВ рдкрд╛рдП рдЧрдП? рдЗрд╕рдХреЗ 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
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдпрд╣ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ "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;
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЦреВрдмрд╕реВрд░рдд рдЧрд▓рддреА рд╣реИ. рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕реБрдВрджрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдЕрдЬреАрдм рд╣реИрдВ :)ред
рдЕрдм, рдХреЗ рдЕрдиреБрд╕рд╛рд░
(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;
}
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдпрджрд┐ рд╕реВрдЪрдХ рдПрд▓рдПрдЪрдПрд╕ рд╢реВрдиреНрдп рд╣реИ, рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реА рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдХреЛ рдЕрд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: 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;
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рд╕реНрд╡рдпрдВ рдХреЛ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╕рдВрднрд╡рддрдГ рд╡реЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ:
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;
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рдСрдкрд░реЗрдЯрд░ рд╣реИ рддреЛрдбрд╝рдирд╛. рдХреНрдпрд╛ рдЖрдк рдпрд╣рд╛рдБ рдХреБрдЫ рдФрд░ рд▓рд┐рдЦрдирд╛ рднреВрд▓ рдЧрдпреЗ?
рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ 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");
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рд╕реВрдЪрдХ рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕реЗ рдбреАрд░реЗрдлрд╝рд░реЗрдВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЯреАрдЯреАрдЖрдИ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ.
рдФрд░ рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реВрдЪрдХ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП 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;
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдИ рдмрдЧ рди рд╣реЛ рдФрд░ рдХреЛрдб рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рдЬрдЧрд╣ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╡реЗрд░рд┐рдПрдмрд▓ рдЖрдХрд╛рд░ 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");
}
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдпрд╣рд╛рдВ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ. рдкрд╣рд▓реЗ рдХреЗ рддрддреНрдХрд╛рд▓реАрди-рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рдж рд╕реЗ 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();
}
}
}
рдЦрддрд░рдирд╛рдХ рдХреЛрдб рд╕реНрд╡рдпрдВ рдвреВрдВрдврдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдФрд░ рдпрд╣ рдзреНрдпрд╛рди рднрдЯрдХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╕реНрд╡реАрд░ рд╣реИ рддрд╛рдХрд┐ рддреБрд░рдВрдд рдЙрддреНрддрд░ рдкрд░ рдзреНрдпрд╛рди рди рджрд┐рдпрд╛ рдЬрд╛рдП:
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рд╕рдорд╕реНрдпрд╛ рд░реЗрдЦрд╛:
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 [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;
}
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдЬрд╛рдВрдЪ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ. рдЪрд░ рдЕрдЧрд▓рд╛рдмрд╛рдЗрдЯ рд╣рдореЗрд╢рд╛ рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ 0x90, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЪреЗрдХ рд╕реЗ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИ.
рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ N29 - N...: рд╣рдореЗрд╢рд╛ рд╕рд╣реА/рдЧрд▓рдд рд╕реНрдерд┐рддрд┐рдпрд╛рдБ
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ (
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;
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рд╕реНрдерд┐рд░рд╛рдВрдХ 0xE рджрд╢рдорд▓рд╡ рдореЗрдВ рдорд╛рди 14 рд╣реИред рдЗрдВрддрд┐рд╣рд╛рди рд░реЗрдЧрдиреЛ == 0xe рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдкрдВрдЬреАрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ > 13, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдирд╛ рдирд┐рд╖реНрдкрд╛рджрди рдкреВрд░рд╛ рдХрд░ рд▓реЗрдЧрд╛ред
рдЖрдИрдбреА V547 рдФрд░ V560 рдХреЗ рд╕рд╛рде рдХрдИ рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдереАрдВ, рд▓реЗрдХрд┐рди рд╡реИрд╕реА рд╣реА
рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдХрд┐ рдЗрди рдЯреНрд░рд┐рдЧрд░реНрд╕ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЙрдмрд╛рдК рдХреНрдпреЛрдВ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдпреЗ рдХреЛрдИ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ.
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();
}
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЛрдб рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХреБрдЫ рд╕рдордЭрд╛рдирд╛ рд╣реИред рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдореБрдЭреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИред рдРрд╕рд╛ рди рд▓рд┐рдЦрдирд╛ рд╣реА рдмреЗрд╣рддрд░ рд╣реИ :)ред
рдердХрд╛ рд╣реБрдЖ? рдлрд┐рд░ рдЪрд╛рдп рдпрд╛ рдХреЙрдлрд╝реА рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред
рдирдП рдирд┐рджрд╛рди рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рджреЛрд╖
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрд░рд╛рдиреЗ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреА 30 рд╕рдХреНрд░рд┐рдпрддрд╛рдПрдБ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдЖрдЗрдП рдЕрдм рджреЗрдЦреЗрдВ рдХрд┐ рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдП рдирдП рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рд╕реЗ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ
рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ 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();
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдСрдкрд░реЗрдЯрд░ рдХреА рджреЛрдиреЛрдВ рд╢рд╛рдЦрд╛рдПрдБ 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);
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди 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);
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдкреНрд░рдХрд╛рд░ рдЪрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╕рдордп рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ int. рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЧреБрдгрди рдХреЗ 32-рдмрд┐рдЯ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ 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;
}
....
}
рдпрд╣ рдирдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдирд╛рдо рдмрджрд▓реЗ рдЬрд╛рдиреЗ рд▓рдЧреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЬрдЧрд╣ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд╡реЗ рдмрджрд▓ рдЧрдпреЗ 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;
};
....
};
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЛ рдХреНрд▓рд╛рд╕ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рджреЗрдирд╛ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рд╣реИред рднреНрд░рдорд┐рдд рд╣реЛрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ. рдРрд╕рд╛ рд╣реА рдПрдХ рдорд╛рдорд▓рд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рд╣реИ. рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ:
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: рд╡реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рднреВрд▓ рдЧрдП
рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдЯреНрд░рд┐рдЧрд░рд┐рдВрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗ рдереЗ
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()));
....
}
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
рдХрд┐рд╕реА рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛ рдЬреИрд╕реЗ рдПрд╕рдЯреАрдбреА::рд╡реЗрдХреНрдЯрд░ > рдЖрдк рдмрд╕ рд▓рд┐рдЦ рдирд╣реАрдВ рд╕рдХрддреЗ 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 рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдЬрд╛рд░реА рдХреАрдВ рдФрд░ рдлрд┐рд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рдХреНрдпрд╛ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдЕрдиреНрдп рджреЛрд╖реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ? рд╣рд╛рдБ рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдореИрдВ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЕрдВрд╢ рд▓рд┐рдЦ рд░рд╣рд╛ рдерд╛, рддрдм рджреЗрд░ рд╢рд╛рдо, рдпрд╛ рдмрд▓реНрдХрд┐ рд░рд╛рдд рд╣реЛ рдЪреБрдХреА рдереА, рдФрд░ рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдк рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рдБрдЪрд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдкрджреНрдзрддрд┐ рдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИрдВред
рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!
рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖реА рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдПрдВрдбреНрд░реА рдХрд╛рд░рдкреЛрд╡ред
рд╕реНрд░реЛрдд: www.habr.com