แแ แฌแแแแ แแแขแ แแแแแแ LLVM แแ แแแฅแขแแก แแแแ แแแแแก แจแแแแฌแแแแแแแ แฉแแแแ PVS-Studio แแแแแแแแขแแ แแก แแแแแงแแแแแแ. แแแแแ แแแแ แฌแแฃแแแแ, แ แแ PVS-Studio แแแแแแแแขแแ แ แแแแแ แแ แแก แจแแชแแแแแแแก แแ แแแขแแแชแแฃแ แ แแแฃแชแแแแแแแก แแแแแขแแคแแชแแ แแแแก แฌแแแงแแแแ แแแกแขแ แฃแแแแขแ. แแแแกแแแแแก แฉแแแ แจแแแแแแฌแแแแ แแ แแแแแแแ แแฎแแ แจแแชแแแแแแก LLVM 8.0.0 แแแแแจแแแแแจแ.
แแแกแแฌแแ แ แกแขแแขแแ
แแแ แแแแ แแแแฎแ แแ, แแ แแแแแแแ แแ แกแขแแขแแแก แแแฌแแ แ. แแ แแ แแก แกแแแแขแแ แแกแ แแ แแแฅแขแแ แฌแแ แ, แ แแแแแแช แฃแแแ แ แแแแแแฏแแ แแ แแแแแแแแแฌแแแ (
แงแแแแ แฏแแ แแ, แ แแแแกแแช LLVM-แแก แแฎแแแ แแแ แกแแ แแแแแแแก แแ แแแแแฎแแแแแ
แแแฎแแ, Clang Static Analyzer-แแก แแฎแแแแ แแแ แกแแแ แแกแฌแแแแ แแฎแแแ แจแแชแแแแแแแก แแแแแ! แแแฉแแแแแแ, แ แแ PVS-Studio-แก แแแแแงแแแแแแก แแฅแขแฃแแแแแ แแชแแ แแแแ. Clang แแฆแแแแฉแแแก แฃแคแ แ แแแข แจแแชแแแแแก, แแแแ แ แแแ แ แแ แแแแฎแแแแ PVS-Studio-แก แจแแกแแซแแแแแแแแแก. แฒ แแก แคแแฅแ แแ แแแแก แจแแกแแฎแแ?
แแแแแ แงแแแแแแแแก แแแแแ แแฃแแแกแฃแฎแ:
แแ แช แฉแแแ แแแฏแแแแแ แฃแกแแฅแแแ! แฉแแแ แแแแจแแแแแแแแแ แแแแแฃแแฏแแแแกแแ PVS-Studio แแแแแแแแขแแ แแก แจแแกแแซแแแแแแแแแ. แแกแ แ แแ แแ แแแแ แแแฃแแแ, แฉแแแ แแแแ แซแแแแแ แแแแแ แแแแก, แ แแแแ แช แแแ แ.
แกแแแฌแฃแฎแแ แแ, แแก แชแฃแแ แแแกแฃแฎแแ. แแแกแจแ แแ แแแแแ แ แแขแแแชแแแฃแแแแ แแ แแ แแก. แแ แกแฌแแ แแ แแแแขแแ แแฌแแ แแ แกแขแแขแแแก แแฎแแ. แแกแ แ แแ, LLVM แแ แแแฅแขแ แแแแแ แแ แแฎแแ แจแแแแฌแแแ แแ แแแกแจแ แแ แแแแแ แจแแชแแแแ แแฅแแ แแแแแแแ. แแฎแแ แแ แแแฉแแแแแ แแแ, แ แแช แฉแแแแแแก แกแแแแขแแ แแกแ แฉแแแแ. Clang Static Analyzer แแแ แแแฃแแแแก แแ แจแแชแแแแแแก (แแ แซแแแแแ แแแฃแฎแแ แฎแแแแแแ แแแแก แแแแแแแแ แแแกแ แแแฎแแแ แแแแ). แแแแ แแ แฉแแแ แจแแแแแซแแแ. แแแขแแช, แงแแแแ แแก แจแแชแแแแ แแ แ แกแแฆแแแแก แแแแแแ แแ แฉแแแฌแแ แ.
แแแแ แแ แกแขแแขแแแก แแแฌแแ แแก แ แแแแแแแแ แแแแ แ แแแกแญแแ แแ. แฃแแ แแแแ, แแแแก แแแ แแแขแแแแ, แ แแ แแก แงแแแแแคแแ แ แขแแฅแกแขแจแ แแแแแแแขแแแ :).
แกแฎแแแแ แจแแ แแก, แแฃ แแแแแขแแ แแกแแแ แ แ แขแแฅแแแแแแแแแ แแแแแแงแแแแแ PVS-Studio แแแแแแแแขแแ แจแ แจแแชแแแแแแแก แแ แแแขแแแชแแฃแ แ แแแฃแชแแแแแแแก แแแกแแแแแแแ, แแแจแแ แแแ แฉแแแ แแแแชแแแ แแแแก
แแฎแแแ แแ แซแแแแ แแแแแแแกแขแแแ
แ แแแแ แช แฃแแแ แแฆแแแแจแแแ, แแแแฎแแแแแแ แแ แ แฌแแแก แฌแแ LLVM แแ แแแฅแขแ แแแแแ แแ แแฎแแ แจแแแแฌแแแ แแ แแฆแแแฉแแแแแ แจแแชแแแแแแ แแแแแกแฌแแ แแ. แแฎแแ แแก แกแขแแขแแ แฌแแ แแแแแแแแแ แจแแชแแแแแแแก แแฎแแ แฏแแฃแคแก. แ แแขแแ แแฆแแแแฉแแแแก แแฎแแแ แจแแชแแแแแแ? แแแแก 3 แแแแแแ แแ แกแแแแแก:
- LLVM แแ แแแฅแขแ แแแแแ แแแแ, แชแแแแก แซแแแ แแแแก แแ แแแแขแแแก แแฎแแ แแแแก. แแฃแแแแ แแแแ, แแ แแก แแฎแแแ แจแแชแแแแแแ แจแแชแแแแ แแ แแแฌแแ แแ แแแแจแ. แแก แแแแแแ แแฉแแแแแแก, แ แแ แกแขแแขแแแฃแ แ แแแแแแแ แ แแแฃแแแ แฃแแแ แฃแแแ แแฅแแแก แแแแแงแแแแแฃแแ แแ แแ แ แฎแแแแแฎแแ. แฉแแแแ แกแขแแขแแแแ แแแ แแแ แแฉแแแแแแก PVS-Studio แแแแแแแแขแแ แแก แจแแกแแซแแแแแแแแแก, แแแแ แแ แแแแก แแ แแคแแ แ แแฅแแก แกแแแ แแ แแแแแก แฎแแ แแกแฎแแก แแแฃแแฏแแแแกแแแแกแแแ แแ แจแแชแแแแแแแก แแแแแกแฌแแ แแแแก แฆแแ แแแฃแแแแแก แจแแแชแแ แแแแกแแแ. แ แแแฃแแแ แฃแแแ แแแแแแงแแแแ แกแขแแขแแแฃแ แ แแแแแก แแแแแแแแขแแ แ!
- แฉแแแ แแแกแ แฃแแแแ แแ แแแฃแแฏแแแแกแแแ แแ แกแแแฃแ แแแแแแแแก. แแแ แแแแ, แแแแแแแแขแแ แก แจแแฃแซแแแ แแแแแแแแแก แจแแชแแแแแแ, แ แแแแแแแช แแแ แแแ แจแแแแฉแแแ แฌแแแ แกแแแแแ แแแแก แแ แแก.
- PVS-Studio-แจแ แแแแแฉแแแ แแฎแแแ แแแแแแแกแขแแแ, แ แแแแแแช แแ แแ แกแแแแแแ 2 แฌแแแก แฌแแ. แแ แแแแแแฌแงแแแขแ แแแแแแงแ แแกแแแ แชแแแแแฃแ แแแแงแแคแแแแแแจแ, แ แแแ แแแแแแ แแแฉแแแแแแแแ PVS-Studio-แก แแแแแแแแ แแแ.
แแแคแแฅแขแแแ แแแแแแแแแแแ แแแแแแแกแขแแแแ, แ แแแแแแช แแ แกแแแแแแ 2 แฌแแแก แฌแแ
แคแ แแแแแแขแ 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
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแ แฏแแ แจแแแแฌแแแแแ, แ แแ แกแแฎแแแ แแฌแงแแแ แฅแแแกแขแ แแฅแแแแ "avx512.mask.permvar.". แแแแ แ แจแแแแฌแแแแแแ แแจแแแ แแ แกแฎแแ แ แแแแก แแแฌแแ แ แฃแแแแแแ, แแแแ แแ แแแแแฌแแ แแแ แขแแฅแกแขแแก แแแกแฌแแ แแแ แแแแแแฌแงแแแ.
แคแ แแแแแแขแ N2: แขแแแแฃแ แ แจแแชแแแแ
enum CXNameRefFlags {
CXNameRange_WantQualifier = 0x1,
CXNameRange_WantTemplateArgs = 0x2,
CXNameRange_WantSinglePiece = 0x4
};
void AnnotateTokensWorker::HandlePostPonedChildCursor(
CXCursor Cursor, unsigned StartTokenIndex) {
const auto flags = CXNameRange_WantQualifier | CXNameRange_WantQualifier;
....
}
แแแคแ แแฎแแแแแ PVS-Studio: V501 แแ แแก แแแแแขแฃแ แ แฅแแแแแแแแฅแแแแ โCXNameRange_WantQualifierโ โ|โ-แแก แแแ แชแฎแแแ แแ แแแ แฏแแแแ. แแแแ แแขแแ แ. CIndex.cpp 7245
แแแญแแแแแ แจแแชแแแแแก แแแแ, แแแแแ แกแแฎแแแฌแแแแแแก แแฃแแแแแ แแแแแแงแแแแแ แแ แฏแแ CXNameRange_WantQualifier.
แคแ แแแแแแขแ N3: แแแแแแฃแแแแ แแแแ แแขแแ แแก แฃแแแ แแขแแกแแแแกแแแ
int PPCTTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val, unsigned Index) {
....
if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian() ? 1 : 0)
return 0;
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แฉแแแ แแแ แแ, แแก แซแแแแแ แแแแแแ แจแแชแแแแแ. แแแแฎ, แแแชแ, แ แแ แกแแแแแแแแก แจแแกแแฎแแ แฃแชแแแฃแ แ แฌแแ แแแแแแแแแ แแแฅแแก :).
แแฎแแ, แแแฎแแแแแ
(ISD == ISD::EXTRACT_VECTOR_ELT && (Index == ST->isLittleEndian())) ? 1 : 0
แแ แแฅแขแแแฃแแ แแแแแกแแแ แแกแแ, แแกแแ แแแแแแแ แแแแแก แแแ แ แแ แแฅแแก, แ แแแแแ แแก แจแแแซแแแแ แจแแแชแแ แแแก:
(ISD == ISD::EXTRACT_VECTOR_ELT && Index == ST->isLittleEndian())
แแก แแจแแแ แ แจแแชแแแแแ. แกแแแแ แแฃแแแ, แแแ แกแฃแ แแแ 0/1 แจแแแแ แแแ แชแแแแแแแ แแแแแฅแกแ. แแแแแก แแแแแกแแกแฌแแ แแแแแ, แแฅแแแ แฃแแแ แแแแแแขแแ แคแ แฉแฎแแแแแ แกแแแแแแ แแแแ แแขแแ แแก แแแ แจแแแ:
if (ISD == ISD::EXTRACT_VECTOR_ELT && Index == (ST->isLittleEndian() ? 1 : 0))
แกแฎแแแแ แจแแ แแก, แกแแแแแแ แแแแ แแขแแ แ แซแแแแแ แกแแจแแจแแ แแ แแฌแแแแก แแแแแแฃแ แจแแชแแแแแแก. แแแแ แกแแคแ แแฎแแแ แแแแ แแแแ แแ แคแ แฉแฎแแแแแแ แแฃ แแฎแแ แแแ. แฃแคแ แ แแแขแแแฃแ แแ แแแแแแฎแแแ แแ แแแแแก
แคแ แแแแแแขแ N4, N5: แแฃแแแแแแ แแแฉแแแแแแแแ
Init *TGParser::ParseValue(Record *CurRec, RecTy *ItemType, IDParseMode Mode) {
....
TypedInit *LHS = dyn_cast<TypedInit>(Result);
....
LHS = dyn_cast<TypedInit>(
UnOpInit::get(UnOpInit::CAST, LHS, StringRecTy::get())
->Fold(CurRec));
if (!LHS) {
Error(PasteLoc, Twine("can't cast '") + LHS->getAsString() +
"' to string");
return nullptr;
}
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแฃ แแแฉแแแแแแแแ LHS แแฃแแแแแแแ, แแแคแ แแฎแแแแแ แฃแแแ แแแแชแแก. แแฃแแชแ, แแแแก แแแชแแแแ, แแแแแ แแฃแแแแแแ แแแฉแแแแแแแแ แแแฃแฅแแแแแ: LHS->getAsString().
แแก แแ แแก แซแแแแแ แขแแแแฃแ แ แกแแขแฃแแชแแ, แ แแแแกแแช แจแแชแแแแ แแแแแแแ แจแแชแแแแแก แแแแแฃแจแแแแแแแจแ, แ แแแแแ แแแ แแ แแแแ แแแแฌแแแแก. แกแขแแขแแแฃแ แ แแแแแแแแขแแ แแแ แแแแฌแแแแแ แงแแแแ แแแกแแฌแแแแ แแแแก, แแ แแฅแแก แแแแจแแแแแแแ แ แแแแแแแ แฎแจแแ แแ แแแแแแงแแแแแ แแแ. แแก แแ แแก แซแแแแแ แแแ แแ แแแแแแแแ แแแแกแ, แแฃ แ แแแแ แแแกแแแก แกแขแแขแแแฃแ แ แแแแแแแ แกแฎแแ แขแแกแขแแ แแแแกแ แแ แจแแชแแแแแแแกแแแ แแแชแแแก แขแแฅแแแแแก.
แแแฉแแแแแแแแก แแแ แแแแก แแกแแแแกแ แจแแชแแแแ RHS แแแแแแแ แแฃแแแ แแฎแแแแ แฅแแแแแ แแแชแแแฃแ แแแแจแ: V522 [CWE-476] แจแแแซแแแแ แแแฎแแแก null แแแฉแแแแแแแแก 'RHS'-แแก แแแฃแฅแแแแ. TGParser.cpp 2186
แคแ แแแแแแขแ N6: แแแฉแแแแแแแแก แแแแแงแแแแแ แแแแแแแแแแแแแก แจแแแแแ
static Expected<bool>
ExtractBlocks(....)
{
....
std::unique_ptr<Module> ProgClone = CloneModule(BD.getProgram(), VMap);
....
BD.setNewProgram(std::move(ProgClone)); // <=
MiscompiledFunctions.clear();
for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first); // <=
assert(NewF && "Function not found??");
MiscompiledFunctions.push_back(NewF);
}
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V522 [CWE-476] แจแแแซแแแแ แแแฎแแแก null แแแฉแแแแแแแแก 'ProgClone'-แแก แแแฃแฅแแแแ. แแ แแกแฌแแ แ แจแแแแแแ.cpp 601
แแแกแแฌแงแแกแจแ แญแแแแแแ แแแฉแแแแแแแแ แแ แแแแแแแ แฌแงแแแขแก แแแแแฅแขแแก แคแแแแแก:
BD.setNewProgram(std::move(ProgClone));
แกแแแแแแแแแแจแ, แแฎแแ แแ แแแแแแแ แแ แแก แแฃแแแแแแ แแแฉแแแแแแแแ. แแแแขแแ, แแฃแแแแแแ แแแฉแแแแแแแแก แแแฃแฅแแแแ แฃแแแ แแแฎแแแก แแฎแแแแ แฅแแแแแ:
Function *NewF = ProgClone->getFunction(MisCompFunctions[i].first);
แแแแ แแ, แกแแแแแแแแแแจแ, แแก แแ แแแฎแแแแ! แแแแแแแแแกแฌแแแแ, แ แแ แแแ แงแฃแแ แ แแแแฃแ แแ แแ แแ แแก แจแแกแ แฃแแแแฃแแ.
แแแแขแแแแแ แแก แแแกแแฌแงแแกแจแ แแ แแกแฌแแ แแ แจแแแแแแแแ แคแฃแแฅแชแแแแ แแแกแฃแคแแแแแแฃแแ:
MiscompiledFunctions.clear();
แจแแแแแแ, แแ แแแแขแแแแแ แแก แแแแ แแแแแแงแแแแแ แแแ แงแฃแแแก แแแแแแแ แแแแแจแ:
for (unsigned i = 0, e = MisCompFunctions.size(); i != e; ++i) {
แแแแแแ แแแกแแฎแแแแ แแ, แ แแ แแแ แงแฃแแ แแ แแฌแงแแแ. แแแแแ แแกแแช แฎแแ แแแแแ แแ แแแแ แกแฎแแแแแแ แแ แฃแแแ แแแแฌแแ แแก.
แ แแแแ แช แฉแแแก, แฉแแแ แจแแแฎแแแแ แจแแชแแแแแแแก แแ แชแแแแแ แแแ แแขแแขแก! แแ แแ แจแแชแแแแ แแแแ แแก แแแฆแแแแก :).
แคแ แแแแแแขแ N7: แแแฉแแแแแแแแก แแแแแงแแแแแ แแแแแแแแแแแแแก แจแแแแแ
static Expected<bool> TestOptimizer(BugDriver &BD, std::unique_ptr<Module> Test,
std::unique_ptr<Module> Safe) {
outs() << " Optimizing functions being tested: ";
std::unique_ptr<Module> Optimized =
BD.runPassesOn(Test.get(), BD.getPassesToRun());
if (!Optimized) {
errs() << " Error running this sequence of passes"
<< " on the input program!n";
BD.setNewProgram(std::move(Test)); // <=
BD.EmitProgressBitcode(*Test, "pass-error", false); // <=
if (Error E = BD.debugOptimizerCrash())
return std::move(E);
return false;
}
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V522 [CWE-476] แจแแแซแแแแ แแแฎแแแก null แแแฉแแแแแแแแก "แขแแกแขแ" แแแฃแฅแแแแ. แแ แแกแฌแแ แ แจแแแแแแ.cpp 709
แแกแแ แแแแแ แกแแขแฃแแชแแ. แแแแแแแแ แแแแแ, แแแแแฅแขแแก แจแแแแแ แกแ แแแแแแแแแแแแแ, แจแแแแแ แแ แแแแแแงแแแแแ แแกแ, แแแแฅแแก แแ แแคแแ แ แแแแฎแแแ แ. แแ แฃแคแ แ แแ แฃแคแ แ แฎแจแแ แแ แแฎแแแแ แแ แกแแขแฃแแชแแแก แแ แแแ แแแแก แแแแจแ แแแก แจแแแแแ, แ แแช แแแซแ แแแแแก แกแแแแแขแแแ แแแแแฉแแแ C++-แจแ. แแแแขแแ แแแงแแแ แก C++ แแแ! แกแฃแ แฃแคแ แ แแ แฃแคแ แ แแแขแ แแฎแแแ แแแ แแ แกแแแแแก แกแแแฃแแแ แ แคแแฎแแก แแแกแแจแแ แแแแแ. PVS-Studio แแแแแแแแขแแ แ แงแแแแแแแแก แแแฃแจแแแแแก :).
แคแ แแแแแแขแ N8: แแฃแแแแแแ แแแฉแแแแแแแแ
void FunctionDumper::dump(const PDBSymbolTypeFunctionArg &Symbol) {
uint32_t TypeId = Symbol.getTypeId();
auto Type = Symbol.getSession().getSymbolById(TypeId);
if (Type)
Printer << "<unknown-type>";
else
Type->dump(*this);
}
PVS-Studio แแแคแ แแฎแแแแแ: V522 [CWE-476] แจแแแซแแแแ แแแฎแแแก null แแแฉแแแแแแแแก 'แขแแแแก' แแแฃแฅแแแแ. PrettyFunctionDumper.cpp 233
แจแแชแแแแแแแก แแแแแฃแจแแแแแแแแแก แแแ แแ, แแแแแแญแแแแก แแแแแ แแแแก แคแฃแแฅแชแแแแ, แ แแแแ แช แฌแแกแ, แแ แขแแกแขแแ แแแ. แฉแแแแแแ แกแฌแแ แแ แแกแแแ แจแแแแฎแแแแแ. แคแฃแแฅแชแแ แแแแแแแ แแแแฎแแแ แแแแแก, แ แแแแแแช แแแแก แแแชแแแแ, แ แแ แแแแแแแ แแก แแแแแกแ แแ แแแแแแแแ, แแซแฃแแแแฃแแ แแฅแแแแ แแแกแ แแแแแกแฌแแ แแแ.
แกแฌแแ แแ:
if (Type)
Type->dump(*this);
else
Printer << "<unknown-type>";
แคแ แแแแแแขแ N9: แแฃแแแแแแ แแแฉแแแแแแแแ
void SearchableTableEmitter::collectTableEntries(
GenericTable &Table, const std::vector<Record *> &Items) {
....
RecTy *Ty = resolveTypes(Field.RecType, TI->getType());
if (!Ty) // <=
PrintFatalError(Twine("Field '") + Field.Name + "' of table '" +
Table.Name + "' has incompatible type: " +
Ty->getAsString() + " vs. " + // <=
TI->getType()->getAsString());
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V522 [CWE-476] แจแแแซแแแแ แแแฎแแแก null แแแฉแแแแแแแแก 'Ty'-แแก แแแฃแฅแแแแ. SearchableTableEmitter.cpp 614
แแคแแฅแ แแ, แงแแแแแคแแ แ แแแแแแแ แแ แแ แกแแญแแ แแแแก แแฎแกแแแก.
แคแ แแแแแแขแ N10: แขแแแแฃแ แ แจแแชแแแแ
bool FormatTokenLexer::tryMergeCSharpNullConditionals() {
....
auto &Identifier = *(Tokens.end() - 2);
auto &Question = *(Tokens.end() - 1);
....
Identifier->ColumnWidth += Question->ColumnWidth;
Identifier->Type = Identifier->Type; // <=
Tokens.erase(Tokens.end() - 1);
return true;
}
PVS-Studio แแแคแ แแฎแแแแแ:
แชแแแแแแก แแแแแกแแแแก แแแแแญแแแแก แแแ แ แแ แแฅแแก. แกแแแแ แแฃแแแ, แแแ แกแฃแ แแแ แแแแฌแแ แแ:
Identifier->Type = Question->Type;
แคแ แแแแแแขแ N11: แกแแแญแแ แจแแกแแแแแแ
void SystemZOperand::print(raw_ostream &OS) const {
switch (Kind) {
break;
case KindToken:
OS << "Token:" << getToken();
break;
case KindReg:
OS << "Reg:" << SystemZInstPrinter::getRegisterName(getReg());
break;
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแแแแแแ แซแแแแแ แกแแแญแแ แแแแ แแขแแ แแ แจแแกแแแแแแ. แแฅ แกแฎแแ แ แแแแก แแแฌแแ แ แแแแแแแฌแงแแ?
แคแ แแแแแแขแ N12: แแแฉแแแแแแแแก แจแแแแฌแแแแ แแแแแ แแแแก แแแฃแฅแแแแแก แจแแแแแ
InlineCost AMDGPUInliner::getInlineCost(CallSite CS) {
Function *Callee = CS.getCalledFunction();
Function *Caller = CS.getCaller();
TargetTransformInfo &TTI = TTIWP->getTTI(*Callee);
if (!Callee || Callee->isDeclaration())
return llvm::InlineCost::getNever("undefined callee");
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแแฉแแแแแแแแ แแแแแ แแแกแแฌแงแแกแจแ แแ แแก แแแฃแฅแแแแฃแแ แคแฃแแฅแชแแแก แแแแแซแแฎแแแแก แแ แแก getTTI.
แแ แจแแแแแ แแแแแแแก, แ แแ แแก แแแฉแแแแแแแแ แฃแแแ แจแแแแฌแแแแก แแแแแกแฌแแ แแแแกแแแแก nullptr:
if (!Callee || Callee->isDeclaration())
แแแแ แแ แฃแแแ แแแแแแแโฆ
แคแ แแแแแแขแ N13 - N...: แแแฉแแแแแแแแก แจแแแแฌแแแแ แแแแแ แแแแก แแแฃแฅแแแแแก แจแแแแแ
แฌแแแ แแแแแก แคแ แแแแแแขแจแ แแแแฎแแแฃแแ แกแแขแฃแแชแแ แฃแแแแแแฃแ แ แแ แแ แแก. แแฅ แฉแแแก:
static Value *optimizeDoubleFP(CallInst *CI, IRBuilder<> &B,
bool isBinary, bool isPrecise = false) {
....
Function *CalleeFn = CI->getCalledFunction();
StringRef CalleeNm = CalleeFn->getName(); // <=
AttributeList CalleeAt = CalleeFn->getAttributes();
if (CalleeFn && !CalleeFn->isIntrinsic()) { // <=
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V595 [CWE-476] 'CalleeFn' แแแฉแแแแแแแแ แแแแแแงแแแแแแแ แแแแแ, แกแแแแ แแแ แแแแแแแฌแแแแฃแแ แแฅแแแแแแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 1079, 1081. SimplifyLibCalls.cpp 1079
แฒแ แแฅ:
void Sema::InstantiateAttrs(const MultiLevelTemplateArgumentList &TemplateArgs,
const Decl *Tmpl, Decl *New,
LateInstantiatedAttrVec *LateAttrs,
LocalInstantiationScope *OuterMostScope) {
....
NamedDecl *ND = dyn_cast<NamedDecl>(New);
CXXRecordDecl *ThisContext =
dyn_cast_or_null<CXXRecordDecl>(ND->getDeclContext()); // <=
CXXThisScopeRAII ThisScope(*this, ThisContext, Qualifiers(),
ND && ND->isCXXInstanceMember()); // <=
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V595 [CWE-476] 'ND' แแแฉแแแแแแแแ แแแแแแงแแแแแแแ แแแแแ, แกแแแแ แแก แแแแแแแฌแแแแฃแแ แแฅแแแแแแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 532, 534. SemaTemplateInstantiateDecl.cpp 532
แฒแ แแฅ:
- V595 [CWE-476] 'U' แแแฉแแแแแแแแ แแแแแแงแแแแแแแ แแแแแ, แกแแแแ แแแ แแแแแแแฌแแแแฃแแ แแฅแแแแแแ nullptr-แแก แฌแแแแแฆแแแแ. แจแแแแแฌแแแ แฎแแแแแ: 404, 407. DWARFormValue.cpp 404
- V595 [CWE-476] 'ND' แแแฉแแแแแแแแ แแแแแแงแแแแแแแ แแแแแ, แกแแแแ แแแ แแแแแแแฌแแแแฃแแ แแฅแแแแแแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 2149, 2151. SemaTemplateInstantiate.cpp 2149
แจแแแแแ แแ แฃแแแขแแ แแกแ แแแแฎแแ แแแคแ แแฎแแแแแแแแก แจแแกแฌแแแแ แแแแ แแ V595. แแกแ แ แแ, แแ แแแชแ, แแ แแก แแฃ แแ แ แกแฎแแ แแกแแแแกแ แจแแชแแแแแแ แแฅ แฉแแแแแแแแแแ แแแ แแ. แแแแ แแแแแแแแแ แแ แกแแแแแก.
แคแ แแแแแแขแ N17, N18: แกแแแญแแ แชแแแ
static inline bool processLogicalImmediate(uint64_t Imm, unsigned RegSize,
uint64_t &Encoding) {
....
unsigned Size = RegSize;
....
uint64_t NImms = ~(Size-1) << 1;
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแก แจแแแซแแแแ แแ แแงแแก แจแแชแแแแ แแ แแแแ แแฃแจแแแแก แแฃแกแขแแ แแกแ, แ แแแแ แช แแงแ แแแแแฃแแแแแแ. แแแแ แแ แแก แแจแแแ แแ แซแแแแแ แกแแแญแแ แแแแแแแ แแ แฃแแแ แจแแแแฌแแแแก.
แแแฅแแแ แชแแแแแ แแแแ แฃแแ แแก 16-แก แแ แจแแแแแ แแแแแก แแแขแแ แ แแแแแแแแ แแแก แแแฆแแแแก แชแแแแแจแ NImms แฆแแ แแแฃแแแแ:
1111111111111111111111111111111111111111111111111111111111100000
แแฃแแชแ, แกแแแแแแแแแแจแ แจแแแแแ แแฅแแแแ:
0000000000000000000000000000000011111111111111111111111111100000
แคแแฅแขแแ, แ แแ แงแแแแ แแแแแแแแ แฎแแแแ 32-แแแขแแแแ แฎแแแแแฃแฌแแ แแแ แขแแแแก แแแแแงแแแแแแ. แแ แแฎแแแแ แแแแก แจแแแแแ, แแก 32-แแแขแแแแ แฎแแแแแฃแฌแแ แแแ แขแแแ แแแคแแ แแแแแแแ uint64_t. แแ แจแแแแฎแแแแแจแ, แงแแแแแแ แแแแจแแแแแแแแแ แแแขแแแ แแฅแแแแ แแฃแแ.
แแฅแแแ แจแแแแซแแแแ แแแแแแกแฌแแ แแ แกแแขแฃแแชแแ แแกแ:
uint64_t NImms = ~static_cast<uint64_t>(Size-1) << 1;
แแกแแแแกแ แกแแขแฃแแชแแ: V629 [CWE-190] แแคแแฅแ แแ "Immr << 6" แแแแแฎแแขแแแก แจแแแแฌแแแแแแ. 32-แแแขแแแแ แแแแจแแแแแแแแก แแแขแแก แแแแแแแชแแแแแ 64-แแแขแแแ แขแแแแ แจแแแแแแแ แแแคแแ แแแแแแ. AArch64AddressingModes.h 269
แคแ แแแแแแขแ N19: แกแแแแแแซแ แกแแขแงแแ แแแแแ แกแฎแแ?
void AMDGPUAsmParser::cvtDPP(MCInst &Inst, const OperandVector &Operands) {
....
if (Op.isReg() && Op.Reg.RegNo == AMDGPU::VCC) {
// VOP2b (v_add_u32, v_sub_u32 ...) dpp use "vcc" token.
// Skip it.
continue;
} if (isRegOrImmWithInputMods(Desc, Inst.getNumOperands())) { // <=
Op.addRegWithFPInputModsOperands(Inst, 2);
} else if (Op.isDPPCtrl()) {
Op.addImmOperands(Inst, 1);
} else if (Op.isImm()) {
// Handle optional arguments
OptionalIdx[Op.getImmTy()] = I;
} else {
llvm_unreachable("Invalid operand type");
}
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแฅ แจแแชแแแแ แแ แแ แแก. แแแ แแแแแก แแแจแแแแแแ แแแแแแแแ แแแงแแแแแฃแแ if แแแแแ แแแแ แแแแ แซแแแแแแ, แแแจแแ แแ แแฅแแก แแแแจแแแแแแแ, แแ แแก แกแแแแแแซแ แกแแขแงแแ แกแฎแแ แแฃ แแ แ. แแแแแกแแแแ แจแแแแฎแแแแแจแ, แแแแ แแ แแแแแ แแ แแแฃแจแแแแแก. แแแแแช แแแฃแจแแ แกแฎแแ แฎแแแก แแแแก แฃแคแ แ แแแฃแ แแแแแแแก แแ แกแแจแแจแก. แแฃ แแแแแแแแจแ แแแแ แซแแแแแแ แฅแ แแแ, แแแแ แแแแฌแงแแแก แแฃแจแแแแแก แกแ แฃแแแแ แแแแกแฎแแแแแแฃแแแ. แฉแแแ แแแ แแ แฏแแแแ แแแแแแแขแ แกแฎแแ.
แคแ แแแแแแขแ N20: แแแแแ แขแแแแก แแแฎแ แจแแชแแแแ
LLVM_DUMP_METHOD void Symbol::dump(raw_ostream &OS) const {
std::string Result;
if (isUndefined())
Result += "(undef) ";
if (isWeakDefined())
Result += "(weak-def) ";
if (isWeakReferenced())
Result += "(weak-ref) ";
if (isThreadLocalValue())
Result += "(tlv) ";
switch (Kind) {
case SymbolKind::GlobalSymbol:
Result + Name.str(); // <=
break;
case SymbolKind::ObjectiveCClass:
Result + "(ObjC Class) " + Name.str(); // <=
break;
case SymbolKind::ObjectiveCClassEHType:
Result + "(ObjC Class EH) " + Name.str(); // <=
break;
case SymbolKind::ObjectiveCInstanceVariable:
Result + "(ObjC IVar) " + Name.str(); // <=
break;
}
OS << Result;
}
PVS-Studio แแแคแ แแฎแแแแแแแ:
- V655 [CWE-480] แกแขแ แแฅแแแแแ แแงแ แแแแแแจแแ แแแฃแแ, แแแแ แแ แแ แแแแแแงแแแแแ. แแคแแฅแ แแ "Result + Name.str()" แแแแแฎแแขแแแก แจแแแแฌแแแแแแ. แกแแแแแแ.cpp 32
- V655 [CWE-480] แกแขแ แแฅแแแแแ แแงแ แแแแแแจแแ แแแฃแแ, แแแแ แแ แแ แแแแแแงแแแแแ. แแคแแฅแ แแ "แจแแแแแ + "(ObjC Class)" + Name.str()" แแแแแฎแแขแแแก แจแแแแฌแแแแแแ. แกแแแแแแ.cpp 35
- V655 [CWE-480] แกแขแ แแฅแแแแแ แแงแ แแแแแแจแแ แแแฃแแ, แแแแ แแ แแ แแแแแแงแแแแแ. แแคแแฅแ แแ "แจแแแแแ + "(ObjC Class EH) " + Name.str()" แแแแแฎแแขแแแก แจแแแแฌแแแแ. แกแแแแแแ.cpp 38
- V655 [CWE-480] แกแขแ แแฅแแแแแ แแงแ แแแแแแจแแ แแแฃแแ, แแแแ แแ แแ แแแแแแงแแแแแ. แแคแแฅแ แแ "แจแแแแแ + "(ObjC IVar)" + Name.str()" แแแแแฎแแขแแแก แจแแแแฌแแแแแแ. แกแแแแแแ.cpp 41
แจแแแแฎแแแแแ += แแแแ แแขแแ แแก แแแชแแแแ แแแแแแงแแแแแ + แแแแ แแขแแ แ. แจแแแแแ แแ แแก แแแแแแแ, แ แแแแแแช แแแแแแแฃแแแ แแแแจแแแแแแแแก.
แคแ แแแแแแขแ N21: แแแแฃแกแแแฆแแ แแแ แฅแชแแแ
static void getReqFeatures(std::map<StringRef, int> &FeaturesMap,
const std::vector<Record *> &ReqFeatures) {
for (auto &R : ReqFeatures) {
StringRef AsmCondString = R->getValueAsString("AssemblerCondString");
SmallVector<StringRef, 4> Ops;
SplitString(AsmCondString, Ops, ",");
assert(!Ops.empty() && "AssemblerCondString cannot be empty");
for (auto &Op : Ops) {
assert(!Op.empty() && "Empty operator");
if (FeaturesMap.find(Op) == FeaturesMap.end())
FeaturesMap[Op] = FeaturesMap.size();
}
}
}
แจแแแชแแแแ แแแแแ แแแแแแ แกแแจแแจแ แแแแ. แแ แแก แแ แแก แกแฃแ แแแ แงแฃแ แแแฆแแแแก แแแแแกแแขแแแแ, แ แแแ แแแฃแงแแแแแแแแ แแ แจแแฎแแแแ แแแกแฃแฎแก:
PVS-Studio แแแคแ แแฎแแแแแ:
แแ แแแแแแแก แฎแแแ:
FeaturesMap[Op] = FeaturesMap.size();
แแฃ แแแแแแแขแ Op แแ แแ แแก แแแแแแแ, แจแแแแแ แ แฃแแแจแ แแฅแแแแแ แแฎแแแ แแแแแแแขแ แแ แแฅ แแฌแแ แแแ แแ แ แฃแแแจแ แแแแแแแขแแแแก แ แแแแแแแแ. แฃแแ แแแแ แฃแชแแแแแ แแแแแแซแแฎแแแ แแฃ แแ แ แคแฃแแฅแชแแ แแแแ แแฎแแแ แแแแแแแขแแก แแแแแขแแแแแแ แแ แแแก แจแแแแแ.
แคแ แแแแแแขแ N22-N24: แแแแแแแ แแแแแ แแแแแแแแแแ
Error MachOObjectFile::checkSymbolTable() const {
....
} else {
MachO::nlist STE = getSymbolTableEntry(SymDRI);
NType = STE.n_type; // <=
NType = STE.n_type; // <=
NSect = STE.n_sect;
NDesc = STE.n_desc;
NStrx = STE.n_strx;
NValue = STE.n_value;
}
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแ แ แแแแแแ, แแฅ แ แแแแฃแ แ แจแแชแแแแ แแงแแก. แฃแแ แแแแ แแ แแกแแญแแ แ แแแแแแแ แแแแแ แแแแแแแแ. แแแแ แแ แแแแแช แจแแชแแแแแ.
แแแแแแแแฃแ แแ:
- V519 [CWE-563] 'B.NDesc' แชแแแแแก แแแแญแแแ แแแแจแแแแแแแแแ แแแแแแแ แแ แฏแแ . แแแแแ แแก แจแแชแแแแแ. แจแแแแแฌแแแ แฎแแแแแ: 1488, 1489. llvm-nm.cpp 1489
- V519 [CWE-563] แชแแแแแก แแแแญแแแ แแแแจแแแแแแแแแ แแแแแแแ แแ แฏแแ . แแแแแ แแก แจแแชแแแแแ. แจแแแแแฌแแแ แฎแแแแแ: 59, 61. coff2yaml.cpp 61
แคแ แแแแแแขแ N25-N27: แแแขแ แแแแแแแฌแแแแแ
แแฎแแ แแแแแ แจแแแฎแแแแ แแแแแแแฌแแแแแแก แแแแแ แแแแกแฎแแแแแแฃแ แแแ แกแแแก.
bool Vectorizer::vectorizeLoadChain(
ArrayRef<Instruction *> Chain,
SmallPtrSet<Instruction *, 16> *InstructionsProcessed) {
....
unsigned Alignment = getAlignment(L0);
....
unsigned NewAlign = getOrEnforceKnownAlignment(L0->getPointerOperand(),
StackAdjustedAlignment,
DL, L0, nullptr, &DT);
if (NewAlign != 0)
Alignment = NewAlign;
Alignment = NewAlign;
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V519 [CWE-563] โAlignmentโ แชแแแแแก แแแแญแแแ แแแแจแแแแแแแแแ แแแแแแแ แแ แฏแแ . แแแแแ แแก แจแแชแแแแแ. แจแแแแแฌแแแ แฎแแแแแ: 1158, 1160. LoadStoreVetorizer.cpp 1160
แแก แแ แแก แซแแแแแ แฃแชแแแฃแ แ แแแแ, แ แแแแแแช แแจแแแ แแ แจแแแชแแแก แแแแแแฃแ แจแแชแแแแแก. แแแกแแฌแงแแกแจแ, แชแแแแแ แแแแแ แแแแก แแแแจแแแแแแแ แแแแญแแแ แแแแแแแ แแแแแแแ แแแแแแแแแแ แ. แแ แจแแแแแ แแแแแแแแ แแแแแ แฎแแแแ, แแแแ แแ แแฎแแ แงแแแแแแแแ แ แจแแแแฌแแแแแก แแแ แแจแ.
แแกแแแแกแ แกแแขแฃแแชแแแแ แจแแแแซแแแแ แแแฎแแ แแฅ:
- V519 [CWE-563] "แแคแแฅแขแแแ" แชแแแแแก แแแแญแแแ แแแแจแแแแแแแแแ แแแแแแแ แแ แฏแแ . แแแแแ แแก แจแแชแแแแแ. แจแแแแแฌแแแ แฎแแแแแ: 152, 165. WebAssemblyRegStackify.cpp 165
- V519 [CWE-563] 'ExpectNoDerefChunk' แชแแแแแก แแแแญแแแ แแแแจแแแแแแแแแ แแแแแแแ แแ แฏแแ . แแแแแ แแก แจแแชแแแแแ. แจแแแแแฌแแแ แฎแแแแแ: 4970, 4973. SemaType.cpp 4973
แคแ แแแแแแขแ N28: แงแแแแแแแแก แญแแจแแแ แแขแ แแแแแแแ แแแแ
static int readPrefixes(struct InternalInstruction* insn) {
....
uint8_t byte = 0;
uint8_t nextByte;
....
if (byte == 0xf3 && (nextByte == 0x88 || nextByte == 0x89 ||
nextByte == 0xc6 || nextByte == 0xc7)) {
insn->xAcquireRelease = true;
if (nextByte != 0x90) // PAUSE instruction support // <=
break;
}
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แจแแแแฌแแแแแก แแแ แ แแ แแฅแแก. แชแแแแแ แจแแแแแแ แแแแขแ แงแแแแแแแแก แแ แฃแแ แแก แฆแแ แแแฃแแแแแก 0x90, แ แแแแแแช แแแแแแแแแแ แแแแก แฌแแแ แจแแแแฌแแแแแแแ. แแก แแ แแก แแ แแแแแ แ แแแแแแฃแ แ แจแแชแแแแ.
แคแ แแแแแแขแ N29 - N...: แงแแแแแแแแก แแแ แแแแแ/แแชแแแ แ แแแ แแแแแ
แแแแแแแแขแแ แ แแแกแชแแแก แแแแ แแแคแ แแฎแแแแแแก, แ แแ แแแแแ แแแแแแแ แแแแ (
static DecodeStatus DecodeGPRPairRegisterClass(MCInst &Inst, unsigned RegNo,
uint64_t Address, const void *Decoder) {
DecodeStatus S = MCDisassembler::Success;
if (RegNo > 13)
return MCDisassembler::Fail;
if ((RegNo & 1) || RegNo == 0xe)
S = MCDisassembler::SoftFail;
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแฃแแแแแ 0xE แแ แแก แแแแจแแแแแแแ 14 แแแฌแแแแแจแ. แแฅแกแแแ แขแแแ RegNo == 0xe แแแ แ แแ แแฅแแก, แ แแแแแ แแฃ RegNo > 13, แจแแแแแ แคแฃแแฅแชแแ แแแแกแ แฃแแแแก แแแก แจแแกแ แฃแแแแแก.
แแงแ แแ แแแแแ แกแฎแแ แแแคแ แแฎแแแแแ ID V547 แแ V560, แแแแ แแ แ แแแแ แช
แแ แแแแชแแแ แแแแแแแแก, แแฃ แ แแขแแ แแ แแก แแ แขแ แแแแ แแแแก แจแแกแฌแแแแ แแแกแแฌแงแแแ. แแแแแแแแขแแ แ แแแกแแแฃแขแฃแ แแ แแแ แแแแแ แแแคแ แแฎแแแแแแก แแแชแแแแกแแก แจแแแแแแ แแแแแกแแแแก. แแแแ แแ แแก แแ แแ แแก แจแแชแแแแ.
bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons,
tok::TokenKind ClosingBraceKind) {
bool HasError = false;
....
HasError = true;
if (!ContinueOnSemicolons)
return !HasError;
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V547 [CWE-570] แแแแแแฅแแ '!HasError' แงแแแแแแแแก แแชแแแ แแ. UnwrappedLineParser.cpp 1635
แคแ แแแแแแขแ N30: โโแกแแแญแแ แแแแ แฃแแแแ
static bool
isImplicitlyDef(MachineRegisterInfo &MRI, unsigned Reg) {
for (MachineRegisterInfo::def_instr_iterator It = MRI.def_instr_begin(Reg),
E = MRI.def_instr_end(); It != E; ++It) {
return (*It).isImplicitDef();
}
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแก แแ แแก แจแแชแแแแ แแ แแแแแ แแขแฃแแ แขแแฅแแแแ, แ แแแแแแช แแแแแแ แแกแแฎแแแก แแ แแแ แแแแกแขแแแแกแแแแก แ แแฆแแชแแก แแฎแกแแแก, แ แแแแแแแช แแแแฎแฃแแแแแ แแแแก. แแก แแแแแแแ แแ แแคแแ แก แแแแฎแกแแแก แแ แซแแแแแ แกแแแญแแแ แแแแแแงแฃแ แแแ. แฏแแแแ แแกแ แแ แแแฌแแ แ :).
แแแแฆแแแ? แแแจแแ แฉแแแก แแ แงแแแแก แแแแแแแแแแก แแ แแ.
แแฎแแแ แแแแแแแกแขแแแแ แแแแแแแแแแแ แแแคแแฅแขแแแ
แซแแแแ แแแแแแแกแขแแแแก 30 แแแแฅแขแแฃแ แแแ แแแแแ แกแแแแแ แแกแแ. แแแแแ แแฎแแ แแแแฎแแ, แ แ แกแแแแขแแ แแกแ แ แแ แจแแแซแแแแ แแแแซแแแแแก แแฎแแแ แแแแแแแกแขแแแแ, แ แแแแแแช แจแแแแแ แแแแแฉแแแ แแแแแแแแขแแ แจแ
แคแ แแแแแแขแ N31: แแแฃแฌแแแแแแแ แแแแ
Error CtorDtorRunner::run() {
....
if (auto CtorDtorMap =
ES.lookup(JITDylibSearchList({{&JD, true}}), std::move(Names),
NoDependenciesToRegister, true))
{
....
return Error::success();
} else
return CtorDtorMap.takeError();
CtorDtorsByPriority.clear();
return Error::success();
}
PVS-Studio แแแคแ แแฎแแแแแ:
แ แแแแ แช แฎแแแแแ, แแแแ แแขแแ แแก แแ แแแ แคแแแแแแ if แแแแแ แแแแ แแแแ แแขแแ แแแ แแแ แแ แแแแ แฃแแแแแก. แจแแกแแแแแแกแแ, แแแแขแแแแแ แ CtorDtorsByPriority แแ แแกแแแแก แแแแฌแแแแแแแ.
แคแ แแแแแแขแ N32: แแแฃแฌแแแแแแแ แแแแ
bool LLParser::ParseSummaryEntry() {
....
switch (Lex.getKind()) {
case lltok::kw_gv:
return ParseGVEntry(SummaryID);
case lltok::kw_module:
return ParseModuleEntry(SummaryID);
case lltok::kw_typeid:
return ParseTypeIdEntry(SummaryID); // <=
break; // <=
default:
return Error(Lex.getLoc(), "unexpected summary kind");
}
Lex.setIgnoreColonInIdentifiers(false); // <=
return false;
}
PVS-Studio แแแคแ แแฎแแแแแ: V779 [CWE-561] แแฆแแแฉแแแแแแ แแแฃแฌแแแแแแแ แแแแ. แจแแกแแซแแแแแแแ, แ แแ แจแแชแแแแ แแงแแก. LLParser.cpp 835
แกแแแแขแแ แแกแ แกแแขแฃแแชแแแ. แฏแแ แแ แแแแแแก แจแแแฎแแแแ:
return ParseTypeIdEntry(SummaryID);
break;
แแ แแ แจแแฎแแแแแ แฉแแแก, แ แแ แแฅ แจแแชแแแแ แแ แแ แแก. แแแแ แแขแแ แก แฐแแแแก แจแแกแแแแแแ แแฅ แแ แแก แแแแแขแแแแแ แแ แจแแแแซแแแแ แฃแแ แแแแ แฌแแจแแแแ แแแ. แแฃแแชแ, แงแแแแแคแแ แ แแกแ แแแ แขแแแ แแ แแ แแก.
แแแแแแแแขแแ แ แแแกแชแแแก แแแคแ แแฎแแแแแแก แฎแแแแแแ:
Lex.setIgnoreColonInIdentifiers(false);
return false;
แแ แแแ แแแแช, แแก แแแแ แแแฃแฌแแแแแแแแ. แงแแแแ แกแแฅแแแจแ แแแแแ แแแ แแแแแ แแแแ แแแแ แแขแแ แแก แแแ แแ แแแแ แฃแแแแแก. แแฎแแ แแ แฃแแแ แ แแแ แขแ แจแแกแแแแแแ แแ แช แแกแ แฃแแแแแแแ แแแแแแงแฃแ แแแ! แแแแแ แแ แ-แแ แแ แคแแแแแแ แฃแแแ แแแกแ แฃแแแแก แจแแกแแแแแแแแ แ แแแแ แฃแแแแแก?
แคแ แแแแแแขแ N33: แแแฆแแแ แแแขแแแแก แจแแแแฎแแแแแแ แแแแแขแแแ แแแ
unsigned getStubAlignment() override {
if (Arch == Triple::systemz)
return 8;
else
return 1;
}
Expected<unsigned>
RuntimeDyldImpl::emitSection(const ObjectFile &Obj,
const SectionRef &Section,
bool IsCode) {
....
uint64_t DataSize = Section.getSize();
....
if (StubBufSize > 0)
DataSize &= ~(getStubAlignment() - 1);
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแแฎแแแ แแแแแแแแแกแฌแแแแ, แ แแ แคแฃแแฅแชแแ getStubAlignment แแแ แฃแแแแก แขแแแก แฎแแแแแฌแแ แแแ. แแแแแ แแแแแแแแแแแ แแแแแฎแแขแแแก แแแแจแแแแแแแ, แแแแแ แแฃแแแ, แ แแ แคแฃแแฅแชแแ แแแแแ แฃแแแแก แแแแจแแแแแแแแก 8:
~(getStubAlignment() - 1)
~ (8u-1)
0xFFFFFFFF8u
แแฎแแ แจแแแแฉแแแแ, แ แแ แชแแแแแ แแแแแชแแแแ แแแแ แแฅแแก 64 แแแขแแแแ แฎแแแแแฃแฌแแ แแแ แขแแแ. แแแแแแแก, แ แแ DataSize & 0xFFFFFFF8u แแแแ แแชแแแแแก แจแแกแ แฃแแแแแกแแก แแชแแแแแ แแแขแแแ แแแฆแแแ แ แแแแก แแแขแ แแฃแแแแแ แแฅแแแแ แแแแแขแแแ แแฃแแ. แกแแแแ แแฃแแแ, แแก แแ แแ แแก แแก, แ แแช แแ แแแ แแแแกแขแก แกแฃแ แแ. แแญแแ แแแฅแแก, แ แแ แแแก แกแฃแ แแ แแแแแแแแ: DataSize & 0xFFFFFFFFFFFFFFFFFF8u.
แจแแชแแแแแก แแแแแกแแกแฌแแ แแแแแ, แแฅแแแ แฃแแแ แแแฌแแ แแ แแก:
DataSize &= ~(static_cast<uint64_t>(getStubAlignment()) - 1);
แแแฃ:
DataSize &= ~(getStubAlignment() - 1ULL);
แคแ แแแแแแขแ N34: แแแ แแแฎแแ แฎแแ แแฅแกแแแแชแแขแฃแ แ แขแแแแก แแแแแชแแแ
template <typename T>
void scaleShuffleMask(int Scale, ArrayRef<T> Mask,
SmallVectorImpl<T> &ScaledMask) {
assert(0 < Scale && "Unexpected scaling factor");
int NumElts = Mask.size();
ScaledMask.assign(static_cast<size_t>(NumElts * Scale), -1);
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแจแแแ แ แขแแแแก แฉแแแแกแฎแแ แแแแแแงแแแแแ, แ แแแ แแแแแแแ แแฅแแแก แแชแแแแแฃแแ แขแแแแก แชแแแแแแแแก แแแแ แแแแแแ int. แแฃแแชแ, แแจแแแ แ แขแแแแก แฉแแแแกแฎแแ แแฅ แแ แแชแแแก แแแแแแแแแกแแแ. แฏแแ แชแแแแแแแ แแแแ แแแแแแแ แแ แแฎแแแแ แแแแก แจแแแแแ แแแแ แแแแแแแก 32-แแแขแแแแ แจแแแแแ แแแคแแ แแแแแแแ แขแแแแ
แคแ แแแแแแขแ N35: แฌแแ แฃแแแขแแแแแ แแแแแ แแแ-แแแกแขแ
Instruction *InstCombiner::visitFCmpInst(FCmpInst &I) {
....
if (!match(Op0, m_PosZeroFP()) && isKnownNeverNaN(Op0, &TLI)) {
I.setOperand(0, ConstantFP::getNullValue(Op0->getType()));
return &I;
}
if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) {
I.setOperand(1, ConstantFP::getNullValue(Op0->getType())); // <=
return &I;
}
....
}
แแก แแฎแแแ แกแแแแขแแ แแกแ แแแแแแแกแขแแแ แแแแกแแแฆแแ แแแก แกแแขแฃแแชแแแแก, แ แแแแกแแช แแแแแก แแแฌแแแ แแแแแแแ แแแฃแแแ แแ แแแกแจแ แแ แกแแแฃแแ แแแแแแ แแ แกแแฎแแแฌแแแแแ แแแแฌแงแ, แแแแ แแ แแ แ แแแแแแแก แแแ แแ แแแฃแกแฌแแ แแแแแ.
แแแฎแแแ แแแแแแแแแกแฌแแแแ, แ แแ แแแแ แ แแแแแจแ แแกแแแ แจแแแชแแแแ แแ 0 on แแ 1. แแแแ แแ แแ แ แแแแแแแก แแ แแแแกแฌแแ แแก. แแแแ แแแแแแแแแ แแกแ แฃแแแ แแฌแแ แ:
if (!match(Op1, m_PosZeroFP()) && isKnownNeverNaN(Op1, &TLI)) {
I.setOperand(1, ConstantFP::getNullValue(Op1->getType()));
return &I;
}
แคแ แแแแแแขแ N36: Variable Confusion
struct Status {
unsigned Mask;
unsigned Mode;
Status() : Mask(0), Mode(0){};
Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
Mode &= Mask;
};
....
};
PVS-Studio แแแคแ แแฎแแแแแ:
แซแแแแ แกแแจแแจแแ แคแฃแแฅแชแแแก แแ แแฃแแแแขแแแแก แแแแแ แกแแฎแแแแแแก แแแแแญแแแ, แ แแแแ แช แแแแกแแก แฌแแแ แแแ. แซแแแแแ แแแแแแแ แแแแแแฃแแแแ. แฉแแแแแแ แกแฌแแ แแ แแกแแแ แจแแแแฎแแแแแ. แแ แแแแแแฅแแแก แแแ แ แแ แแฅแแก:
Mode &= Mask;
แคแฃแแฅแชแแแก แแ แแฃแแแแขแ แแชแแแแแ. แฒกแฃแ แแก แแ แแก. แแก แแ แแฃแแแแขแ แแฆแแ แแแแแแงแแแแแ. แแแแ แแแแแแแแแ แแกแ แฃแแแ แแแแแฌแแ แ:
Status(unsigned Mask, unsigned Mode) : Mask(Mask), Mode(Mode) {
this->Mode &= Mask;
};
แคแ แแแแแแขแ N37: Variable Confusion
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;
}
แแแคแ แแฎแแแแแ PVS-Studio: V1001 [CWE-563] แชแแแแแ "Size" แแแแแญแแแฃแแแ, แแแแ แแ แแ แแแแแแงแแแแแ แคแฃแแฅแชแแแก แแแแแแแ. แแแแแฅแขแ.cpp 424
แกแแขแฃแแชแแ แฌแแแแก แแกแแแแกแแ. แฃแแแ แแฌแแ แแก:
this->Size += this->EntrySize;
แคแ แแแแแแขแ N38-N47: แแแแแแฌแงแแแ แแแแแฅแกแแก แจแแแแฌแแแแ
แแแ แ แฉแแแ แแแแแแฎแแแแ แแแแแแแกแขแแแฃแ แ แขแ แแแแ แแแแก แแแแแแแแแแ
int getGEPCost(Type *PointeeType, const Value *Ptr,
ArrayRef<const Value *> Operands) {
....
if (Ptr != nullptr) { // <=
assert(....);
BaseGV = dyn_cast<GlobalValue>(Ptr->stripPointerCasts());
}
bool HasBaseReg = (BaseGV == nullptr);
auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType()); // <=
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V1004 [CWE-476] 'Ptr' แแแฉแแแแแแแแ แแแแแงแแแแแฃแแ แแฅแแ แแ แแฃแกแแคแ แแฎแ แแแก แจแแแแแ, แ แแช แแแแแกแขแฃแ แแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 729, 738. TargetTransformInfoImpl.h 738
แชแแแแแแแแ แแขแ แจแแแซแแแแ แแงแแก แแแแแแแ แ nullptr, แ แแแแ แช แแแกแขแฃแ แแแแ แฉแแแแ:
if (Ptr != nullptr)
แแฃแแชแ, แแ แแแฉแแแแแแแแก แฅแแแแแ แแแแแแแแฃแแแ แฌแแแแกแฌแแ แ แจแแแแฌแแแแแก แแแ แแจแ:
auto PtrSizeBits = DL.getPointerTypeSizeInBits(Ptr->getType());
แแแแแแฎแแแแ แแแแแ แแ แแ แแกแแแแกแ แจแแแแฎแแแแ.
llvm::DISubprogram *CGDebugInfo::getFunctionFwdDeclOrStub(GlobalDecl GD,
bool Stub) {
....
auto *FD = dyn_cast<FunctionDecl>(GD.getDecl());
SmallVector<QualType, 16> ArgTypes;
if (FD) // <=
for (const ParmVarDecl *Parm : FD->parameters())
ArgTypes.push_back(Parm->getType());
CallingConv CC = FD->getType()->castAs<FunctionType>()->getCallConv(); // <=
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V1004 [CWE-476] 'FD' แแแฉแแแแแแแแ แแแแแงแแแแแฃแแ แแฅแแ แแ แแฃแกแแคแ แแฎแ แแแก แจแแแแแ, แ แแช แแแแแกแขแฃแ แแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 3228, 3231. CGDebugInfo.cpp 3231
แงแฃแ แแแฆแแแ แแแแฅแชแแแ แแแจแแแก FD. แแแ แฌแแฃแแแแฃแแ แแแ , แแ แแแแแแ แแจแแแ แแ แฉแแแก แแ แแแแกแแแฃแแ แแแฃแแ แแฎแกแแ แแ แแ แแก แกแแญแแ แ.
แแ แจแแแแแแ:
static void computePolynomialFromPointer(Value &Ptr, Polynomial &Result,
Value *&BasePtr,
const DataLayout &DL) {
PointerType *PtrTy = dyn_cast<PointerType>(Ptr.getType());
if (!PtrTy) { // <=
Result = Polynomial();
BasePtr = nullptr;
}
unsigned PointerBits =
DL.getIndexSizeInBits(PtrTy->getPointerAddressSpace()); // <=
....
}
PVS-Studio แแแคแ แแฎแแแแแ: V1004 [CWE-476] 'PtrTy' แแแฉแแแแแแแแ แแแแแงแแแแแฃแแ แแฅแแ แแ แแฃแกแแคแ แแฎแ, แแแก แจแแแแแ, แ แแช แแแแแกแขแฃแ แแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 960, 965. InterleavedLoadCombinePass.cpp 965
แ แแแแ แแแแแชแแแ แแแแ แแกแแแ แจแแชแแแแแแแกแแแ? แแงแแแแ แฃแคแ แ แงแฃแ แแแฆแแแแแแ Code-Review-แแ แแ แแแแแแงแแแแ PVS-Studio แกแขแแขแแแฃแ แ แแแแแแแแขแแ แ แแฅแแแแ แแแแแก แ แแแฃแแแ แฃแแแ แจแแกแแแแฌแแแแแแ.
แแ แขแแแแก แจแแชแแแแแแแ แกแฎแแ แแแแแก แคแ แแแแแแขแแแแก แชแแขแแ แแแแก แแแ แ แแ แแฅแแก. แกแขแแขแแแจแ แแแแขแแแแ แแฎแแแแ แแแคแ แแฎแแแแแแแแก แฉแแแแแแแแแแก:
- V1004 [CWE-476] 'Expr' แแแฉแแแแแแแแ แแแแแงแแแแแฃแแ แแฅแแ แแ แแฃแกแแคแ แแฎแ, แแแก แจแแแแแ, แ แแช แแแแแกแขแฃแ แแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 1049, 1078. DebugInfoMetadata.cpp 1078
- V1004 [CWE-476] 'PI' แแแฉแแแแแแแแ แแแแแงแแแแแฃแแ แแฅแแ แแ แแฃแกแแคแ แแฎแ, แแแก แจแแแแแ, แ แแช แแแแแกแขแฃแ แแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 733, 753. LegacyPassManager.cpp 753
- V1004 [CWE-476] 'StatepointCall' แแแฉแแแแแแแแ แแแแแงแแแแแฃแแ แแฅแแ แแ แแฃแกแแคแ แแฎแ แแแก แจแแแแแ, แ แแช แแแแแกแขแฃแ แแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 4371, 4379. Verifier.cpp 4379
- V1004 [CWE-476] 'RV' แแแฉแแแแแแแแ แแแแแงแแแแแฃแแ แแฅแแ แแ แแฃแกแแคแ แแฎแ, แแแก แจแแแแแ, แ แแช แแแแแกแขแฃแ แแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 2263, 2268. TGParser.cpp 2268
- V1004 [CWE-476] 'CalleeFn' แแแฉแแแแแแแแ แแแแแงแแแแแฃแแ แแฅแแ แแ แแฃแกแแคแ แแฎแ, แแแก แจแแแแแ, แ แแช แแแแแกแขแฃแ แแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 1081, 1096. SimplifyLibCalls.cpp 1096
- V1004 [CWE-476] 'TC' แแแฉแแแแแแแแ แแแแแงแแแแแฃแแ แแฅแแ แแ แแฃแกแแคแ แแฎแ แแแก แจแแแแแ, แ แแช แแก แแแแแแแฌแแแแฃแแ แแฅแแ nullptr-แแแ แแแแแ แแแแแจแ. แจแแแแแฌแแแ แฎแแแแแ: 1819, 1824. Driver.cpp 1824
แคแ แแแแแแขแ N48-N60: แแ แ แแ แแขแแแฃแแ, แแแแ แแ แแแคแแฅแขแ (แจแแกแแซแแแ แแแฎแกแแแ แแแแก แแแแแแแ)
std::unique_ptr<IRMutator> createISelMutator() {
....
std::vector<std::unique_ptr<IRMutationStrategy>> Strategies;
Strategies.emplace_back(
new InjectorIRStrategy(InjectorIRStrategy::getDefaultOps()));
....
}
PVS-Studio แแแคแ แแฎแแแแแ:
แแแแแแแขแแก แแแกแแแแขแแแแแ แแแแขแแแแแ แแก แแแแแก, แ แแแแ แแชแแ std:: แแแฅแขแแ แ > แฃแแ แแแแ แฌแแ แ แแ แจแแแแซแแแ xxx.push_back (แแฎแแแ X), แแแแแแแแ แแ แแ แกแแแแแก แแแแฃแแแกแฎแแแแ แแแแแแ แขแแชแแ X* ะฒ std::unique_ptr.
แกแแแ แแ แแแแแกแแแแแ แแ แแก แฌแแ แ xxx.emplace_back(แแฎแแแ X)แแแแแแแแ แแแ แแแแแแก: แแแแแแก emplace_back แแแแแก แแแแแแแขแก แฃแจแฃแแแแ แแแกแ แแ แแฃแแแแขแแแแแแ แแ, แจแแกแแแแแแกแแ, แจแแฃแซแแแ แแแแแแงแแแแก แแฅแกแแแแชแแขแฃแ แ แแแแกแขแ แฃแฅแขแแ แแแ.
แแก แแ แแ แแก แฃแกแแคแ แแฎแ. แแฃ แแแฅแขแแ แ แกแแแกแแ, แแแจแแ แแแฎแกแแแ แแแ แฎแแแแฎแแ แแแแแแงแแคแ. แแแฎแกแแแ แแแแก แแแแแแแฌแแแแแแก แแแแ แแชแแ แจแแแซแแแแ แฌแแ แฃแแแขแแแแแ แแงแแก, แ แแก แจแแแแแแแแช แแแแแแแแแแกแ แฎแแแแ std::bad_alloc. แแ แจแแแแฎแแแแแจแ, แแแฉแแแแแแแแ แแแแแแ แแแแ แแ แจแแฅแแแแแ แแแแแฅแขแ แแ แแกแแแแก แฌแแแจแแแแ.
แฃแกแแคแ แแฎแ แแแแแกแแแแแ แแ แแก แจแแฅแแแ แฃแแแแแแฃแ แ_แแขแ แ แแแแแแช แคแแแแก แแแฉแแแแแแแแก, แกแแแแ แแแฅแขแแ แ แจแแแชแแแแ แแแฎแกแแแ แแแแก แแแแแแแฌแแแแแแก:
xxx.push_back(std::unique_ptr<X>(new X))
C++14-แแแ แจแแแแซแแแแ แแแแแแงแแแแ 'std::make_unique':
xxx.push_back(std::make_unique<X>())
แแ แขแแแแก แแแคแแฅแขแ แแ แแ แแก แแ แแขแแแฃแแ LLVM-แกแแแแก. แแฃ แแแฎแกแแแ แแแแก แแแแแงแแคแ แจแแฃแซแแแแแแแ, แจแแแแแแแแแ แฃแแ แแแแ แจแแฉแแ แแแแ. แแฃแแชแ, แแแแแแแชแแแแแกแแแแก แฎแแแแ แซแแแแ
แแกแ แ แแ, แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแก แแแแ แแ แฌแแ แแแแแแแแก แแ แแฅแขแแแฃแ แกแแคแ แแฎแแก LLVM-แกแแแแก, แแแแแฉแแแ, แ แแ แกแแกแแ แแแแแ แแงแ แแ แจแแชแแแแแก แแแแฃแจแแก แจแแกแแฎแแ แกแแฃแแแ แ แแ แ แแ PVS-Studio แแแแแแแแขแแ แแ แแกแฌแแแแ แแแกแ แแแแแขแแคแแชแแ แแแ.
แแ แขแแแแก แกแฎแแ แแแคแ แแฎแแแแแแแ:
- V1023 [CWE-460] แแฃแ แกแแ แ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Passes' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. PassManager.h 546
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'AAs' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. AliasAnalysis.h 324
- V1023 [CWE-460] โEntriesโ แแแแขแแแแแ แก โemplace_backโ แแแแแแแ แแแแขแแแ แแแฉแแแแแแแแก แแคแแแแแแแก แแแ แแจแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. DWARFDebugFrame.cpp 519
- V1023 [CWE-460] แแฃแ แกแแ แ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'AllEdges' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. CFGMST.h 268
- V1023 [CWE-460] โVMapsโ แแแแขแแแแแ แก โemplace_backโ แแแแแแแ แแแแขแแแ แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. SimpleLoopUnswitch.cpp 2012 แฌ
- V1023 [CWE-460] แแฃแ แกแแ แ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Records' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. FDRLogBuilder.h 30
- V1023 [CWE-460] แแแฉแแแแแแแแก แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'PendingSubmodules' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. ModuleMap.cpp 810
- V1023 [CWE-460] แแแฉแแแแแแแแก แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Objects' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. DebugMap.cpp 88
- V1023 [CWE-460] โแกแขแ แแขแแแแแแแกโ แแแแขแแแแแ แก แแแแขแแแ แแแฉแแแแแแแแก แแคแแแแแแแก แแแ แแจแ โemplace_backโ แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-isel-fuzzer.cpp 60
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Modifiers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-stress.cpp 685
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Modifiers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-stress.cpp 686
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Modifiers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-stress.cpp 688
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Modifiers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-stress.cpp 689
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Modifiers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-stress.cpp 690
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Modifiers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-stress.cpp 691
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Modifiers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-stress.cpp 692
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Modifiers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-stress.cpp 693
- V1023 [CWE-460] แแแฉแแแแแแแแ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Modifiers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. llvm-stress.cpp 694
- V1023 [CWE-460] แแแฉแแแแแแแแก แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Operands' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. GlobalISelEmitter.cpp 1911 แฌ
- V1023 [CWE-460] แแฃแ แกแแ แ แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Stash' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. GlobalISelEmitter.cpp 2100
- V1023 [CWE-460] แแแฉแแแแแแแแก แแคแแแแแแแก แแแ แแจแ แแแแขแแแ 'Matchers' แแแแขแแแแแ แก 'emplace_back' แแแแแแแ. แแแแแแแแแแกแแก แจแแแแฎแแแแแจแ แแแฎแแแแ แแแฎแกแแแ แแแแก แแแแแแแ. GlobalISelEmitter.cpp 2702
แแแกแแแแ
แกแฃแ 60 แแแคแ แแฎแแแแแ แแแแฃแแแแ แแ แแแ แ แแแแฉแแ แแ. แแ แแก แแฃ แแ แ แกแฎแแ แแแคแแฅแขแแแ, แ แแแแแแกแแช PVS-Studio แแแแแแแแขแแ แ แแฆแแแแฉแแแก LLVM-แจแ? แฒแแแฎ แแแฅแแก. แแฃแแชแ, แ แแชแ แกแขแแขแแแกแแแแก แแแแแก แคแ แแแแแแขแแแก แแฌแแ แแ, แแแแแ แกแแฆแแแ แแงแ, แฃแคแ แ แกแฌแแ แแ, แฆแแแแช แแ แแงแ แแ แแแแแแฌแงแแแขแ, แ แแ แแ แ แแงแ, แแฆแ แแแแแ แฅแแ.
แแแแแ แแแฅแแก, แ แแ แแฅแแแแแแแก แกแแแแขแแ แแกแ แแฆแแแฉแแแ แแ แแกแฃแ แ แกแชแแแแ PVS-Studio แแแแแแแแขแแ แ.
แจแแแแซแแแแ แฉแแแแขแแแ แแแ แแแแแแแแขแแ แ แแ แแแแฆแแ แแแฆแแ แแแแแแแก แแแกแแฆแแแ แแฅ
แ แแช แแแแแแ แแ, แ แแแฃแแแ แฃแแแ แแแแแแงแแแแ แกแขแแขแแแฃแ แ แแแแแแแ. แแ แแฏแแ แแแ แจแแแแฌแแแแแแแฉแแแแก แแแแ แแแแฎแแ แชแแแแแแฃแแ แกแขแแขแแแฃแ แ แแแแแแแแก แแแแแแแแแแแแก แแแแฃแแแ แแแแชแแแก แแแแแแ แแ PVS-Studio แแ แแ แแก แแแ แแแแฃแ แ แกแชแแแแ แ.
แฌแแ แแแขแแแแแก แแแกแฃแ แแแแ แแฅแแแแ แแแแแก แฎแแ แแกแฎแแกแ แแ แกแแแแแแแแก แแแฃแแฏแแแแกแแแแจแ!
แแฃ แแกแฃแ แ แแแฃแแแแ แแ แแก แกแขแแขแแ แแแแแแกแฃแ แแแแแแ แแฃแแแขแแ แแแก, แแแฎแแแ, แแแแแแงแแแแ แแแ แแแแแแก แแแฃแแ: แแแแ แแ แแแ แแแแ.
แฌแงแแ แ: www.habr.com