Te rapu i nga pepeha i roto i te LLVM 8 ma te whakamahi i te kaitirotiro PVS-Studio

Te rapu i nga pepeha i roto i te LLVM 8 ma te whakamahi i te kaitirotiro PVS-Studio
Neke atu i te rua tau kua pahemo mai i te tirotiro waehere whakamutunga o te kaupapa LLVM ma te whakamahi i ta maatau kaitirotiro PVS-Studio. Kia mohio tatou ko te kaitirotiro PVS-Studio he taputapu matua mo te tautuhi i nga hapa me nga whakaraeraetanga pea. Ki te mahi i tenei, ka tirohia e matou ka kitea nga hapa hou i roto i te tukunga LLVM 8.0.0.

Tuhinga ka tuhia

Kia pono, kare au i pai ki te tuhi i tenei tuhinga. Ehara i te mea pai ki te tuhi mo tetahi kaupapa kua maha nga wa kua tirohia e matou (1, 2, 3). He pai ake te tuhi mo tetahi mea hou, engari kaore au e whiriwhiri.

I nga wa katoa ka tukuna, ka whakahouhia ranei he putanga hou o LLVM Clang Static Analyzer, ka whiwhi matou i nga patai penei i roto i a maatau mēra:

Titiro, kua ako te putanga hou o Clang Static Analyzer ki te kimi hapa hou! Ki taku whakaaro kei te heke haere te whai take o te whakamahi i te PVS-Studio. Ka kitea e Clang nga hapa nui atu i mua, ka mau ki nga kaha o PVS-Studio. He aha to whakaaro mo tenei?

I nga wa katoa ka hiahia ahau ki te whakahoki kupu penei:

Kare hoki matou e noho mangere! Kua tino whakapai ake matou i nga kaha o te kaitirotiro PVS-Studio. Nō reira kaua e māharahara, kei te arahi tonu mātou i mua.

Kia aroha mai, he whakautu kino tenei. Karekau he tohu kei roto. A koinei te take i tuhia ai e au tenei tuhinga inaianei. Na, kua tirohia ano te kaupapa LLVM a kua kitea nga momo hapa i roto. Ka whakaatu ahau i nga mea i pai ki ahau. Kaore e taea e Clang Static Analyzer te kimi i enei hapa (he tino rawe ki te mahi me tana awhina). Engari ka taea e tatou. I tua atu, i kitea e ahau, i tuhia enei hapa katoa i te ahiahi kotahi.

Engari he maha nga wiki ki te tuhi i te tuhinga. Kaore au i kaha ki te whakauru i enei mea katoa ki te tuhinga :).

Ma te ara, mena kei te pirangi koe ki nga hangarau e whakamahia ana i roto i te kaitirotiro PVS-Studio ki te tautuhi i nga hapa me nga whakaraeraetanga pea, katahi ahau ka kii kia mohio koe ki tenei. tuhipoka.

Nga tātaritanga hou me te tawhito

Ka rite ki te korero kua korerohia, e rua tau ki muri ka tirotirohia ano te kaupapa LLVM, ka whakatikahia nga hapa i kitea. Inaianei ka whakaatuhia e tenei tuhinga he puranga hou o nga hapa. He aha i kitea ai nga pepeke hou? E toru nga take mo tenei:

  1. Kei te tipu haere te kaupapa LLVM, te huri i te waehere tawhito me te taapiri i te waehere hou. Ko te tikanga, he hapa hou kei roto i te waehere whakarereke me te tuhi. E whakaatu marama ana tenei me whakamahi te tātaritanga pateko i nga wa katoa, kaua i etahi wa. Ko o maatau tuhinga e whakaatu pai ana i nga kaha o te kaitirotiro PVS-Studio, engari kaore he mahi ki te whakapai ake i te kounga o te waehere me te whakaiti i te utu mo te whakatika hapa. Whakamahia he kaitirotiro waehere pateko i nga wa katoa!
  2. Kei te whakaoti me te whakapai ake i nga tātaritanga o naianei. Na reira, ka taea e te kaitirotiro te tautuhi i nga hapa kaore i kitea e ia i nga wa o mua.
  3. Kua puta nga taatai ​​hou i roto i te PVS-Studio karekau i te 2 tau ki muri. I whakatau ahau ki te whakanui i a raatau ki tetahi waahanga motuhake hei whakaatu i te whanaketanga o PVS-Studio.

Ko nga hapa i kitea e nga tātaritanga e 2 tau ki muri

Wahi N1: Tārua-Whakapiri

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
  ....
}

Whakatupato PVS-Studio: V501 [CWE-570] He rite nga kupu-iti 'Name.startswith("avx512.mask.permvar.")' ki te taha maui me te taha matau o te '||' kaiwhakahaere. WhakahouAunoa.cpp 73

