Zaka zoposa ziwiri zadutsa kuchokera pamene cheke chomaliza cha polojekiti ya LLVM pogwiritsa ntchito PVS-Studio analyzer. Tiyeni tiwonetsetse kuti PVS-Studio analyzer akadali chida chotsogola chodziwira zolakwika ndi zovuta zomwe zingachitike. Kuti tichite izi, tiwona ndikupeza zolakwika zatsopano pakumasulidwa kwa LLVM 8.0.0.
Nkhani yoti ilembedwe
Kunena zoona, sindinkafuna kulemba nkhaniyi. Ndizosasangalatsa kulemba za polojekiti yomwe tayang'anapo kangapo (
Nthawi iliyonse mtundu watsopano wa LLVM umatulutsidwa kapena kusinthidwa
Onani, mtundu watsopano wa Clang Static Analyzer waphunzira kupeza zolakwika zatsopano! Zikuwoneka kwa ine kuti kufunika kogwiritsa ntchito PVS-Studio kukucheperachepera. Clang amapeza zolakwika zambiri kuposa kale ndipo amagwirizana ndi luso la PVS-Studio. Mukuganiza bwanji pa izi?
Kwa izi nthawi zonse ndikufuna kuyankha monga:
Ifenso sitikhala opanda ntchito! Tasintha kwambiri luso la PVS-Studio analyzer. Choncho musadandaule, tikupitiriza kutsogolera monga kale.
Tsoka ilo, ili ndi yankho loyipa. Mβmenemo mulibe maumboni. Ndipo ndicho chifukwa chake ndikulemba nkhaniyi tsopano. Chifukwa chake, polojekiti ya LLVM yawunikidwanso ndipo zolakwika zosiyanasiyana zapezeka mmenemo. Tsopano ndikuwonetsa zomwe zidandisangalatsa. Clang Static Analyzer sangapeze zolakwika izi (kapena ndizosautsa kwambiri kutero ndi chithandizo chake). Koma tingathe. Komanso, ndinapeza ndikulemba zolakwika zonsezi usiku umodzi.
Koma kulemba nkhaniyi kunatenga milungu ingapo. Sindinathe kubweretsa zonsezi m'malemba :).
Mwa njira, ngati muli ndi chidwi ndi matekinoloje omwe amagwiritsidwa ntchito mu PVS-Studio analyzer kuti azindikire zolakwika ndi zofooka zomwe zingatheke, ndiye ndikupangira kuti mudziwe bwino izi.
Zatsopano ndi zakale diagnostics
Monga taonera kale, pafupifupi zaka ziwiri zapitazo polojekiti ya LLVM idawunikidwanso, ndipo zolakwika zomwe zidapezeka zidakonzedwa. Tsopano nkhaniyi ipereka mtanda watsopano wa zolakwika. N'chifukwa chiyani nsikidzi zatsopano zinapezeka? Pali zifukwa zitatu zochitira izi:
- Pulojekiti ya LLVM ikusintha, ikusintha ma code akale ndikuwonjezera nambala yatsopano. Mwachibadwa, pali zolakwika zatsopano mu code yosinthidwa ndi yolembedwa. Izi zikuwonetseratu kuti kusanthula static kuyenera kugwiritsidwa ntchito nthawi zonse, osati nthawi zina. Nkhani zathu zikuwonetsa bwino luso la PVS-Studio analyzer, koma izi sizikukhudzana ndi kukonza ma code komanso kuchepetsa mtengo wokonza zolakwika. Gwiritsani ntchito static code analyzer pafupipafupi!
- Tikumaliza ndi kukonza matenda omwe alipo. Chifukwa chake, wosanthula amatha kuzindikira zolakwika zomwe sanazindikire pamasinthidwe am'mbuyomu.
- Kuzindikira kwatsopano kwawonekera mu PVS-Studio yomwe kulibe zaka 2 zapitazo. Ndinaganiza zowawunikira m'gawo lina kuti ndiwonetsere bwino chitukuko cha PVS-Studio.
Zofooka zodziwika ndi matenda omwe analipo zaka 2 zapitazo
Chidutswa N1: Copy-Paste
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
....
}
Chenjezo la PVS-Studio:
Imawunikiridwa kawiri kuti dzina limayamba ndi "avx512.mask.permvar". Mu cheke chachiwiri, mwachiwonekere ankafuna kulemba chinachake, koma anaiwala kukonza malemba omwe anakopera.
Chidutswa cha N2: Typo
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;
....
}
Chenjezo PVS-Studio: V501 Pali mawu ang'onoang'ono ofanana 'CXNameRange_WantQualifier' kumanzere ndi kumanja kwa '|' woyendetsa. CIndex.cpp 7245
Chifukwa cha typo, yemweyo dzina lake nthawi zonse amagwiritsidwa ntchito kawiri CXNameRange_WantQualifier.
Chidutswa N3: Chisokonezo ndi kutsogola kwa ogwiritsa ntchito
int PPCTTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index) {
....
if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian() ? 1 : 0)
return 0;
....
}
Chenjezo la PVS-Studio:
Malingaliro anga, ichi ndi cholakwika chokongola kwambiri. Inde, ndikudziwa kuti ndili ndi malingaliro achilendo okhudza kukongola :).
Tsopano, molingana ndi
(ISD == ISD::EXTRACT_VECTOR_ELT && (Index == ST->isLittleEndian())) ? 1 : 0
Kuchokera kumalingaliro othandiza, chikhalidwe choterocho sichimveka, chifukwa chikhoza kuchepetsedwa kukhala:
(ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian())
Uku ndikulakwitsa koonekeratu. Mwinamwake, iwo ankafuna kufanizitsa 0/1 ndi kusintha Index. Kuti mukonze khodiyi muyenera kuwonjezera mabatani mozungulira wogwiritsa ntchito ternary:
if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == (ST->isLittleEndian() ? 1 : 0))
Mwa njira, woyendetsa ternary ndi woopsa kwambiri ndipo amayambitsa zolakwika zomveka. Samalani nazo kwambiri ndipo musakhale aumbombo ndi mabatani. Ndinayang'ana mutuwu mwatsatanetsatane
Chidutswa cha N4, N5: Cholozera chopanda pake
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;
}
....
}
Chenjezo la PVS-Studio:
Ngati pointer LHS palibe, chenjezo liyenera kuperekedwa. Komabe, m'malo mwake, null pointer yomweyi idzasiyanitsidwa: LHS->getAsString().
Izi ndizochitika zodziwika bwino ngati cholakwika chabisika mwa chowongolera zolakwika, popeza palibe amene amayesa. Osanthula osasunthika amayang'ana ma code onse opezeka, ngakhale atagwiritsidwa ntchito kangati. Ichi ndi chitsanzo chabwino kwambiri cha momwe kusanthula kosasunthika kumayenderana ndi kuyesa kwina ndi njira zotetezera zolakwika.
Cholakwika chofanana ndi chowongolera RHS zololedwa mu code ili pansipa: V522 [CWE-476] Kuchotsedwa kwa null pointer 'RHS' kungachitike. TGParser.cpp 2186
Chidutswa N6: Kugwiritsa ntchito cholozera mutasuntha
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);
}
....
}
Chenjezo la PVS-Studio: V522 [CWE-476] Kuchotsedwa kwa null pointer 'ProgClone' kungachitike. Miscompilation.cpp 601
Pachiyambi chanzeru cholozera ProgClone akusiya kukhala ndi chinthucho:
BD.setNewProgram(std::move(ProgClone));
Ndipotu, tsopano ProgClone ndi point point. Chifukwa chake, kuchotsedwa kwa null pointer kuyenera kuchitika pansipa:
Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first);
Koma, zoona zake, izi sizidzachitika! Chonde dziwani kuti lupu silinakwaniritsidwe.
Kumayambiriro kwa chidebe MiscompiledFunctions kuchotsedwa:
MiscompiledFunctions.clear();
Kenako, kukula kwa chidebe ichi kumagwiritsidwa ntchito ngati lupu:
for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
N'zosavuta kuona kuti kuzungulira sikuyambira. Ndikuganiza kuti ichinso ndi cholakwika ndipo code iyenera kulembedwa mosiyana.
Zikuwoneka kuti takumana ndi zolakwika zodziwika bwino! Cholakwika chimodzi chimabisa china :).
Chidutswa N7: Kugwiritsa ntchito cholozera mutasuntha
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;
}
....
}
Chenjezo la PVS-Studio: V522 [CWE-476] Kuwongolera kwa null pointer 'Mayeso' kungachitike. Miscompilation.cpp 709
Mkhalidwe womwewo kachiwiri. Poyamba, zomwe zili mu chinthucho zimasunthidwa, ndiyeno zimagwiritsidwa ntchito ngati kuti palibe chomwe chachitika. Ndikuwona izi mochulukirachulukira pamapulogalamu apulogalamu pambuyo poti semantics yoyenda idawonekera mu C ++. Ichi ndichifukwa chake ndimakonda chilankhulo cha C ++! Pali njira zambiri zatsopano zowombera mwendo wanu. PVS-Studio analyzer idzakhala ndi ntchito nthawi zonse :).
Chidutswa cha N8: Cholozera chopanda pake
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);
}
Chenjezo la PVS-Studio: V522 [CWE-476] Kuchepetsa kwa null pointer 'Type' kungachitike. PrettyFunctionDumper.cpp 233
Kuphatikiza pa zowongolera zolakwika, ntchito zosindikizira zolakwika nthawi zambiri siziyesedwa. Ife tiri ndi mlandu woterowo pamaso pathu. Ntchitoyi ikuyembekezera wogwiritsa ntchito, yemwe, m'malo mothetsa mavuto ake, adzakakamizika kukonza.
Molondola:
if (Type)
Type->dump(*this);
else
Printer << "<unknown-type>";
Chidutswa cha N9: Cholozera chopanda pake
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());
....
}
Chenjezo la PVS-Studio: V522 [CWE-476] Kuchepetsa kwa null pointer 'Ty' kungachitike. SearchableTableEmitter.cpp 614
Ndikuganiza kuti zonse ndi zomveka ndipo sizifuna kufotokoza.
Chidutswa cha N10: Typo
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;
}
Chenjezo la PVS-Studio:
Palibe chifukwa chodzipangira chosinthika chokha. Mwinamwake iwo ankafuna kulemba:
Identifier->Type = Question->Type;
Chidutswa cha N11: Kusweka kokayikitsa
void SystemZOperand::print(raw_ostream &OS) const {
switch (Kind) {
break;
case KindToken:
OS << "Token:" << getToken();
break;
case KindReg:
OS << "Reg:" << SystemZInstPrinter::getRegisterName(getReg());
break;
....
}
Chenjezo la PVS-Studio:
Pali munthu wokayikira kwambiri poyambira yopuma. Kodi mwaiwala kulemba zina apa?
Chidutswa cha N12: Kuyang'ana cholozera pambuyo pochotsa
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");
....
}
Chenjezo la PVS-Studio:
Cholozera Calee pa chiyambi ndi dereferenced pa nthawi ntchito amatchedwa getTTI.
Ndipo zikuwoneka kuti cholozera ichi chiyenera kufufuzidwa kuti chikhale chofanana nullptr:
if (!Callee || Callee->isDeclaration())
Koma nthawi yathaβ¦
Chidutswa N13 - N...: Kuyang'ana cholozera pambuyo posiyanitsidwa
Zomwe zidakambidwa m'chidutswa cham'mbuyomu sizosiyana. Zikuwonekera apa:
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()) { // <=
....
}
Chenjezo la PVS-Studio: V595 [CWE-476] Cholozera cha 'CalleeFn' chidagwiritsidwa ntchito chisanatsimikizidwe motsutsana ndi nullptr. Yang'anani mizere: 1079, 1081. SimplifyLibCalls.cpp 1079
Ndipo apa:
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()); // <=
....
}
Chenjezo la PVS-Studio: V595 [CWE-476] Cholozera cha 'ND' chinagwiritsidwa ntchito chisanatsimikizidwe motsutsana ndi nullptr. Yang'anani mizere: 532, 534. SemaTemplateInstantiateDecl.cpp 532
Ndipo apa:
- V595 [CWE-476] Cholozera cha 'U' chinagwiritsidwa ntchito chisanatsimikizidwe motsutsana ndi nullptr. Onani mizere: 404, 407. DWARFormValue.cpp 404
- V595 [CWE-476] Cholozera cha 'ND' chinagwiritsidwa ntchito chisanatsimikizidwe motsutsana ndi nullptr. Onani mizere: 2149, 2151. SemaTemplateInstantiate.cpp 2149
Kenako ndinayamba kusafuna kuphunzira machenjezo a nambala V595. Chifukwa chake sindikudziwa ngati pali zolakwika zinanso zofananira kupatula zomwe zalembedwa apa. Mothekera kulipo.
Chidutswa cha N17, N18: Kusintha kokayikitsa
static inline bool processLogicalImmediate(uint64_t Imm, unsigned RegSize,
uint64_t &Encoding) {
....
unsigned Size = RegSize;
....
uint64_t NImms = ~(Size-1) << 1;
....
}
Chenjezo la PVS-Studio:
Sichingakhale cholakwika ndipo code imagwira ntchito monga momwe idafunira. Koma awa ndi malo okayikitsa kwambiri ndipo akuyenera kufufuzidwa.
Tinene kusinthasintha kukula ndi wofanana ndi 16, ndiyeno wolemba code anakonza kuti apeze izo mu variable NDIMI tanthauzo:
1111111111111111111111111111111111111111111111111111111111100000
Komabe, kwenikweni zotsatira zake zidzakhala:
0000000000000000000000000000000011111111111111111111111111100000
Chowonadi ndi chakuti kuwerengera konse kumachitika pogwiritsa ntchito mtundu wa 32-bit wosasainidwa. Ndipo pokhapokha, mtundu wosasainidwa wa 32-bit udzakulitsidwa mpaka alireza. Pankhaniyi, zigawo zofunika kwambiri zidzakhala zero.
Mutha kukonza vutoli motere:
uint64_t NImms = ~static_cast<uint64_t>(Size-1) << 1;
Momwemonso: V629 [CWE-190] Lingalirani kuyang'ana mawu a 'Immr << 6'. Kusintha pang'ono kwa mtengo wa 32-bit ndikukulitsa kotsatira ku mtundu wa 64-bit. AArch64AddressingModes.h 269
Chidutswa N19: Mawu osakira china?
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");
}
....
}
Chenjezo la PVS-Studio:
Palibe cholakwika apa. Kuyambira pamenepo, chipika choyamba if kumaliza ndi kupitiriza, ndiye zilibe kanthu, pali mawu osakira china kapena osati. Mwanjira iliyonse code idzagwira ntchito mofanana. Anaphonyabe china zimapangitsa kuti code ikhale yosadziwika bwino komanso yowopsa. Ngati m'tsogolo kupitiriza ikasowa, code idzayamba kugwira ntchito mosiyana. Malingaliro anga ndi bwino kuwonjezera china.
Chidutswa N20: Mitundu inayi yamtundu womwewo
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;
}
Machenjezo a PVS-Studio:
- V655 [CWE-480] Zingwezo zidalumikizidwa koma sizinagwiritsidwe ntchito. Lingalirani kuyang'ana mawu a 'Result + Name.str()'. Chizindikiro.cpp 32
- V655 [CWE-480] Zingwezo zidalumikizidwa koma sizinagwiritsidwe ntchito. Lingalirani kuyendera mawu a 'Result + "(ObjC Class)" + Name.str()'. Chizindikiro.cpp 35
- V655 [CWE-480] Zingwezo zidalumikizidwa koma sizinagwiritsidwe ntchito. Lingalirani kuyendera mawu a 'Result + "(ObjC Class EH)" + Name.str()'. Chizindikiro.cpp 38
- V655 [CWE-480] Zingwezo zidalumikizidwa koma sizinagwiritsidwe ntchito. Lingalirani kuyendera mawu a 'Result + "(ObjC IVar)" + Name.str()'. Chizindikiro.cpp 41
Mwangozi, + wogwiritsa ntchito amagwiritsidwa ntchito m'malo mwa += woyendetsa. Zotsatira zake zimakhala zopanga zopanda tanthauzo.
Chidutswa N21: Khalidwe losadziwika
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();
}
}
}
Yesani kupeza nokha code yowopsa. Ndipo ichi ndi chithunzi chosokoneza chidwi kuti musayang'ane yankho mwachangu:
Chenjezo la PVS-Studio:
Mzere wavuto:
FeaturesMap[Op] = FeaturesMap.size();
Ngati element Op sichipezeka, ndiye kuti chinthu chatsopano chimapangidwa pamapu ndipo kuchuluka kwa zinthu pamapuwa kumalembedwa pamenepo. Sizikudziwika ngati ntchitoyi idzayitanidwa kukula musanayambe kapena mutatha kuwonjezera chinthu chatsopano.
Chidutswa N22-N24: Ntchito zobwerezedwa
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;
}
....
}
Chenjezo la PVS-Studio:
Ine sindikuganiza kuti pali kulakwitsa kwenikweni apa. Ntchito yobwerezabwereza yosafunikira. Koma apabe cholakwa.
Momwemonso:
- V519 [CWE-563] Zosintha za 'B.NDesc' zimapatsidwa mikhalidwe kawiri motsatizana. Mwina uku ndikulakwitsa. Onani mizere: 1488, 1489. llvm-nm.cpp 1489
- V519 [CWE-563] Zosintha zimaperekedwa kawiri motsatizana. Mwina uku ndikulakwitsa. Chongani mizere: 59, 61. coff2yaml.cpp 61
Chidutswa cha N25-N27: Ntchito zinanso
Tsopano tiyeni tiwone mtundu wosiyana pang'ono wa reassignment.
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;
....
}
Chenjezo la PVS-Studio: V519 [CWE-563] Zosintha za 'Alignment' zimaperekedwa kawiri motsatizana. Mwina uku ndikulakwitsa. Yang'anani mizere: 1158, 1160. LoadStoreVectorizer.cpp 1160
Iyi ndi code yodabwitsa kwambiri yomwe ikuwoneka kuti ili ndi zolakwika zomveka. Poyamba, kusintha mayikidwe mtengo umaperekedwa malinga ndi chikhalidwe. Kenako ntchitoyo imachitikanso, koma tsopano popanda cheke.
Zofananazi zitha kuwoneka apa:
- V519 [CWE-563] Zosintha za 'Effects' zimaperekedwa mikhalidwe kawiri motsatizana. Mwina uku ndikulakwitsa. Onani mizere: 152, 165. WebAssemblyRegStackify.cpp 165
- V519 [CWE-563] Kusintha kwa 'ExpectNoDerefChunk' kumapatsidwa mikhalidwe kawiri motsatizana. Mwina uku ndikulakwitsa. Onani mizere: 4970, 4973. SemaType.cpp 4973
Chidutswa N28: Mkhalidwe weniweni nthawi zonse
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;
}
....
}
Chenjezo la PVS-Studio:
Kuyang'ana sikumveka. Zosintha NextByte nthawi zonse sizilingana ndi mtengo 0x90, yomwe ikutsatira cheke yapitayi. Uwu ndi mtundu wina wa zolakwika zomveka.
Chidutswa N29 - N...: Nthawi zonse zowona/zabodza
Analyzer amapereka machenjezo ambiri kuti chikhalidwe chonsecho (
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;
....
}
Chenjezo la PVS-Studio:
0xE nthawi zonse ndi mtengo wa 14 mu decimal. Kufufuza RegNo == 0xe sizikumveka chifukwa ngati RegNo> 13, ndiye ntchitoyo idzamaliza ntchito yake.
Panali machenjezo ena ambiri okhala ndi ma ID V547 ndi V560, koma monga ndi
Ndikupatsani chitsanzo cha chifukwa chake kuphunzira zoyambitsa izi ndizotopetsa. Wosanthula ndi wolondola kwambiri popereka chenjezo la code yotsatirayi. Koma uku sikulakwa.
bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons,
tok::TokenKind ClosingBraceKind) {
bool HasError = false;
....
HasError = true;
if (!ContinueOnSemicolons)
return !HasError;
....
}
PVS-Studio Chenjezo: V547 [CWE-570] Mawu akuti '!HasError' amakhala abodza nthawi zonse. UnwrappedLineParser.cpp 1635
Chidutswa N30: ββKubwerera kokayikitsa
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();
}
....
}
Chenjezo la PVS-Studio:
Izi mwina ndi zolakwika kapena njira inayake yomwe cholinga chake ndi kufotokozera china chake kwa opanga mapulogalamu omwe amawerenga ma code. Mapangidwe awa samandifotokozera chilichonse ndipo amawoneka okayikitsa kwambiri. Ndibwino kuti musalembe monga choncho :).
Wotopa? Ndiye ndi nthawi yopangira tiyi kapena khofi.
Zowonongeka zodziwika ndi matenda atsopano
Ndikuganiza kuti ma activation 30 a matenda akale ndiwokwanira. Tiyeni tsopano tiwone zinthu zosangalatsa zomwe zingapezeke ndi matenda atsopano omwe adawonekera mu analyzer pambuyo pake
Chidutswa N31: Khodi yosafikirika
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();
}
Chenjezo la PVS-Studio:
Monga mukuonera, nthambi zonse za woyendetsa if imathera ndi kuyimbira kwa woyendetsa obwereza. Choncho, chidebe CtorDtorsByPriority sichidzayeretsedwa konse.
Chidutswa N32: Khodi yosafikirika
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;
}
Chenjezo la PVS-Studio: V779 [CWE-561] Khodi yosafikirika yapezeka. Ndizotheka kuti cholakwika chilipo. LLParser.cpp 835
Chidwi mkhalidwe. Tiyeni tione malowa kaye:
return ParseTypeIdEntry(SummaryID);
break;
Poyamba, zikuwoneka kuti palibe cholakwika apa. Zikuwoneka ngati woyendetsa yopuma pali chowonjezera apa, ndipo mutha kungochichotsa. Komabe, si zonse zosavuta.
The analyzer amapereka chenjezo pa mizere:
Lex.setIgnoreColonInIdentifiers(false);
return false;
Ndipo ndithudi, code iyi ndi yosafikirika. Milandu yonse mu magetsi kumaliza ndi kuyimba kuchokera kwa wogwiritsa ntchito obwereza. Ndipo tsopano wopanda nzeru yekha yopuma sizikuwoneka zopanda vuto! Mwina imodzi mwa nthambi iyenera kutha ndi yopuma, osati kuyatsa obwereza?
Chidutswa N33: Kukonzanso mwachisawawa kwa ma bits apamwamba
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);
....
}
Chenjezo la PVS-Studio:
Chonde dziwani kuti ntchito getStubAlignment mtundu wobwerera osasankhidwa. Tiyeni tiwerengere mtengo wa mawuwo, poganiza kuti ntchitoyi imabweza mtengo 8:
~(getStubAlignment() - 1)
~(8u-1)
0xFFFFFF8u
Tsopano zindikirani kuti variable DataSize ili ndi mtundu wosasainidwa wa 64-bit. Zikuwonekeratu kuti pochita opareshoni ya DataSize & 0xFFFFFFF8u, ma bits onse makumi atatu ndi awiri apamwamba adzasinthidwa kukhala zero. Mwachidziwikire, izi sizomwe wopanga mapulogalamu amafuna. Ndikukayikira kuti amafuna kuwerengera: DataSize & 0xFFFFFFFFFFFFFFF8u.
Kuti mukonze cholakwikacho, muyenera kulemba izi:
DataSize &= ~(static_cast<uint64_t>(getStubAlignment()) - 1);
Kapena kotero:
DataSize &= ~(getStubAlignment() - 1ULL);
Chidutswa cha N34: Cholephereka cha mtundu waposachedwa
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);
....
}
Chenjezo la PVS-Studio:
Kutulutsa kwamtundu wowonekera kumagwiritsidwa ntchito kupewa kusefukira pakuchulukitsa mitundu Int. Komabe, kuponyedwa kowonekera apa sikuteteza ku kusefukira. Choyamba, zosinthika zidzachulukitsidwa, ndipo pokhapokha zotsatira za 32-bit za kuchulukitsa zidzakulitsidwa kukhala mtundu.
Chidutswa cha N35: Cholephereka Copy-Paste
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;
}
....
}
Kuzindikira kwatsopano kosangalatsa kumeneku kumazindikiritsa nthawi yomwe chidutswa cha code chidakopedwa ndipo mayina ena momwemo ayamba kusinthidwa, koma pamalo amodzi sanakonze.
Chonde dziwani kuti mu chipika chachiwiri adasintha Op0 pa Op1. Koma pamalo amodzi sanakonze. Mothekera kwambiri zikanayenera kulembedwa motere:
if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) {
I.setOperand(1, ConstantFP::getNullValue(Op1->getType()));
return &I;
}
Chidutswa cha N36: Chisokonezo Chosinthika
struct Status {
unsigned Mask;
unsigned Mode;
Status() : Mask(0), Mode(0){};
Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
Mode &= Mask;
};
....
};
Chenjezo la PVS-Studio:
Ndizowopsa kupereka mikangano yantchito mayina omwewo monga mamembala amkalasi. Ndikosavuta kusokonezeka. Ife tiri ndi mlandu woterowo pamaso pathu. Mawu awa alibe tanthauzo:
Mode &= Mask;
Mkangano wa ntchito umasintha. Ndizomwezo. Mtsutsowu sugwiritsidwanso ntchito. Mwinamwake mukanalemba motere:
Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
this->Mode &= Mask;
};
Chidutswa cha N37: Chisokonezo Chosinthika
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;
}
Chenjezo la PVS-Studio: V1001 [CWE-563] Kusintha kwa 'Kukula' kumaperekedwa koma sikumagwiritsidwa ntchito kumapeto kwa ntchitoyi. Object.cpp 424
Mkhalidwewo ndi wofanana ndi wamβmbuyomo. Ayenera kulembedwa kuti:
this->Size += this->EntrySize;
Chidutswa N38-N47: Anayiwala kuyang'ana ndondomekoyi
M'mbuyomu, tidawona zitsanzo zoyambitsa matenda
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()); // <=
....
}
Chenjezo la PVS-Studio: V1004 [CWE-476] Cholozera cha 'Ptr' chinagwiritsidwa ntchito mosatetezeka chikatsimikiziridwa motsutsana ndi nullptr. Yang'anani mizere: 729, 738. TargetTransformInfoImpl.h 738
Zosiyanasiyana Ptr akhoza kukhala ofanana nullptr, monga umboni ndi cheke:
if (Ptr != nullptr)
Komabe, pansipa pointer iyi imachotsedwa popanda kuwunika koyambirira:
auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType());
Tiyeni tikambirane nkhani ina yofanana ndi imeneyi.
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(); // <=
....
}
Chenjezo la PVS-Studio: V1004 [CWE-476] Cholozera cha 'FD' chinagwiritsidwa ntchito mosatetezeka chikatsimikiziridwa motsutsana ndi nullptr. Onani mizere: 3228, 3231. CGDebugInfo.cpp 3231
Samalani chizindikirocho FD. Ndikukhulupirira kuti vutoli likuwoneka bwino ndipo palibe kufotokozera kwapadera komwe kumafunikira.
Komanso:
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()); // <=
....
}
Chenjezo la PVS-Studio: V1004 [CWE-476] Cholozera cha 'PtrTy' chinagwiritsidwa ntchito mosatetezeka chikatsimikiziridwa motsutsana ndi nullptr. Yang'anani mizere: 960, 965. InterleavedLoadCombinePass.cpp 965
Kodi mungadziteteze bwanji ku zolakwika zoterezi? Khalani tcheru kwambiri pa Code-Review ndikugwiritsa ntchito PVS-Studio static analyzer kuti muwone khodi yanu pafupipafupi.
Palibe chifukwa chotchulira zidutswa zina zamakhodi ndi zolakwika zamtunduwu. Ndingosiya mndandanda wa machenjezo m'nkhaniyi:
- V1004 [CWE-476] Cholozera cha 'Expr' chinagwiritsidwa ntchito mosatetezeka chikatsimikiziridwa motsutsana ndi nullptr. Yang'anani mizere: 1049, 1078. DebugInfoMetadata.cpp 1078
- V1004 [CWE-476] Cholozera cha 'PI' chinagwiritsidwa ntchito mosatetezeka chikatsimikiziridwa motsutsana ndi nullptr. Onani mizere: 733, 753. LegacyPassManager.cpp 753
- V1004 [CWE-476] Cholozera cha 'StatepointCall' chinagwiritsidwa ntchito mosatetezeka chikatsimikiziridwa motsutsana ndi nullptr. Onani mizere: 4371, 4379. Verifier.cpp 4379
- V1004 [CWE-476] Cholozera cha 'RV' chinagwiritsidwa ntchito mosatetezeka chikatsimikiziridwa motsutsana ndi nullptr. Onani mizere: 2263, 2268. TGParser.cpp 2268
- V1004 [CWE-476] Cholozera cha 'CalleeFn' chinagwiritsidwa ntchito mosatetezeka chikatsimikiziridwa motsutsana ndi nullptr. Yang'anani mizere: 1081, 1096. SimplifyLibCalls.cpp 1096
- V1004 [CWE-476] Cholozera cha 'TC' chinagwiritsidwa ntchito mosatetezeka chikatsimikiziridwa motsutsana ndi nullptr. Onani mizere: 1819, 1824. Driver.cpp 1824
Fragment N48-N60: Osati yovuta, koma cholakwika (kutheka kukumbukira kutayikira)
std::unique_ptr<IRMutator> createISelMutator() {
....
std::vector<std::unique_ptr<IRMutationStrategy>> Strategies;
Strategies.emplace_back(
new InjectorIRStrategy(InjectorIRStrategy::getDefaultOps()));
....
}
Chenjezo la PVS-Studio:
Kuonjezera chinthu kumapeto kwa chidebe ngati std::vector > simungangolemba xxx.push_back(X yatsopano), popeza palibe kutembenuka kwathunthu kuchokera X* Π² std::wapadera_ptr.
Njira yodziwika bwino ndiyo kulemba xxx.emplace_back(X yatsopano)popeza imaphatikiza: njira malo_kubwerera amamanga chinthu molunjika kuchokera ku mfundo zake motero amatha kugwiritsa ntchito omanga momveka bwino.
Sizotetezeka. Ngati vekitala yadzaza, ndiye kuti kukumbukira kumaperekedwanso. Ntchito yobwezeretsanso kukumbukira ikhoza kulephera, kupangitsa kuti chosiyana chitayike std::bad_alloc. Pankhaniyi, cholozera chidzatayika ndipo chinthu chopangidwa sichidzachotsedwa.
Yankho lotetezeka ndikulenga wapadera_ptryomwe idzakhala nayo cholozera vekitala isanayese kuyikanso kukumbukira:
xxx.push_back(std::unique_ptr<X>(new X))
Kuyambira C++14, mutha kugwiritsa ntchito 'std::make_unique':
xxx.push_back(std::make_unique<X>())
Chilema chamtunduwu sichofunikira kwa LLVM. Ngati kukumbukira sikungagawidwe, wopangayo amangoyimitsa. Komabe, kwa ntchito ndi yaitali
Chifukwa chake, ngakhale kachidindo kameneka sikakuwopseza LLVM, ndapeza kuti ndizothandiza kuyankhula za cholakwika ichi komanso kuti PVS-Studio analyzer adaphunzira kuzindikira.
Machenjezo ena amtunduwu:
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Passes' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. PassManager.h 546
- V1023 [CWE-460] Cholozera chopanda mwini chimawonjezedwa ku chidebe cha 'AAs' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. AliasAnalysis.h 324
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Entries' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. DWARFDebugFrame.cpp 519
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'AllEdges' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. CFGMST.h 268
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'VMaps' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. SimpleLoopUnswitch.cpp 2012
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Records' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. FDRLogBuilder.h 30
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'PendingSubmodules' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. ModuleMap.cpp 810
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Objects' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. DebugMap.cpp 88
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Strategies' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-isel-fuzzer.cpp 60
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Modifiers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-stress.cpp 685
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Modifiers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-stress.cpp 686
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Modifiers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-stress.cpp 688
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Modifiers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-stress.cpp 689
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Modifiers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-stress.cpp 690
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Modifiers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-stress.cpp 691
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Modifiers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-stress.cpp 692
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Modifiers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-stress.cpp 693
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Modifiers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. llvm-stress.cpp 694
- V1023 [CWE-460] Cholozera chopanda mwini chimawonjezedwa ku chidebe cha 'Operands' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. GlobalISelEmitter.cpp 1911
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Stash' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. GlobalISelEmitter.cpp 2100
- V1023 [CWE-460] Cholozera chopanda mwiniwake chimawonjezedwa ku chidebe cha 'Matchers' ndi njira ya 'emplace_back'. Kuwonongeka kwa kukumbukira kudzachitika pokhapokha. GlobalISelEmitter.cpp 2702
Pomaliza
Ndinapereka machenjezo 60 onse ndipo ndinasiya. Kodi pali zolakwika zina zomwe PVS-Studio analyzer imazindikira mu LLVM? Inde, ndatero. Komabe, pamene ndinali kulemba zidutswa za kachidindo ka nkhaniyo, kunali madzulo, kapena kuti usiku, ndipo ndinaganiza kuti inali nthawi yoti nditchule tsiku.
Ndikukhulupirira kuti mwapeza zosangalatsa ndipo mukufuna kuyesa PVS-Studio analyzer.
Mutha kutsitsa analyzer ndikupeza kiyi ya minesweeper pa
Chofunika kwambiri, gwiritsani ntchito static analysis nthawi zonse. Macheke kamodzi, zomwe timachita kuti tidziwitse njira yowunikira komanso PVS-Studio sizochitika zachilendo.
Zabwino zonse pakuwongolera mtundu komanso kudalirika kwa khodi yanu!
Ngati mukufuna kugawana nkhaniyi ndi omvera olankhula Chingerezi, chonde gwiritsani ntchito ulalo womasulira: Andrey Karpov.
Source: www.habr.com