Ihe karịrị afọ abụọ agafeela kemgbe nyocha koodu ikpeazụ nke ọrụ LLVM site na iji nyocha PVS-Studio anyị. Ka anyị jide n'aka na onye nyocha PVS-Studio ka bụ ihe na-eduga n'ịchọpụta njehie na adịghị ike. Iji mee nke a, anyị ga-elele wee chọta mperi ọhụrụ na ntọhapụ LLVM 8.0.0.
Edemede a ga-ede
N'ikwu eziokwu, Achọghị m ide akụkọ a. Ọ bụghị ihe na-adọrọ mmasị ide banyere ọrụ anyị nyochalarị ọtụtụ ugboro (
Oge ọ bụla ewepụtara ma ọ bụ emelite ụdị LLVM ọhụrụ
Lee, ụdị Clang Static Analyzer ọhụrụ amụtala ịchọta mperi ọhụrụ! Ọ dị m ka mkpa iji PVS-Studio na-ebelata. Clang na-achọta ọtụtụ njehie karịa ka ọ dị na mbụ wee nweta ike nke PVS-Studio. Kedu ihe ị chere maka nke a?
Maka nke a, achọrọ m ịza ihe dịka:
Anyị anaghịkwa anọdụ ala nkịtị! Anyị emeziwanyela ike nke onye nyocha PVS-Studio. Ya mere, echegbula, anyị na-aga n'ihu na-edu dị ka ọ dị na mbụ.
N'ụzọ dị mwute, nke a bụ azịza ọjọọ. Enweghị ihe akaebe na ya. Ọ bụ ya mere m ji dee akụkọ a ugbu a. Yabụ, elelela ọrụ LLVM ọzọ wee hụ njehie dị iche iche na ya. Aga m egosi ugbu a ndị na-amasị m. Clang Static Analyzer enweghị ike ịchọta njehie ndị a (ma ọ bụ na ọ naghị adị mfe iji enyemaka ya mee ya). Ma anyị nwere ike. Ọzọkwa, ahụrụ m ma detuo njehie ndị a niile n'otu mgbede.
Ma ide akụkọ ahụ were ọtụtụ izu. Enweghị m ike iweta onwe m itinye ihe a niile na ederede :).
Site n'ụzọ, ọ bụrụ na ị nwere mmasị na teknụzụ ndị a na-eji na PVS-Studio analyzer iji chọpụta njehie na adịghị ike, mgbe ahụ, m na-atụ aro ka ị mara nke a.
Nchọpụta nchọpụta ọhụrụ na nke ochie
Dị ka e kwuworo, ihe dị ka afọ abụọ gara aga, a na-enyocha ọrụ LLVM ọzọ, ma mezie njehie ndị ahụ. Ugbu a isiokwu a ga-eweta ogbe njehie ọhụrụ. Kedu ihe kpatara achọtara ahụhụ ọhụrụ? Enwere ihe atọ kpatara nke a:
- Ọrụ LLVM na-agbanwe, na-agbanwe koodu ochie yana ịgbakwunye koodu ọhụrụ. Dị ka o kwesịrị ịdị, enwere mperi ọhụrụ na koodu emegharịrị na nke edere. Nke a na-egosi n'ụzọ doro anya na ekwesịrị iji nyocha static mee ihe mgbe niile, ọ bụghịkwa mgbe ụfọdụ. Akụkọ anyị na-egosi nke ọma ike nke PVS-Studio analyzer, ma nke a enweghị ihe jikọrọ ya na imeziwanye koodu àgwà na ibelata ọnụ ahịa nke idozi njehie. Jiri ihe nyocha koodu static mgbe niile!
- Anyị na-emecha ma na-emeziwanye nchọpụta dị ugbu a. Ya mere, onye nyocha nwere ike ịchọpụta njehie ọ na-ahụghị n'oge nyocha gara aga.
- Nchọpụta ọhụụ apụtala na PVS-Studio nke na-adịbeghị afọ 2 gara aga. Ekpebiri m ime ka ha pụta ìhè na ngalaba dị iche iji gosi n'ụzọ doro anya mmepe nke PVS-Studio.
Achọpụtara ntụpọ site na nchọpụta nchọpụta dị adị afọ 2 gara aga
Iberibe 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
....
}
Ịdọ aka ná ntị PVS-Studio:
A na-enyocha ya ugboro abụọ na aha ahụ na-amalite site na mkpụrụedemede "avx512.mask.permvar." Na nlele nke abụọ, o doro anya na ha chọrọ ide ihe ọzọ, mana chefuru imezi ederede e depụtaghachiri.
Iberibe 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;
....
}
Ịdọ aka ná ntị PVS-Studio: V501 E nwere otu okwu sub-nkwupụta 'CXNameRange_WantQualifier' n'aka ekpe na aka nri nke '|' onye ọrụ. Cindex.cpp 7245
N'ihi typo, a na-eji otu oge aha ya bụ ugboro abụọ CXNameRange_WantQualifier.
Iberibe N3: Ọgba aghara na ụzọ onye ọrụ
int PPCTTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index) {
....
if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian() ? 1 : 0)
return 0;
....
}
Ịdọ aka ná ntị PVS-Studio:
N'uche nke m, nke a bụ mmejọ mara mma nke ukwuu. Ee, ama m na m nwere echiche dị iche iche gbasara ịma mma :).
Ugbu a, dị ka
(ISD == ISD::EXTRACT_VECTOR_ELT && (Index == ST->isLittleEndian())) ? 1 : 0
Site n'echiche bara uru, ọnọdụ dị otú ahụ enweghị isi, ebe ọ bụ na enwere ike belata ya:
(ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian())
Nke a bụ ndudue doro anya. O yikarịrị, ha chọrọ iji 0/1 tụnyere mgbanwe Index. Iji dozie koodu ahụ, ị ga-agbakwunye akara akara n'akụkụ onye ọrụ ternary:
if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == (ST->isLittleEndian() ? 1 : 0))
Site n'ụzọ, onye ọrụ ternary dị oke egwu ma kpasuo njehie ezi uche dị na ya. Kpachara anya nke ọma na ya, enwekwala anyaukwu n'ime akara aka. M lere isiokwu a anya n'ụzọ zuru ezu
Iberibe N4, N5: Null pointer
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;
}
....
}
Ịdọ aka ná ntị PVS-Studio:
Ọ bụrụ na pointer LHS ọ bụ efu, a ga-enye ịdọ aka ná ntị. Otú ọ dị, kama nke ahụ, a ga-ewepụ otu ihe ngosi efu a: LHS->getAsString().
Nke a bụ ọnọdụ a na-ahụkarị mgbe ezoro ezo njehie na onye na-ahụ maka mperi, ebe ọ nweghị onye na-anwale ha. Ndị nyocha static na-enyocha koodu niile enwere ike iru, n'agbanyeghị ugboro ole ejiri ya. Nke a bụ ezigbo ihe atụ nke otu nyocha static si akwado usoro nyocha na njehie ọzọ.
Njehie njikwa nrụtụ aka yiri ya RHS ekwenyere na koodu dị n'okpuru: V522 [CWE-476] Dereferencing nke null pointer 'RHS' nwere ike ime. TGParser.cpp 2186
Iberibe N6: Iji ihe nrịbama emechaa
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);
}
....
}
Ịdọ aka ná ntị PVS-Studio: V522 [CWE-476] Mkpesa nke ihe ngosi efu 'ProgClone' nwere ike ime. Nkọwapụta.cpp 601
Na mbido smart pointer ProgClone kwụsịrị inwe ihe ahụ:
BD.setNewProgram(std::move(ProgClone));
N'ezie, ugbu a ProgClone bụ ihe efu efu. Ya mere, ntughari null pointer kwesịrị ime n'okpuru:
Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first);
Ma, n'eziokwu, nke a agaghị eme! Rịba ama na emeghị loop ahụ n'ezie.
Na mmalite nke akpa Ọrụ ezighi ezi kpochara:
MiscompiledFunctions.clear();
Na-esote, a na-eji nha nke akpa a na ọnọdụ akaghị:
for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
Ọ dị mfe ịhụ na loop anaghị ebido. Echere m na nke a bụkwa ahụhụ ma ekwesịrị ide koodu ahụ n'ụzọ dị iche.
Ọ dị ka anyị ahụla ụdị njehie ahụ a ma ama! Otu mmejọ na-ekpuchi ọzọ :).
Iberibe N7: Iji ihe nrịbama emechaa
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;
}
....
}
Ịdọ aka ná ntị PVS-Studio: V522 [CWE-476] Mkpesa nke null pointer 'Nnwale' nwere ike ime. Ihe nchikota.cpp 709
Otu ọnọdụ ọzọ. Na mbụ, a na-emegharị ihe dị n'ime ihe ahụ, mgbe ahụ, a na-eji ya eme ihe dị ka à ga-asị na ọ dịghị ihe merenụ. M na-ahụ ọnọdụ a ugboro ugboro na koodu mmemme mgbe semantics mmegharị pụtara na C ++. Nke a mere m ji hụ asụsụ C++ n'anya! Enwere ụzọ ọhụrụ ị ga-esi agbapụ ụkwụ gị. Onye nyocha PVS-Studio ga-enwe ọrụ mgbe niile :).
Iberibe N8: Null pointer
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);
}
Ịdọ aka ná ntị PVS-Studio: V522 [CWE-476] Mkpesa nke ihe ngosi 'Ụdị' nwere ike ime. PrettyFunctionDumper.cpp 233
Na mgbakwunye na ndị na-ahụ maka mperi, anaghị anwale ọrụ mbipụta nbibi. Anyị nwere ụdị ikpe a n'ihu anyị. Ọrụ ahụ na-echere onye ọrụ, onye, kama idozi nsogbu ya, a ga-amanye idozi ya.
N'ụzọ ziri ezi:
if (Type)
Type->dump(*this);
else
Printer << "<unknown-type>";
Iberibe N9: Null pointer
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());
....
}
Ịdọ aka ná ntị PVS-Studio: V522 [CWE-476] Mkpesa nke ihe ngosi efu 'Ty' nwere ike ime. AchọgharịTableEmitter.cpp 614
Echere m na ihe niile doro anya na ọ dịghị achọ nkọwa.
Iberibe 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;
}
Ịdọ aka ná ntị PVS-Studio:
O nweghị uru inye onwe ya mgbanwe. O yikarịrị ka ha chọrọ ide:
Identifier->Type = Question->Type;
Iberibe N11: nkwụsịtụ enyo
void SystemZOperand::print(raw_ostream &OS) const {
switch (Kind) {
break;
case KindToken:
OS << "Token:" << getToken();
break;
case KindReg:
OS << "Reg:" << SystemZInstPrinter::getRegisterName(getReg());
break;
....
}
Ịdọ aka ná ntị PVS-Studio:
Enwere onye ọrụ na-enyo enyo na mbido ezumike. Ị chefuru ide ihe ọzọ ebe a?
Iberibe N12: Na-elele ntụnye mgbe emechara ya
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");
....
}
Ịdọ aka ná ntị PVS-Studio:
Nkọwa Callee na mbido, ewepụrụ n'oge a na-akpọ ọrụ ahụ nweta TTI.
Ma mgbe ahụ, ọ na-apụta na a ga-enyocha pointer a maka nha anya nullptr:
if (!Callee || Callee->isDeclaration())
Mana ọ gafeela…
Iberibe N13 - N...: Na-elele ntụnye mgbe emechara ya
Ọnọdụ a tụlere na ibe koodu gara aga abụghị ihe pụrụ iche. Ọ pụtara ebe a:
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()) { // <=
....
}
Ịdọ aka ná ntị PVS-Studio: V595 [CWE-476] Ejiri akara 'CalleeFn' tupu enyocha ya megide nullptr. Lelee ahịrị: 1079, 1081. SimplifyLibCalls.cpp 1079
Na ebe a:
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()); // <=
....
}
Ịdọ aka ná ntị PVS-Studio: V595 [CWE-476] Ejiri akara 'ND' tupu enyocha ya megide nullptr. Lelee ahịrị: 532, 534. SemaTemplateInstantiateDecl.cpp 532
Na ebe a:
- V595 [CWE-476] Ejiri akara ngosi 'U' tupu enyocha ya megide nullptr. Lelee ahịrị: 404, 407. DWARFormValue.cpp 404
- V595 [CWE-476] Ejiri akara ngosi 'ND' tupu enyocha ya megide nullptr. Lelee ahịrị: 2149, 2151. SemaTemplateInstantiate.cpp 2149
Ma mgbe ahụ, enweghị m mmasị n'ịmụ ịdọ aka ná ntị na nọmba V595. Ya mere, amaghị m ma enwere njehie ndị ọzọ yiri nke ahụ ma e wezụga ndị edepụtara ebe a. O yikarịrị ka ọ dị.
Iberibe N17, N18: Mgbanwe na-enyo enyo
static inline bool processLogicalImmediate(uint64_t Imm, unsigned RegSize,
uint64_t &Encoding) {
....
unsigned Size = RegSize;
....
uint64_t NImms = ~(Size-1) << 1;
....
}
Ịdọ aka ná ntị PVS-Studio:
O nwere ike ọ gaghị abụ ahụhụ na koodu ahụ na-arụ ọrụ kpọmkwem ka e bu n'obi. Mana nke a doro anya na ebe a na-enyo enyo na ọ dị mkpa ka enyocha ya.
Ka anyị kwuo mgbanwe size hà nhata 16, ma onye dere koodu ahụ zubere iji nweta ya na mgbanwe NImms uru:
1111111111111111111111111111111111111111111111111111111111100000
Agbanyeghị, n'eziokwu, nsonaazụ ga-abụ:
0000000000000000000000000000000011111111111111111111111111100000
Nke bụ eziokwu bụ na ngụkọ niile na-eme site na iji ụdị 32-bit na-edeghị aha. Naanị mgbe ahụ, ụdị 32-bit a na-edebanyeghị aha ga-agbasa n'ezoghị ọnụ ruo Ugochukwu. N'okwu a, ihe kachasị mkpa ga-abụ efu.
Ị nwere ike idozi ọnọdụ dị ka nke a:
uint64_t NImms = ~static_cast<uint64_t>(Size-1) << 1;
Ọnọdụ yiri ya: V629 [CWE-190] Tụlee inyocha okwu 'Immr << 6'. Ịgbanwe ntakịrị nke uru 32-bit yana mgbasawanye na-esote na ụdị 64-bit. AArch64 addressingModes.h 269
Iberibe N19: mkpụrụokwu efu ọzọ?
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");
}
....
}
Ịdọ aka ná ntị PVS-Studio:
Enweghị mmejọ ebe a. Ebe ọ bụ na mgbe ahụ-ngbochi nke mbụ if mechie na anọgide, mgbe ahụ ọ dịghị mkpa, e nwere isiokwu ọzọ ma ọ bụ ọ bụghị. N'ụzọ ọ bụla koodu ga-arụ ọrụ otu. A ka na-atụ uche ọzọ na-eme ka koodu ahụ doo anya ma dị ize ndụ. Ọ bụrụ na n'ọdịnihu anọgide na-apụ n'anya, koodu ahụ ga-amalite ịrụ ọrụ kpamkpam iche. N'uche m, ọ ka mma ịgbakwunye ọzọ.
Iberibe N20: typos anọ nke otu ụdị
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;
}
Ịdọ aka ná ntị PVS-Studio:
- V655 [CWE-480] Ejikọtara eriri ndị ahụ mana ejighị ya. Tụlee inyocha okwu 'Result + Name.str()'. Symbol.cpp 32
- V655 [CWE-480] Ejikọtara eriri ndị ahụ mana ejighị ya. Tụlee inyocha okwu 'Result +"(ObjC Class)" + Name.str()'. Symbol.cpp 35
- V655 [CWE-480] Ejikọtara eriri ndị ahụ mana ejighị ya. Tụlee inyocha okwu 'Result +"(ObjC Class EH)" + Name.str()'. Symbol.cpp 38
- V655 [CWE-480] Ejikọtara eriri ndị ahụ mana ejighị ya. Tụlee inyocha okwu 'Result +"(ObjC IVar)" + Name.str()'. Symbol.cpp 41
Site na mberede, a na-eji onye na-ahụ maka ọrụ + karịa onye na-arụ ọrụ +=. Ihe si na ya pụta bụ atụmatụ na-enweghị ihe ọ pụtara.
Iberibe N21: Omume enweghị nkọwa
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();
}
}
}
Gbalịa ịchọta koodu dị ize ndụ n'onwe gị. Na nke a bụ foto ịdọpụ uche ka ị ghara ilele azịza ya ozugbo:
Ịdọ aka ná ntị PVS-Studio:
Ahịrị nsogbu:
FeaturesMap[Op] = FeaturesMap.size();
Ọ bụrụ na mmewere Op achọtaghị ya, mgbe ahụ, a na-emepụta ihe ọhụrụ na map ma dee ọnụ ọgụgụ nke ihe dị na map a n'ebe ahụ. A maghị ma a ga-akpọ ọrụ ahụ size tupu ma ọ bụ mgbe ịgbakwunye ihe ọhụrụ.
Iberibe N22-N24: Ihe omume ugboro ugboro
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;
}
....
}
Ịdọ aka ná ntị PVS-Studio:
Echeghị m na e nwere ezigbo mmejọ ebe a. Naanị ọrụ ugboro ugboro na-enweghị isi. Mana ọ ka bụ mmejọ.
N'otu aka ahụ:
- V519 [CWE-563] A na-ekenye mgbanwe 'B.NDesc' ụkpụrụ ugboro abụọ n'usoro. Ikekwe nke a bụ mmejọ. Lelee ahịrị: 1488, 1489. llvm-nm.cpp 1489
- V519 [CWE-563] A na-ekenye mgbanwe ahụ ụkpụrụ ugboro abụọ n'usoro. Ikekwe nke a bụ mmejọ. Lelee ahịrị: 59, 61. coff2yaml.cpp 61
Iberibe N25-N27: Mgbanwe ndị ọzọ
Ugbu a, ka anyị leba anya n'ụdị nhazigharị dịtụ iche.
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;
....
}
Ịdọ aka ná ntị PVS-Studio: V519 [CWE-563] A na-ekenye ụkpụrụ 'nhazi' mgbanwe ugboro abụọ n'usoro. Ikekwe nke a bụ mmejọ. Lelee ahịrị: 1158, 1160. LoadStoreVectorizer.cpp 1160
Nke a bụ koodu iju anya nke o doro anya nwere mperi ezi uche dị na ya. Na mmalite, mgbanwe itinye n'ọnọdụ a na-ekenye uru dabere na ọnọdụ ahụ. Ma mgbe ahụ ọrụ ahụ na-eme ọzọ, ma ugbu a na-enweghị nlele ọ bụla.
Enwere ike ịhụ ọnọdụ ndị yiri ya ebe a:
- V519 [CWE-563] The 'Effects' variable ka ekenyere ụkpụrụ ugboro abụọ n'usoro. Ikekwe nke a bụ mmejọ. Lelee ahịrị: 152, 165. WebAssemblyRegStackify.cpp 165
- V519 [CWE-563] A na-ekenye mgbanwe 'ExpectNoDerefChunk' ụkpụrụ ugboro abụọ n'usoro. Ikekwe nke a bụ mmejọ. Lelee ahịrị: 4970, 4973. SemaType.cpp 4973
Iberibe N28: Ọnọdụ eziokwu mgbe niile
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;
}
....
}
Ịdọ aka ná ntị PVS-Studio:
Nyochaa enweghị isi. Na-agbanwe agbanwe nextByte mgbe niile adịghị nhata uru 0X90, nke na-esote site na nlele gara aga. Nke a bụ ụdị njehie ezi uche dị na ya.
Iberibe N29 - N...: Ọnọdụ eziokwu/ụgha mgbe niile
Onye nyocha ahụ na-enye ọtụtụ ịdọ aka ná ntị na ọnọdụ ahụ dum (
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;
....
}
Ịdọ aka ná ntị PVS-Studio:
0xE na-adịgide adịgide bụ uru 14 na decimal. Nyocha RegNo == 0xe enweghị isi n'ihi na ọ bụrụ RegNo> 13, mgbe ahụ, ọrụ ahụ ga-agwụcha ya.
Enwere ọtụtụ ịdọ aka ná ntị ndị ọzọ nwere NJ V547 na V560, mana dịka ọ dị
M ga-enye gị ihe atụ nke ihe mere ịmụ ihe ndị a na-akpata ji na-agwụ ike. Onye nyocha ahụ ziri ezi n'inye ịdọ aka ná ntị maka koodu na-esonụ. Mana nke a abụghị mmejọ.
bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons,
tok::TokenKind ClosingBraceKind) {
bool HasError = false;
....
HasError = true;
if (!ContinueOnSemicolons)
return !HasError;
....
}
Ịdọ aka ná ntị PVS-Studio: V547 [CWE-570] Okwu '! HasError' bụ ụgha mgbe niile. LineParser.cpp 1635
Iberibe N30: Nlaghachi na-enyo enyo
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();
}
....
}
Ịdọ aka ná ntị PVS-Studio:
Nke a bụ njehie ma ọ bụ usoro a kapịrị ọnụ nke e bu n'obi kọwaara ndị mmemme na-agụ koodu ahụ. Nhazi a akọwaghị m ihe ọ bụla ma na-enyo enyo. Ọ ka mma ịghara ide otu ahụ :).
Ike gwụrụ? Mgbe ahụ ọ bụ oge ịme tii ma ọ bụ kọfị.
Achọpụtaghị ntụpọ site na nchọpụta ọhụrụ
Echere m na 30 activations nke ochie diagnostics ezuru. Ka anyị hụ ugbu a ihe na-akpali ihe nwere ike ịhụ na ọhụrụ diagnostics pụtara na analyzer mgbe
Iberibe N31: Koodu enweghị ike iru
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();
}
Ịdọ aka ná ntị PVS-Studio:
Dị ka ị nwere ike ịhụ, alaka abụọ nke onye ọrụ if mechie na oku a na-akpọ onye ọrụ nloghachi. N'ihi ya, akpa ahụ CtorDtorsByPriority agaghị ekpochapụ.
Iberibe N32: Koodu enweghị ike iru
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;
}
Ịdọ aka ná ntị PVS-Studio: V779 [CWE-561] Achọpụtara koodu enweghị ike iru. O kwere omume na njehie dị. LLParser.cpp 835
Ọnọdụ na-adọrọ mmasị. Ka anyị buru ụzọ leba anya n'ebe a:
return ParseTypeIdEntry(SummaryID);
break;
Na nlele mbụ, ọ dị ka ọ nweghị njehie ebe a. Ọ dị ka onye ọrụ ezumike enwere mgbakwunye ebe a, ị nwere ike ihichapụ ya naanị. Otú ọ dị, ọ bụghị ihe niile dị mfe.
Onye nyocha ahụ na-enye ịdọ aka ná ntị na ahịrị ndị a:
Lex.setIgnoreColonInIdentifiers(false);
return false;
Na n'ezie, koodu a enweghị ike ịnweta. Okwu niile na mgba ọkụ mechie na oku sitere n'aka onye ọrụ nloghachi. Ma ugbu a enweghị isi naanị ezumike anaghị adị ka ihe adịghị njọ! Ikekwe otu n'ime alaka kwesịrị ịkwụsị na ezumike, ọ bụghị nloghachi?
Iberibe N33: Ntọgharị nke nnukwu ibe n'ibe
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);
....
}
Ịdọ aka ná ntị PVS-Studio:
Biko mara na ọrụ ahụ nwetaStubNhazi nloghachi ụdị ejighi aha. Ka anyị gbakọọ uru nke okwu ahụ, na-eche na ọrụ ahụ weghachiri uru 8:
~ ( nwetaStubAlignment () - 1)
(8u-1)
0xFFFFFFFF8u
Ugbu a mara na agbanwe agbanwe Nha data nwere ụdị 64-bit enweghị akara. Ọ tụgharịrị na mgbe ị na-arụ ọrụ DataSize & 0xFFFFFFF8u, a ga-emegharị ihe niile dị elu iri atọ na abụọ na efu. O yikarịrị, nke a abụghị ihe onye mmemme chọrọ. Echere m na ọ chọrọ ịgbakọ: DataSize & 0xFFFFFFFFFFFFFFF8u.
Iji dozie njehie ahụ, ị ga-ede nke a:
DataSize &= ~(static_cast<uint64_t>(getStubAlignment()) - 1);
Ma ọ bụ ya mere:
DataSize &= ~(getStubAlignment() - 1ULL);
Iberibe N34: Ụdị ihe nkedo pụtara ìhè dara
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);
....
}
Ịdọ aka ná ntị PVS-Studio:
A na-eji ụdị nkedo akọwapụta ihe iji zere njupụta mgbe a na-amụba ụdị mgbanwe Int. Agbanyeghị, ụdị nkedo a kapịrị ọnụ ebe a anaghị echebe ya pụọ na oke oke. Nke mbụ, a ga-amụba mgbanwe ndị ahụ, naanị mgbe ahụ, nsonaazụ 32-bit nke mmụba ga-agbasa na ụdị.
Iberibe N35: Detuo-Tapawa dara
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;
}
....
}
Nchọpụta ọhụrụ a na-adọrọ mmasị na-achọpụta ọnọdụ ebe e depụtaghachiri koodu ma malite ịgbanwe aha ụfọdụ dị na ya, mana n'otu ebe ha edozibeghị ya.
Biko mara na na ngọngọ nke abụọ ha gbanwere Nke 0 on Nke 1. Ma n'otu ebe ha edozighị ya. O yikarịrị ka a ga-ede ya dị ka nke a:
if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) {
I.setOperand(1, ConstantFP::getNullValue(Op1->getType()));
return &I;
}
Iberibe N36: Mgbagwoju anya mgbanwe
struct Status {
unsigned Mask;
unsigned Mode;
Status() : Mask(0), Mode(0){};
Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
Mode &= Mask;
};
....
};
Ịdọ aka ná ntị PVS-Studio:
Ọ dị oke egwu ịnye arụmụka ọrụ otu aha dị ka ndị otu klas. Ọ dị nnọọ mfe inwe mgbagwoju anya. Anyị nwere ụdị ikpe a n'ihu anyị. Okwu a enweghị isi:
Mode &= Mask;
Arụmụka ọrụ na-agbanwe. Ọ gwụla. Ejikwaghị arụmụka a. O yikarịrị ka ị ga-ede ya dị ka nke a:
Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
this->Mode &= Mask;
};
Iberibe N37: Mgbagwoju anya mgbanwe
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;
}
Ịdọ aka ná ntị PVS-Studio: V1001 [CWE-563] A na-ekenye mgbanwe ' nha' mana ejighị ya na njedebe nke ọrụ ahụ. Ihe.cpp 424
Ọnọdụ ahụ yiri nke gara aga. Ekwesịrị ide ya:
this->Size += this->EntrySize;
Iberibe N38-N47: Ha chefuru ịlele index
Na mbụ, anyị lere anya n'ihe atụ nke ịkpalite nchọpụta ọrịa
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()); // <=
....
}
Ịdọ aka ná ntị PVS-Studio: V1004 [CWE-476] A na-eji ihe nrịbama 'Ptr' eme ihe n'enweghị nchebe mgbe enyochachara ya megide nullptr. Lelee ahịrị: 729, 738. TargetTransformInfoImpl.h 738
Mgbanwe Ptr nwere ike ha nhata nullptr, dị ka egosiri site na nlele:
if (Ptr != nullptr)
Agbanyeghị, n'okpuru ebe a ka ewepụrụ n'enweghị nlele mbụ:
auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType());
Ka anyị tụlee ikpe ọzọ yiri nke ahụ.
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(); // <=
....
}
Ịdọ aka ná ntị PVS-Studio: V1004 [CWE-476] A na-eji ihe nrịbama 'FD' eme ihe na-adịghị ize ndụ mgbe enyochachara ya megide nullptr. Lelee ahịrị: 3228, 3231. CGDebugInfo.cpp 3231
Lezienụ anya na akara FD. Eji m n'aka na a na-ahụ nsogbu ahụ nke ọma na ọ dịghị nkọwa pụrụ iche achọrọ.
Ọzọkwa:
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()); // <=
....
}
Ịdọ aka ná ntị PVS-Studio: V1004 [CWE-476] A na-eji ihe nrịbama 'PtrTy' eme ihe n'enweghị nchebe mgbe enyochachara ya megide nullptr. Lelee ahịrị: 960, 965. InterleavedLoadCombinePass.cpp 965
Kedu ka ị ga-esi chebe onwe gị pụọ na njehie dị otú ahụ? Nwee ntị nke ọma na Usoro-Nyocha wee jiri PVS-Studio static analyzer na-elele koodu gị oge niile.
Ọ baghị uru ịkọwa iberibe koodu ndị ọzọ nwere njehie ụdị a. Aga m ahapụ naanị ndepụta ịdọ aka ná ntị n'isiokwu:
- V1004 [CWE-476] A na-eji ihe nrịbama 'Expr' na-enweghị nchekwa mgbe enyochachara ya megide nullptr. Lelee ahịrị: 1049, 1078. DebugInfoMetadata.cpp 1078
- V1004 [CWE-476] A na-eji ihe nrịbama 'PI' eme ihe n'enweghị nchekwa mgbe enyochachara ya megide nullptr. Lelee ahịrị: 733, 753. LegacyPassManager.cpp 753
- V1004 [CWE-476] Ejiri ntụnye 'StatepointCall' na-enweghị nchekwa mgbe enyochachara ya megide nullptr. Lelee ahịrị: 4371, 4379. Verifier.cpp 4379
- V1004 [CWE-476] A na-eji ihe nrịbama 'RV' eme ihe n'enweghị nchekwa mgbe enyochachara ya megide nullptr. Lelee ahịrị: 2263, 2268. TGParser.cpp 2268
- V1004 [CWE-476] Ejiri ntụnye 'CalleeFn' na-enweghị nchekwa mgbe enyochachara ya megide nullptr. Lelee ahịrị: 1081, 1096. SimplifyLibCalls.cpp 1096
- V1004 [CWE-476] A na-eji ihe nrịbama 'TC' eme ihe n'enweghị nchekwa mgbe enyochachara ya megide nullptr. Lelee ahịrị: 1819, 1824. Driver.cpp 1824
Iberibe N48-N60: Ọ bụghị ihe dị oke egwu, mana ntụpọ (ebe nchekwa nwere ike ime)
std::unique_ptr<IRMutator> createISelMutator() {
....
std::vector<std::unique_ptr<IRMutationStrategy>> Strategies;
Strategies.emplace_back(
new InjectorIRStrategy(InjectorIRStrategy::getDefaultOps()));
....
}
Ịdọ aka ná ntị PVS-Studio:
Ka ịgbakwunye ihe na njedebe nke akpa dị ka std :: vector > ị gaghị ede naanị xxx.push_back(X ọhụrụ), ebe ọ bụ na e nweghị ntughari n'ezoghị ọnụ si X* в std :: pụrụ iche_ptr.
Ihe ngwọta na-emekarị bụ ide xxx.emplace_back(X ọhụrụ)ebe ọ na-achịkọta: usoro emplace_back na-arụ otu mmewere ozugbo site na arụmụka ya ma nwee ike iji ihe nrụpụta doro anya.
Ọ dịghị mma. Ọ bụrụ na vector zuru ezu, mgbe ahụ a ga-ekenyekwa ebe nchekwa ọzọ. Ọrụ ebe nchekwa ebe nchekwa nwere ike daa, na-ebute ewepu ihe atụ std :: ọjọọ_alloc. N'okwu a, pointer ga-efunahụ ma ihe e kere eke agaghị ehichapụ.
Ihe ngwọta dị mma bụ ịmepụta iche_ptrnke ga-enwe ihe nrịbama ahụ tupu vector nwaa ibipụta ebe nchekwa:
xxx.push_back(std::unique_ptr<X>(new X))
Kemgbe C ++14, ị nwere ike iji 'std :: make_unique':
xxx.push_back(std::make_unique<X>())
Ụdị ntụpọ a adịghị mkpa maka LLVM. Ọ bụrụ na enweghị ike ịkenye ebe nchekwa, ihe nchịkọta ga-akwụsị naanị. Otú ọ dị, maka ngwa nwere ogologo oge
Yabụ, ọ bụ ezie na koodu a anaghị etinye LLVM egwu bara uru, achọpụtara m na ọ bara uru ikwu maka ụkpụrụ njehie a yana onye nyocha PVS-Studio amụtala ịmata ya.
Ụdị ịdọ aka ná ntị ndị ọzọ:
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Passes' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. Onye njikwa ngafe.h 546
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'AA' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. AliasAnalysis.h 324
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya n'ime akpa 'Entinye' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. DWARFDebugFrame.cpp 519
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'AllEdges' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. CFGMST.h 268
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'VMaps' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. SimpleLoopUnswitch.cpp 2012
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Records' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. FDRLogBuilder.h 30
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'PendingSubmodules' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. ModuleMap.cpp 810
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Ihe' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. DebugMap.cpp 88
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Strategies' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-isel-fuzzer.cpp 60
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Modifiers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-stress.cpp 685
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Modifiers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-stress.cpp 686
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Modifiers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-stress.cpp 688
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Modifiers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-stress.cpp 689
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Modifiers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-stress.cpp 690
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Modifiers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-stress.cpp 691
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Modifiers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-stress.cpp 692
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Modifiers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-stress.cpp 693
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Modifiers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. lvm-stress.cpp 694
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Operands' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. GlobalISelEmitter.cpp 1911
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Stash' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. GlobalISelEmitter.cpp 2100
- V1023 [CWE-460] A na-agbakwunye ntụnye na-enweghị onye nwe ya na akpa 'Matchers' site na usoro 'emplace_back'. Mwepu ebe nchekwa ga-eme ma ọ bụrụ na ewepụrụ. GlobalISelEmitter.cpp 2702
nkwubi
Enyere m ịdọ aka ná ntị 60 n'ozuzu ya wee kwụsị. Enwere ntụpọ ndị ọzọ onye nyocha PVS-Studio na-achọpụta na LLVM? Ee, enwere m. Otú ọ dị, mgbe m na-edepụta iberiibe koodu maka isiokwu ahụ, ọ bụ n'uhuruchi, ma ọ bụ ọbụna n'abalị, ekpebiri m na oge eruola ịkpọ ya otu ụbọchị.
Enwere m olileanya na ọ masịrị gị ma chọọ ịnwale PVS-Studio analyzer.
Ị nwere ike ibudata ihe nyocha wee nweta igodo minesweeper na
Nke kachasị mkpa, na-eji nyocha static eme ihe mgbe niile. Nyocha otu oge, rụrụ site anyị ka popularize usoro nke static analysis na PVS-Studio abụghị a nkịtị dịruru ná njọ.
Jisie na-emeziwanye ogo na ntụkwasị obi nke koodu gị!
Ọ bụrụ na ịchọrọ ịkọrọ ndị na-ege ntị na-asụ Bekee akụkọ a, biko jiri njikọ ntụgharị asụsụ: Andrey Karpov.
isi: www.habr.com