Ka taki rua ka timata te ingoa ki te aho iti "avx512.mask.permvar.". I te haki tuarua, i tino hiahia ratou ki te tuhi i tetahi atu mea, engari i wareware ki te whakatika i nga tuhinga kua kapea.

Whatiwhati 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;
  ....
}

Whakatupato PVS-Studio: V501 He kupu-iti rite 'CXNameRange_WantQualifier' ki te taha maui me te taha matau o te '|' kaiwhakahaere. CIindex.cpp 7245

Nā te hē o te hē, ka rua te whakamahi i te pūmau rite tonu CXNameRange_WantQualifier.

Waahanga N3: Te rangirua me te mana whakahaere

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

Whakatupato PVS-Studio: V502 [CWE-783] He rereke pea te mahi a te kaiwhakahaere '?:' i te mea i whakaarohia. He iti ake te mana o te kaiwhakahaere '?:' i te kaiwhakahaere '=='. PPCTargetTransformInfo.cpp 404

Ki taku whakaaro, he he tino ataahua tenei. Ae, e mohio ana ahau he whakaaro kee aku mo te ataahua :).

Inaianei, e ai ki nga kaupapa matua a nga kaiwhakahaere, ka aromatawaihia te korero e whai ake nei:

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

Mai i te tirohanga whaitake, kaore he tikanga o taua ahuatanga, na te mea ka taea te whakaheke ki:

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

He tino he tenei. Ko te nuinga, i hiahia ratou ki te whakataurite i te 0/1 me te taurangi taupū. Hei whakatika i te waehere me taapiri koe i nga reu ki te taha o te kaiwhakahaere ternary:

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

Ma te ara, he tino kino te kaiwhakahaere ternary me te whakapataritari i nga hapa arorau. Kia tino tupato ki taua mea, kaua hoki e apo ki nga reu. I titiro atu ahau ki tenei kaupapa konei, i roto i te pene “A ara i te ?: Operator e a tapiri i te reira i roto i te Paretheses.”

Whatiwhati N4, N5: Poutohu Null

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;
  }
  ....
}

Whakatupato PVS-Studio: V522 [CWE-476] Ka taea pea te whakakore i te tohu tohu 'LHS'. TGParser.cpp 2152

Mena ko te tohu LHS he null, me tuku he whakatupato. Engari, ka whakakorehia tenei tohu tohu kore: LHS->getAsString().

He ahuatanga tino angamaheni tenei ka hunahia he hapa i roto i te kaikawe hapa, na te mea karekau he tangata e whakamatautau ana. Ka tirohia e nga kaitirotiro pateko nga waehere katoa e taea ana, ahakoa te maha o te whakamahi. He tauira tino pai tenei mo te taapiri i te tātaritanga pateko ki etahi atu tikanga whakamatautau me te whakamarumaru hapa.

He rite te whakahaere tohu tohu RHS ka whakaaetia i roto i te waehere i raro iho nei: V522 [CWE-476] Ka taea te whakakore i te tohu tohu kore 'RHS'. TGParser.cpp 2186

Wahi N6: Te whakamahi i te atatohu i muri i te neke

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);
  }
  ....
}

Whakatupato PVS-Studio: V522 [CWE-476] Ka taea te whakakore i te tohu tohu kore 'ProgClone'. He whakahiato.cpp 601

I te timatanga he atatohu atamai ProgClone ka mutu te pupuri i te taonga:

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

Inaianei, inaianei ProgClone he tohu tohu kore. No reira, me puta he tohu tohu korekore ki raro iho:

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

Engari, i roto i te meka, e kore e tupu tenei! Kia mahara kaore i tino mahia te kapiti.

I te timatanga o te ipu Nga Mahi Mihi whakawāteatia:

MiscompiledFunctions.clear();

I muri mai, ka whakamahia te rahi o tenei ipu i roto i te ahuatanga kopikopiko:

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

He ngawari ki te kite kaore e timata te kopae. Ki taku whakaaro he bug ano tenei, me tuhi rereke te waehere.

Te ahua nei kua tutaki matou ki tera waahanga rongonui o nga hapa! Ka huna tetahi hapa ki tetahi :).

Wahi N7: Te whakamahi i te atatohu i muri i te neke

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;
  }
  ....
}

Whakatupato PVS-Studio: V522 [CWE-476] Ka taea te whakakore i te tohu tohu 'Whakamātautau'. He whakahiato.cpp 709

