рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдУрдкрди рдиреЗрдЯрд╡рд░реНрдХ (TON) рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореИрд╕реЗрдВрдЬрд░ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдордВрдЪ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рд╣рдо рдЗрд╕рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд▓реЙрдиреНрдЪ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред
рдкрд░рд┐рдЪрдп
рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдУрдкрди рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЧреНрд░рд╛рдо рдХреНрд░рд┐рдкреНрдЯреЛрдХреНрдпреВрд░реЗрдВрд╕реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдкрдиреА рднреБрдЧрддрд╛рди рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдЯреЙрди рд╡реАрдПрдо рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рднреА рд╣реИ - рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рдВрджреЗрд╢ рд╕реЗрд╡рд╛ рд╣реИ - TON рд╕рдВрджреЗрд╢ред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗрдВрд╕рд░рд╢рд┐рдк рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдирд╛ рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ CMake рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рдереАрдВред рдХреЛрдб C ++ 14 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ 210 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ:
рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЫреЛрдЯреА рдФрд░ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рдереАрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдзреНрдпрд╛рди рдФрд░ рд╕реБрдзрд╛рд░ рдХреЗ рдпреЛрдЧреНрдп рд╣реИрдВред
рд░рд┐рдЯрд░реНрди рдХреЛрдб
static int process_workchain_shard_hashes(....) { .... if (f == 1) { if ((shard.shard & 1) || cs.size_ext() != 0x20000) { return false;
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА:
V601 'рдЧрд▓рдд' рдорд╛рди рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред mc-config.cpp 884
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд▓реМрдЯреЗ рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛ред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рд╣реА / рдЧрд▓рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдо рд╕реЗ рдХрдо, рдпрд╣ -1 рдХреА рд╡рд╛рдкрд╕реА рд╣реИ рдЬрд┐рд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЪрд░ рдХреА рддреБрд▓рдирд╛ рдЦреБрдж рд╕реЗ рдХрд░реЗрдВ
class LastBlock : public td::actor::Actor { .... ton::ZeroStateIdExt zero_state_id_; .... }; void LastBlock::update_zero_state(ton::ZeroStateIdExt zero_state_id) { .... if (zero_state_id_ == zero_state_id_) { return; } LOG(FATAL) << ....; }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА:
V501 рдмрд╛рдИрдВ рдФрд░ '==' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИрдВ: zero_state_id_ == zero_state_id_ LastBlock.cpp 66
TON рдХреЛрдб рдПрдХ рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдХреНрд╖рд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд░реНрддрдиреА, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рдХреЗ рд╕рдорд╛рди рдирд╛рдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рднреНрд░рдорд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рд╡рд╣ рдерд╛ рдЬреЛ рддреБрд▓рдирд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдореИрдХреНрд░реЛ
namespace td { namespace detail { [[noreturn]] void process_check_error(const char *message, const char *file, int line); }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА:
V581 рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рдд 'if' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХреА рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╕рдорд╛рди рд╣реИрдВред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 80, 84. blockdb.cpp 84
CHECK рдореИрдХреНрд░реЛ рдХреЗ рдЕрдВрджрд░ рдХреА рд╢рд░реНрдд рдХрднреА рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрджрд░ рдереА
рдЕрдЧрд░ ред
рдПрдХ рдФрд░ рдЧрд▓рддреА рд╣реИ:
CHECK рдореИрдХреНрд░реЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдХреА рд╕реНрдерд┐рддрд┐
{0} рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдкрдЯреА рд╣реИред рдпрд╣ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
рд╣реИ ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдХреЛрдб рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:
if (X) CHECK(condition) else foo();
рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдорд╛рдиреНрдпрддрд╛ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░реЗрдВ
class Slice { .... char operator[](size_t i) const; .... }; td::Result<int> CellSerializationInfo::get_bits(td::Slice cell) const { .... int last = cell[data_offset + data_len - 1]; if (!last || last == 0x80) {
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ
рдЪреЗрддрд╛рд╡рдиреА :
V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ: рдЕрдВрддрд┐рдо == 0x80ред boc.cpp 78
рд╣рд╛рд▓рдд рдХрд╛ рджреВрд╕рд░рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрднреА рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯрд╛рдЗрдк
рдЪрд╛рд░ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред рдЬрдм рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗ рдорд╛рди рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХреЗрдд рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЪрд░ рдХреЗ рдорд╛рди рдХреА рд╕реАрдорд╛ рдЕрднреА рднреА рд╕реАрдорд╛ [-128, 127] рдореЗрдВ рд░рд╣реЗрдЧреА, рдФрд░ [0, 256] рдореЗрдВ рдирд╣реАрдВред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐
рдЪрд╛рд░реНрдЯ рдкреНрд░рдХрд╛рд░ рдкрд░ рд╣рдореЗрд╢рд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ - рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рддреЛ рдпрд╣ рд╕реНрдерд┐рддрд┐ рдЕрднреА рднреА рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдкреВрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдХреЛрдбрд┐рдВрдЧ рдХреА рдЬрд╛рддреА рд╣реИред
рдирд┐рдЧреЗрдЯрд┐рд╡ рдмрд┐рдЯ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯ
template <class Tr> bool AnyIntView<Tr>::export_bits_any(....) const { .... int mask = (-0x100 >> offs) & 0xff; .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА:
V610 рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ред рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░ '>>' рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб '-0x100' рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИред bigint.hpp 1925
рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдПрдХ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ: рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдХреЗрдд рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ - рдХреНрдпрд╛ рдпрд╣ рд╢реВрдиреНрдп рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдпрд╛ рднрд░ рдЬрд╛рдПрдЧрд╛?
рдирдП рдХреЗ рдмрд╛рдж рд╢реВрдиреНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
CellBuilder* CellBuilder::make_copy() const { CellBuilder* c = new CellBuilder(); if (!c) {
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА:
V668 'c' рдкреЙрдЗрдВрдЯрд░ рдХреЛ null рдХреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХреЛрдИ рд╕рдордЭрджрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 'new' рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЧрдИ рдереАред рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред CellBuilder.cpp 531
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдЕрд╕рдлрд▓ рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рдкреБрдирдГ рдЬрд╛рдВрдЪ рдХрд░реЗрдВ
int main(int argc, char* const argv[]) { .... if (!no_env) { const char* path = std::getenv("FIFTPATH"); if (path) { parse_include_path_set(path ? path : "/usr/lib/fift", source_include_path); } } .... }
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА:
V547 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдкрде' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реИред fift-main.cpp 136
рдпрд╣ рдХреЛрдб рдЖрдВрддрд░рд┐рдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдмрд╣реБрдд рд╣реА рдХрдорддрд░ рд╣реИ: рдЗрд╕рдореЗрдВ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрдерд┐рддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ
рдЕрдЧрд░ ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд╡реЗ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреВрд▓ рдЧрдП рдЬрдм рд╡реЗ рдорд╛рдирдХ рдкрдереЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ (рдХрдо рд╕реЗ рдХрдо рдорджрдж рд╕рдВрджреЗрд╢ рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛)ред
рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░
bool Op::set_var_info_except(const VarDescrList& new_var_info, const std::vector<var_idx_t>& var_list) { if (!var_list.size()) { return set_var_info(new_var_info); } VarDescrList tmp_info{new_var_info}; tmp_info -= var_list; return set_var_info(new_var_info);
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА:
V1001 'tmp_info' рдЪрд░ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдореЗрдВ, рдпрд╣
tmp_info рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ рдХреЗ рд╕рд╛рде:
bool Op::set_var_info_except(VarDescrList&& new_var_info, const std::vector<var_idx_t>& var_list) { if (var_list.size()) { new_var_info -= var_list;
рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛?
int compute_compare(const VarDescr& x, const VarDescr& y, int mode) { switch (mode) { case 1:
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА:
V1037 рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗрд╕-рд╢рд╛рдЦрд╛рдПрдБ рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 639, 645 рдмрд┐рд▓реНрдЯред 639
рдЪреМрдХрд╕ рдкрд╛рдардХреЛрдВ рдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рдХреЛрдб рдореЗрдВ <= рдСрдкрд░реЗрд╢рди рдЧрд╛рдпрдм рд╣реИред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдВрдЦреНрдпрд╛ 6 рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ:
AsmOp compile_cmp_int(std::vector<VarDescr>& res, std::vector<VarDescr>& args, int mode) { .... if (x.is_int_const() && y.is_int_const()) { r.set_const(compute_compare(x.int_const, y.int_const, mode)); x.unused(); y.unused(); return push_const(r.int_const); } int v = compute_compare(x, y, mode); .... } void define_builtins() { .... define_builtin_func("_==_", arith_bin_op, std::bind(compile_cmp_int, _1, _2, 2)); define_builtin_func("_!=_", arith_bin_op, std::bind(compile_cmp_int, _1, _2, 5)); define_builtin_func("_<_", arith_bin_op, std::bind(compile_cmp_int, _1, _2, 4)); define_builtin_func("_>_", arith_bin_op, std::bind(compile_cmp_int, _1, _2, 1)); define_builtin_func("_<=_", arith_bin_op, std::bind(compile_cmp_int, _1, _2, 6)); define_builtin_func("_>=_", arith_bin_op, std::bind(compile_cmp_int, _1, _2, 3)); define_builtin_func("_<=>_", arith_bin_op, std::bind(compile_cmp_int, _1, _2, 7)); .... }
рдбрд┐рдлрд╛рдЗрди_рдмреБрд▓реЗрдЯрд┐рди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ,
рдЖрдк 6
= рдХреЗ рдмрд░рд╛рдмрд░ рдореЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде
compile_cmp_int рдХреЙрд▓
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЦреИрд░, рджреВрд╕рд░рд╛ рд╡рд╣реА
рд╕рдВрдХрд▓рди_ cmp_int рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдирд╛рдо рд╣реИрдВ:
AsmOp compile_cmp_int(std::vector<VarDescr>& res, std::vector<VarDescr>& args, int mode) { .... static const char* cmp_names[] = {"", "GREATER", "EQUAL", "GEQ", "LESS", "NEQ", "LEQ", "CMP"}; .... return exec_op(cmp_names[mode], 2); }
рдЗрдВрдбреЗрдХреНрд╕ 6 рдХреЗ рддрд╣рдд
LEQ рд╢рдмреНрдж рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ред
рддреБрд▓рдирд╛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ
рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдФрд░ рд╕реБрдВрджрд░ рдмрдЧред
рдЕрдиреНрдп
#define VM_LOG_IMPL(st, mask) \ LOG_IMPL_FULL(get_log_interface(st), ...., VERBOSITY_NAME(DEBUG), \ (get_log_mask(st) & mask) != 0, "")
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА:
V1003 рдореИрдХреНрд░реЛ 'VM_LOG_IMPL' рдПрдХ рдЦрддрд░рдирд╛рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ 'рдорд╛рд╕реНрдХ' рдХреЛ рдХреЛрд╖реНрдардХреЛрдВ рд╕реЗ рдШрд┐рд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред log.h 23
рд╕реНрдереВрд▓
VM_LOG_IMPL рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЗрд╕рдХрд╛ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛрд╖реНрдардХреЛрдВ рд╕реЗ рдШрд┐рд░рд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдПрдХ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐
рдореБрдЦреМрдЯрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдерд┐рд░ рд╣реИ, рддреЛ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рд╣рдореЗрдВ рдореИрдХреНрд░реЛ рдореЗрдВ рдХреБрдЫ рдФрд░ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
TON рдХреЛрдб рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдФрд░ рдЗрд╕рдореЗрдВ рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВред рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЯреАрдо рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдХреЛ рд╢реНрд░рджреНрдзрд╛рдВрдЬрд▓рд┐ рджреЗрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рднреА рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ рдЦрддрд░рдирд╛рдХ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдХ рдмрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ: "
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрдореНрдмреЗрдб рдХрд░реЗрдВ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрдЧ рдХреА рддрд▓рд╛рд╢ рди рдХрд░реЗрдВ ред"

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