Ko te ahua ano. I te tuatahi, ka nekehia nga mea o roto o te taonga, katahi ka whakamahia me te mea kaore he mea i tupu. Ka kite ahau i tenei ahuatanga i te nuinga o nga wa i roto i te waehere papatono i muri i te putanga o nga semantics nekehanga i C++. Koinei te take i pai ai ahau ki te reo C++! He maha ake nga huarahi hou ki te pupuhi i to waewae. Ka whai mahi tonu te kaitirotiro PVS-Studio :).

Whatiwhati N8: Poutohu Null

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);
}

Whakatupato PVS-Studio: V522 [CWE-476] Ka taea pea te whakakore i te tohu tohu 'Momo'. PrettyFunctionDumper.cpp 233

I tua atu i nga kaikawe hapa, karekau i te whakamatauhia nga mahi taarua. He keehi penei kei mua i a matou. Kei te tatari te mahi mo te kaiwhakamahi, ko wai, hei utu mo te whakaoti i ona raru, ka kaha ki te whakatika.

Tika:

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

Whatiwhati N9: Poutohu Null

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());
   ....
}

Whakatupato PVS-Studio: V522 [CWE-476] Ka taea te whakakore i te tohu tohu 'Ty'. RapuRipangaEmitter.cpp 614

Ki taku whakaaro he maamaa nga mea katoa kaore e hiahiatia he whakamaramatanga.

Whatiwhati 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;
}

Whakatupato PVS-Studio: V570 Ko te taurangi 'Identifier->Momo' kua tautapa ki a ia ano. FormatTokenLexer.cpp 249

Kare he take ki te tautapa i tetahi taurangi ki a ia ano. Ko te nuinga pea i hiahia ratou ki te tuhi:

Identifier->Type = Question->Type;

Mahinga N11: Wehenga ohorere

void SystemZOperand::print(raw_ostream &OS) const {
  switch (Kind) {
    break;
  case KindToken:
    OS << "Token:" << getToken();
    break;
  case KindReg:
    OS << "Reg:" << SystemZInstPrinter::getRegisterName(getReg());
    break;
  ....
}

Whakatupato PVS-Studio: V622 [CWE-478] Whakaarohia te tirotiro i te korero 'whakawhiti'. Kei te ngaro pea te kaiwhakahaere 'take' tuatahi. SystemZAsmParser.cpp 652

He kaipakihi tino whakapae i te timatanga whati. I wareware koe ki te tuhi i tetahi atu mea ki konei?

Whatiwhati N12: Te taki i te atatohu i muri i te whakakorenga korero

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");
  ....
}

Whakatupato PVS-Studio: V595 [CWE-476] I whakamahia te tohu 'Callee' i mua i te manatoko ki te nullptr. Tirohia nga rarangi: 172, 174. AMDGPUInline.cpp 172

Pouaka Callee i te timatanga ka whakakorehia i te wa e kiia ana te mahi tikiTTI.

Na ka puta mai me tirotirohia tenei atatohu mo te orite nullptr:

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

Engari kua roa rawa…

Whatiwhati N13 - N...: Te taki i te atatohu i muri i te whakakorenga korero

Ko te ahuatanga i korerohia i te wahanga waehere o mua ehara i te mea ahurei. Ka puta i konei:

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()) {               // <=
  ....
}

Whakatupato PVS-Studio: V595 [CWE-476] I whakamahia te tohu 'CalleeFn' i mua i te manatoko ki te nullptr. Tirohia nga rarangi: 1079, 1081. SimplifyLibCalls.cpp 1079

Na konei:

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());     // <=
  ....
}

Whakatupato PVS-Studio: V595 [CWE-476] I whakamahia te tohu 'ND' i mua i te manatoko ki te nullptr. Tirohia nga rarangi: 532, 534. SemaTemplateInstantiateDecl.cpp 532

Na konei:

  • V595 [CWE-476] I whakamahia te tohu 'U' i mua i te manatoko ki te nullptr. Tirohia nga rarangi: 404, 407. DWARFormValue.cpp 404
  • V595 [CWE-476] I whakamahia te tohu 'ND' i mua i te manatoko ki te nullptr. Tirohia nga rarangi: 2149, 2151. SemaTemplateInstantiate.cpp 2149

Na ka kore ahau e aro ki te ako i nga whakatupato me te nama V595. No reira kaore au i te mohio mena he maha ano nga hapa i tua atu i nga mea kua raarangi i konei. Te nuinga pea kei reira.

Whatiwhati N17, N18: Huringa hihira

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

Whakatupato PVS-Studio: V629 [CWE-190] Whakaarohia te tirotiro i te kupu '~(Rahi - 1) << 1'. Te neke moka o te uara moka-32 me te roha o muri ki te momo moka-64. AArch64AddressingModes.h 260

Ehara pea i te pepeha me te mahi tika te waehere i te mea i whakaarohia. Engari he waahi tino hihira tenei me te tirotiro.

Me kii te taurangi Rahinga he rite ki te 16, katahi ka whakaaro te kaituhi o te waehere ki te tiki i roto i te taurangi NImms uara:

1111111111111111111111111111111111111111111111111111111111100000

Heoi, i roto i te meka ko te hua ka:

0000000000000000000000000000000011111111111111111111111111100000

Ko te meka ka puta nga tatauranga katoa ma te whakamahi i te momo 32-bit kaore i hainatia. Na anake, ko tenei momo 32-bit kaore i hainatia ka whakawhanuihia ki uint64_t. I tenei keehi, ko nga moka tino nui ka noho kore.

Ka taea e koe te whakatika i te ahuatanga penei:

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

He rite te ahuatanga: V629 [CWE-190] Whakaarohia te tirotiro i te whakaaturanga 'Immr << 6'. Te neke moka o te uara moka-32 me te roha o muri ki te momo moka-64. AArch64AddressingModes.h 269

Wahi N19: Kua ngaro te kupu matua atu?

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");
  }
  ....
}

Whakatupato PVS-Studio: V646 [CWE-670] Whakaarohia te tirotiro i te arorau o te tono. Kei te ngaro pea te kupu 'atu'. AMDGPUAsmParser.cpp 5655

Karekau he he i konei. Mai i tera wa-poraka o te tuatahi if mutu ki tonu, karekau he aha, he kupu matua atu kaore ranei. Ahakoa he aha te mahi o te waehere. I ngaro tonu atu ka nui ake te marama me te kino o te waehere. Mena kei te heke mai tonu ka ngaro, ka timata te mahi tino rerekee te waehere. Ki taku whakaaro he pai ake te taapiri atu.

Whatiwhati N20: E wha nga hapa o te momo rite

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;
}

Whakatupato PVS-Studio:

  • V655 [CWE-480] I honoa nga aho engari kaore i whakamahia. Whakaarohia te tirotiro i te whakaaturanga 'Hua + Ingoa.str()'. Tohu.cpp 32
  • V655 [CWE-480] I honoa nga aho engari kaore i whakamahia. Whakaarohia te tirotiro i te whakaaturanga 'Hua + "(ObjC Class)" + Name.str()'. Tohu.cpp 35
  • V655 [CWE-480] I honoa nga aho engari kaore i whakamahia. Whakaarohia te tirotiro i te whakaaturanga 'Hua + "(ObjC Class EH) " + Name.str()'. Tohu.cpp 38
  • V655 [CWE-480] I honoa nga aho engari kaore i whakamahia. Whakaarohia te tirotiro i te whakaaturanga 'Hua + "(ObjC IVar)" + Name.str()'. Tohu.cpp 41

Na te aitua, ka whakamahia te + operator hei utu mo te += operator. Ko te hua ko nga hoahoa karekau he tikanga.

Te Waahanga N21: Te whanonga kore i tautuhia

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();
    }
  }
}

Ngana koe ki te kimi i te waehere kino. A he pikitia tenei hei whakararu i te aro kia kore e titiro wawe ki te whakautu:

Te rapu i nga pepeha i roto i te LLVM 8 ma te whakamahi i te kaitirotiro PVS-Studio

Whakatupato PVS-Studio: V708 [CWE-758] Ka whakamahia te hanga kino: 'FeaturesMap[Op] = FeaturesMap.size()', kei reira 'FeaturesMap' o te akomanga 'mahere'. Ka puta pea tenei ki te whanonga kore-tautuhia. RISCVCompressInstEmitter.cpp 490

Raina raruraru:

FeaturesMap[Op] = FeaturesMap.size();

Ki te huānga Op kare i kitea, katahi ka hangaia he huānga hou ki te mapi ka tuhia ki reira te maha o nga huānga o tenei mapi. Kaore i te mohiotia mena ka karangahia te mahi rahi i mua, i muri ranei i te taapiri i tetahi huānga hou.

Whatiwhati N22-N24: Taumahi tukurua

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;
  }
  ....
}

Whakatupato PVS-Studio: V519 [CWE-563] Ko te taurangi 'NType' ka tohua nga uara e rua nga wa. He pohehe pea tenei. Tirohia nga rarangi: 1663, 1664. MachOObjectFile.cpp 1664

Ki taku whakaaro karekau he tino he i konei. He taumahi koretake noa. Engari he pohehe tonu.

Waihoki:

  • V519 [CWE-563] Ko te taurangi 'B.NDesc' ka tohua nga uara e rua nga wa. He pohehe pea tenei. Tirohia nga rarangi: 1488, 1489. llvm-nm.cpp 1489
  • V519 [CWE-563] Ko te taurangi ka tohua nga uara e rua nga wa. He pohehe pea tenei. Tirohia nga rarangi: 59, 61. coff2yaml.cpp 61

Te Waahanga N25-N27: He maha atu nga taumahinga

Inaianei ka titiro tatou ki tetahi momo rereke rereke o te whakarereke.

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;
  ....
}

Whakatupato PVS-Studio: V519 [CWE-563] Ko te taurangi 'Whakatikanga' ka tohua nga uara e rua nga wa. He pohehe pea tenei. Tirohia nga rarangi: 1158, 1160. LoadStoreVectorizer.cpp 1160

He waehere tino rerekee tenei he hapa arorau kei roto. I te timatanga, taurangi Tīaroaro ka tohua he uara i runga i te ahuatanga. Na ka puta ano te taumahi, engari inaianei kaore he haki.

Ka kitea nga ahuatanga penei i konei:

  • V519 [CWE-563] Ko te taurangi 'Panga' ka tohaina nga uara e rua nga wa. He pohehe pea tenei. Tirohia nga rarangi: 152, 165. WebAssemblyRegStackify.cpp 165
  • V519 [CWE-563] Ko te taurangi 'ExpectNoDerefChunk' ka tohua nga uara e rua nga wa. He pohehe pea tenei. Tirohia nga rarangi: 4970, 4973. SemaType.cpp 4973

Wahi N28: Tikanga pono tonu

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;
  }
  ....
}

Whakatupato PVS-Studio: V547 [CWE-571] He pono tonu te korero 'nextByte != 0x90'. X86DisassemblerDecoder.cpp 379

Ko te arowhai kaore he tikanga. Taurangi Paitapa atu i nga wa katoa kaore e rite ki te uara 0x90, ka whai mai i te haki o mua. He momo hapa arorau tenei.

Whatiwhati N29 - N...: Tikanga tika/teka

He maha nga whakatupato ka tukuna e te kaitirotiro mo te ahuatanga katoa (V547) tetahi wahi ranei (V560) he pono, he teka ranei. I te nuinga o nga wa ehara enei i te tino hapa, engari he waehere pohehe noa, te hua o te roha tonotono, me era atu. Engari, he mea tika ki te titiro ki enei whakatupato katoa, na te mea ka puta nga hapa arorau pono i ia wa. Hei tauira, he hihira tenei wahanga o te waehere:

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;
  ....
}

Whakatupato PVS-Studio: V560 [CWE-570] He teka tonu tetahi wahanga o te kupu here: RegNo == 0xe. ARMDisassembler.cpp 939

Ko te 0xE tonu te uara 14 i roto i te ira. Whakamātautau RegNo == 0xe karekau he tikanga na te mea mena Nama Rehita > 13, ka oti te mahi i tana mahi.

He maha atu nga whakatupato me nga ID V547 me V560, engari pera me V595, Aita vau i anaanatae i te tuatapapa i teie mau faaararaa. Kua marama ake kua nui aku rauemi hei tuhi tuhinga :). Na reira, kaore i te mohiohia te maha o nga hapa o tenei momo ka taea te tautuhi i te LLVM ma te whakamahi i te PVS-Studio.

Ka hoatu e ahau he tauira mo te aha te ako i enei keu he hoha. He tino tika te kaitirotiro ki te tuku whakatupato mo te waehere e whai ake nei. Engari ehara tenei i te he.

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

Whakatupato PVS-Studio: V547 [CWE-570] He teka tonu te korero '!HasError'. UnwrappedLineParser.cpp 1635

Wahi N30: ​​Te hokinga mai o te whakapae

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();
  }
  ....
}

Whakatupato PVS-Studio: V612 [CWE-670] He 'whakahoki' kore here i roto i te kohanga. R600OptimizeVectorRegisters.cpp 63

He hapa tenei, he tikanga motuhake ranei hei whakamaarama i tetahi mea ki nga kaihōtaka e panui ana i te waehere. Kaore tenei hoahoa e whakamarama i tetahi mea ki ahau me te ahua tino whakapae. He pai ake kia kaua e tuhi penei :).

ngenge? Katahi ka tae ki te wa ki te mahi tii, kawhe ranei.

Te rapu i nga pepeha i roto i te LLVM 8 ma te whakamahi i te kaitirotiro PVS-Studio

Ko nga hapa i kitea e nga tātaritanga hou

Ki taku whakaaro he 30 nga whakahohenga o nga tātaritanga tawhito kua nui. Me titiro inaianei he aha nga mea whakamere ka kitea me nga tātaritanga hou i puta mai i te kaitirotiro i muri mai mua arowhai. Hui katoa, 66 nga tātaritanga kaupapa-whanui i taapirihia ki te kaitirotiro C++ i tenei waa.

Wahi N31: Waehere kore e taea te toro atu

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();
}

Whakatupato PVS-Studio: V779 [CWE-561] I kitea te waehere kore toro atu. He hapa pea kei reira. ExecutionUtils.cpp 146

Ka kite koe, e rua nga peka o te kaiwhakahaere if mutu ki te waea ki te kaiwhakahaere hoki. Na, ko te ipu CtorDtorsByPriority e kore rawa e whakawāteatia.

Wahi N32: Waehere kore e taea te toro atu

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;
}

Whakatupato PVS-Studio: V779 [CWE-561] I kitea te waehere kaore e taea te toro atu. He hapa pea kei reira. LLParser.cpp 835

Te ahuatanga whakamere. Me titiro ki tenei waahi tuatahi:

return ParseTypeIdEntry(SummaryID);
break;

I te titiro tuatahi, te ahua nei kaore he hapa i konei. Ko te ahua o te kaiwhakahaere whati he mea taapiri kei konei, a ka taea e koe te muku noa. Heoi, ehara i te mea ngawari katoa.

Ka tukuna e te kaitirotiro he whakatupato i runga i nga raina:

Lex.setIgnoreColonInIdentifiers(false);
return false;

Ae, ko tenei waehere kaore e taea te toro atu. Ko nga keehi katoa kei roto whakakā ka mutu ki te waea mai i te kaiwhakahaere hoki. Na inaianei kua kore noa iho whati e kore e tino kino te ahua! Tena pea me mutu tetahi o nga manga whatikaore i runga hoki?

Whatiwhati N33: Tautuhi tupurangi o nga moka teitei

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);
  ....
}

Whakatupato PVS-Studio: V784 He iti ake te rahi o te kanohi moka i te rahi o te operand tuatahi. Ma tenei ka ngaro nga moka teitei ake. RuntimeDyld.cpp 815

Kia mahara ko te mahi getStubAlignment momo hoki kāore i tohua. Me tatau tatou i te uara o te whakahuatanga, me te whakaaro ka whakahokia e te mahi te uara 8:

~(getStubAlignment() - 1)

~(8u-1)

0xFFFFFFFF8u

Inaianei tirohia te taurangi Rahi Raraunga he momo moka-64 kaore i hainatia. Te ahua nei ka mahia te Rahi Raraunga & 0xFFFFFFF8u mahi, toru tekau ma rua nga moka ota teitei ka tautuhia ki te kore. Ko te mea pea, ehara tenei i te hiahia o te kaitakaro. Ki taku whakaaro i hiahia ia ki te tatau: Rahi Raraunga & 0xFFFFFFFFFFFFFFF8u.

Hei whakatika i te hapa, me tuhi koe i tenei:

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

Ranei:

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

Wahi N34: I rahua te maka momo marama

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);
  ....
}

Whakatupato PVS-Studio: V1028 [CWE-190] Tera pea te waipuke. Whakaarohia te maka operan o te 'NumElts * Tauine' ki te momo 'size_t', kaua ko te hua. X86ISelLowering.h 1577

Ka whakamahia te maka momo marama hei karo i te puhake ina whakareatia nga momo taurangi int. Heoi, karekau te momo makanga i konei e tiaki i te waipuke. Tuatahi, ka whakareatia nga taurangi, katahi ka whakaroahia te hua moka-32 o te whakareatanga ki te momo. rahi_t.

Whatiwhati N35: I Rahua te Tārua-Whakapiri

Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) {
  ....
  if (!match(Op0, m_PosZeroFP()) && isKnownNeverNaN(Op0, &TLI)) {
    I.setOperand(0, ConstantFP::getNullValue(Op0->getType()));
    return &I;
  }
  if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) {
    I.setOperand(1, ConstantFP::getNullValue(Op0->getType()));        // <=
    return &I;
  }
  ....
}

V778 [CWE-682] E rua nga wahanga waehere rite i kitea. Tena pea, he patopato tenei, me whakamahi te taurangi 'Op1' hei utu mo 'Op0'. InstCombineCompares.cpp 5507

Ko tenei tātaritanga whakahihiri hou e tohu ana i nga ahuatanga kua kapehia tetahi waahanga waehere me etahi ingoa kei roto kua timata te whakarereke, engari i tetahi waahi kaore i whakatikahia.

Kia mahara mai i te poraka tuarua i rereke ratou Op0 i runga i Op1. Engari i tetahi waahi kaore ratou i whakatika. Ko te mea pea me penei te tuhi:

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

Whatiwhati N36: Hurorirori kau

struct Status {
  unsigned Mask;
  unsigned Mode;

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

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

Whakatupato PVS-Studio: V1001 [CWE-563] Ko te taurangi 'Aratau' kua tautapa engari kaore i te whakamahia i te mutunga o te mahi. SIModeRegister.cpp 48

He tino kino te hoatu i nga tautohe mahi he rite nga ingoa ki nga mema o te akomanga. He tino ngawari ki te raruraru. He keehi penei kei mua i a matou. Kare he tikanga o tenei korero:

Mode &= Mask;

Ka huri te tautohe mahi. Heoi ano. Kua kore e whakamahia tenei tohenga. Ko te mea pea kua tuhia e koe penei:

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

Whatiwhati N37: Hurorirori kau

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;
}

Whakatupato PVS-Studio: V1001 [CWE-563] Ko te taurangi 'Rahi' kua tautapa engari kaore e whakamahia i te mutunga o te mahi. Ahanoa.cpp 424

He rite te ahuatanga ki tera o mua. Me tuhi:

this->Size += this->EntrySize;

Wahi N38-N47: Kua wareware ratou ki te tirotiro i te taurangi

I mua, i titiro matou ki nga tauira o te whakapataritari tātaritanga V595. Ko te mea nui ka whakakorehia te atatohu i te timatanga, katahi ka takina. Nga tātaritanga rangatahi V1004 he rereke te tikanga, engari e whakaatu ana i te maha o nga hapa. Ka tautuhi i nga ahuatanga i takina te atatohu i te timatanga ka wareware ki te mahi pera. Me titiro ki nga keehi penei i kitea i roto i te LLVM.

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());  // <=
  ....
}

Whakatupato PVS-Studio: V1004 [CWE-476] I whakamahia kino te tohu 'Ptr' i muri i tana manatoko ki te nullptr. Tirohia nga rarangi: 729, 738. TargetTransformInfoImpl.h 738

Taurangi Ptr ka rite pea nullptr, e tohuhia ana e te haki:

if (Ptr != nullptr)

Heoi, kei raro i tenei atatohu ka whakakorehia me te kore arowhai tuatahi:

auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType());

Ka whakaarohia e tatou tetahi atu keehi penei.

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(); // <=
  ....
}

Whakatupato PVS-Studio: V1004 [CWE-476] I whakamahia te atatohu 'FD' i runga i te haumaru i muri i tana manatoko ki te nullptr. Tirohia nga rarangi: 3228, 3231. CGDebugInfo.cpp 3231

Kia tupato ki te tohu FD. E tino mohio ana ahau kei te tino kitea te raru, kaore he whakamarama motuhake e hiahiatia ana.

I tua atu:

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());     // <=
  ....
}

Whakatupato PVS-Studio: V1004 [CWE-476] Ko te tohu 'PtrTy' i whakamahia i runga i te haumaru i muri i tana manatoko ki te nullptr. Tirohia nga rarangi: 960, 965. InterleavedLoadCombinePass.cpp 965

Me pehea te tiaki i a koe mai i enei hapa? Kia kaha ake te aro ki te Arotake-Waehere me te whakamahi i te PVS-Studio tātari pateko hei tirotiro i to waehere.

Kaore he take ki te whakahua i etahi atu waahanga waehere me nga hapa o tenei momo. Ka waiho e ahau he rarangi whakatupato i roto i te tuhinga:

  • V1004 [CWE-476] I whakamahia kino te tohu 'Expr' i muri i tana manatoko ki te nullptr. Tirohia nga rarangi: 1049, 1078. DebugInfoMetadata.cpp 1078
  • V1004 [CWE-476] I whakamahia kino te tohu 'PI' i muri i tana manatoko ki te nullptr. Tirohia nga rarangi: 733, 753. LegacyPassManager.cpp 753
  • V1004 [CWE-476] Ko te atatohu 'StatepointCall' i whakamahia kinotia i muri i tana manatoko ki te nullptr. Tirohia nga rarangi: 4371, 4379. Verifier.cpp 4379
  • V1004 [CWE-476] I whakamahia te atatohu 'RV' i runga i te haumaru i muri i tana manatoko ki te nullptr. Tirohia nga rarangi: 2263, 2268. TGParser.cpp 2268
  • V1004 [CWE-476] I whakamahia kino te tohu 'CalleeFn' i muri i tana manatoko ki te nullptr. Tirohia nga rarangi: 1081, 1096. SimplifyLibCalls.cpp 1096
  • V1004 [CWE-476] I whakamahia te atatohu 'TC' i runga i te haumaru i muri i tana manatoko ki te nullptr. Tirohia nga rarangi: 1819, 1824. Driver.cpp 1824

Whatiwhati N48-N60: Ehara i te mea tino nui, engari he koha (ka turuturu pea te mahara)

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

Whakatupato PVS-Studio: V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Rautaki' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-isel-fuzzer.cpp 58

Hei taapiri i tetahi huānga ki te pito o te ipu penei std::vector > e kore e taea e koe te tuhi noa xxx.push_back(X hōu), i te mea karekau he hurihanga mai X* в std::unique_ptr.

Ko te otinga noa ko te tuhi xxx.emplace_back(X hōu)i te mea e whakahiato ana: tikanga emplace_back ka hanga tika i tetahi huānga mai i ona tohenga, na reira ka taea te whakamahi i nga kaihanga marama.

Kaore i te haumaru. Mena kua ki tonu te vector, ka tohatohahia ano te mahara. Ka rahua pea te mahi whakahuri mahara, katahi ka maka he okotahi std:: kino_alloc. I tenei take, ka ngaro te atatohu, ka kore rawa te ahanoa i hanga e mukua.

Ko te otinga haumaru ko te hanga unique_ptrkei a ia te atatohu i mua i te ngana a te vector ki te huri i te mahara:

xxx.push_back(std::unique_ptr<X>(new X))

Mai i te C++ 14, ka taea e koe te whakamahi 'std::make_unique':

xxx.push_back(std::make_unique<X>())

Ko tenei momo hapa kaore he mea nui mo LLVM. Ki te kore e taea te toha te mahara, ka mutu noa te whakahiato. Heoi, mo nga tono me te roa wā mahi, e kore e taea te whakamutu noa mena ka rahua te tohatoha mahara, he pepeke kino tenei.

Na, ahakoa karekau tenei waehere e whakatuma ki te LLVM, i kitea e au he pai ki te korero mo tenei tauira hapa, kua ako te kaitirotiro PVS-Studio ki te tautuhi.

Ko etahi atu whakatupato o tenei momo:

  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Passes' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. PassManager.h 546
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'AA' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. AliasAnalysis.h 324
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Whakauru' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. DWARFDebugFrame.cpp 519
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'AllEdges' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. CFGMST.h 268
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'VMaps' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. SimpleLoopUnswitch.cpp 2012
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Records' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. FDRLogBuilder.h 30
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'PendingSubmodules' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. ModuleMap.cpp 810
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Anoa' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. DebugMap.cpp 88
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Rautaki' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-isel-fuzzer.cpp 60
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Modifiers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-stress.cpp 685
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Modifiers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-stress.cpp 686
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Modifiers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-stress.cpp 688
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Modifiers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-stress.cpp 689
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Modifiers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-stress.cpp 690
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Modifiers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-stress.cpp 691
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Modifiers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-stress.cpp 692
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Modifiers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-stress.cpp 693
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Modifiers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. llvm-stress.cpp 694
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Operand' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. GlobalISelEmitter.cpp 1911
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Stash' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. GlobalISelEmitter.cpp 2100
  • V1023 [CWE-460] Ka taapirihia he atatohu kaore he rangatira ki te ipu 'Matchers' ma te tikanga 'emplace_back'. Ka puta he turuturu mahara ki te mea he tuunga. GlobalISelEmitter.cpp 2702

mutunga

I tukuna e ahau nga whakatupato 60 katoa ka mutu. He aha etahi atu hapa ka kitea e te kaitirotiro PVS-Studio i LLVM? Ae, kei ahau. Heoi, i te wa e tuhi ana au i nga kongakonga waehere mo te tuhinga, kua ahiahi, he po, ka whakatau ahau kua tae ki te wa ki te karanga he ra.

Te ti'aturi nei au i kitea e koe he mea pai, ka hiahia koe ki te whakamatau i te kaitirotiro PVS-Studio.

Ka taea e koe te tango i te kaitirotiro me te tiki i te taviri minesweeper i tenei whārangi.

Ko te mea nui, whakamahia te tātari pateko i nga wa katoa. Takitahi wa, i mahia e matou ki te whakanui i te tikanga o te tātaritanga pateko me te PVS-Studio ehara i te ahuatanga noa.

Waimarie ki te whakapai ake i te kounga me te pono o to waehere!

Te rapu i nga pepeha i roto i te LLVM 8 ma te whakamahi i te kaitirotiro PVS-Studio

Ki te hiahia koe ki te tiri i tenei tuhinga ki te hunga whakarongo ki te reo Ingarihi, whakamahia te hononga whakamaori: Andrey Karpov. Te kimi Bug i LLVM 8 me PVS-Studio.

Source: will.com

Tāpiri i te kōrero