Found a 45 line (489 tokens) duplication in the following files: Starting at line 1021 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkio.cpp Starting at line 1169 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkio.cpp if (!Token::Match(argInfo.typeToken, "bool|short|long|int|char|wchar_t")) { if (!(!argInfo.isArrayOrPointer() && argInfo.element)) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); } else { switch (specifier[0]) { case 'h': if (specifier[1] == 'h') { if (!(argInfo.typeToken->str() == "char" && argInfo.typeToken->isUnsigned())) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); } else if (!(argInfo.typeToken->str() == "short" && argInfo.typeToken->isUnsigned())) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); break; case 'l': if (specifier[1] == 'l') { if (argInfo.typeToken->str() != "long" || !argInfo.typeToken->isLong()) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); else if (typesMatch(argInfo.typeToken->originalName(), "size_t") || argInfo.typeToken->originalName() == "uintmax_t") invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); } else if (argInfo.typeToken->str() != "long" || argInfo.typeToken->isLong()) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); else if (typesMatch(argInfo.typeToken->originalName(), "size_t") || argInfo.typeToken->originalName() == "uintmax_t") invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); break; case 'j': if (argInfo.typeToken->originalName() != "uintmax_t") invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); break; case 'z': if (!typesMatch(argInfo.typeToken->originalName(), "size_t")) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); break; case 't': if (!typesMatch(argInfo.typeToken->originalName(), "ptrdiff_t")) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); break; case 'I': if (specifier.find("I64") != std::string::npos) { if (argInfo.typeToken->str() != "long" || !argInfo.typeToken->isLong()) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); } else if (specifier.find("I32") != std::string::npos) { if (argInfo.typeToken->str() != "int" || argInfo.typeToken->isLong()) invalidPrintfArgTypeError_uint(tok, numFormat, specifier, &argInfo); } else if (!(typesMatch(argInfo.typeToken->originalName(), "size_t") || ===================================================================== Found a 11 line (155 tokens) duplication in the following files: Starting at line 414 of /home/danielmarjamaki/cppcheck-devinfo/lib/fwdanalysis.cpp Starting at line 3302 of /home/danielmarjamaki/cppcheck-devinfo/lib/valueflow.cpp exprVarIds.insert(tok->varId()); if (!Token::simpleMatch(tok->previous(), ".")) { const Variable *var = tok->variable(); if (var && var->isReference() && var->isLocal() && Token::Match(var->nameToken(), "%var% [=(]") && !isGlobalData(var->nameToken()->next()->astOperand2())) return ChildrenToVisit::none; const bool deref = tok->astParent() && (tok->astParent()->isUnaryOp("*") || (tok->astParent()->str() == "[" && tok == tok->astParent()->astOperand1())); local &= !nonLocal(tok->variable(), deref); } } return ChildrenToVisit::op1_and_op2; }); ===================================================================== Found a 23 line (143 tokens) duplication in the following files: Starting at line 810 of /home/danielmarjamaki/cppcheck-devinfo/lib/mathlib.cpp Starting at line 851 of /home/danielmarjamaki/cppcheck-devinfo/lib/mathlib.cpp } state = Status::START; if (str.empty()) return false; std::string::const_iterator it = str.cbegin(); if ('+' == *it || '-' == *it) ++it; for (; it != str.cend(); ++it) { switch (state) { case Status::START: if (*it == '0') state = Status::HEX_0; else return false; break; case Status::HEX_0: if (*it == 'x' || *it == 'X') state = Status::HEX_X; else return false; break; case Status::HEX_X: if (isxdigit(static_cast(*it))) state = Status::DIGIT; ===================================================================== Found a 16 line (139 tokens) duplication in the following files: Starting at line 38 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkinternal.cpp Starting at line 214 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkinternal.cpp void CheckInternal::checkTokenMatchPatterns() { const SymbolDatabase *symbolDatabase = mTokenizer->getSymbolDatabase(); for (const Scope *scope : symbolDatabase->functionScopes) { for (const Token* tok = scope->bodyStart->next(); tok != scope->bodyEnd; tok = tok->next()) { if (!Token::simpleMatch(tok, "Token :: Match (") && !Token::simpleMatch(tok, "Token :: findmatch (")) continue; const std::string& funcname = tok->strAt(2); // Get pattern string const Token *patternTok = tok->tokAt(4)->nextArgument(); if (!patternTok || patternTok->tokType() != Token::eString) continue; const std::string pattern = patternTok->strValue(); ===================================================================== Found a 9 line (134 tokens) duplication in the following files: Starting at line 767 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 779 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 791 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 803 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 815 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 827 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 839 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 851 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 863 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 875 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 887 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 899 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp functions["atan2"] = [](const std::vector& args) { if (args.size() != 2 || !std::all_of(args.cbegin(), args.cend(), [](const ValueFlow::Value& v) { return v.isFloatValue() || v.isIntValue(); })) return ValueFlow::Value::unknown(); const double value = args[0].isFloatValue() ? args[0].floatValue : args[0].intvalue; ValueFlow::Value v; combineValueProperties(args[0], args[1], v); v.floatValue = std::atan2(value, args[1].isFloatValue() ? args[1].floatValue : args[1].intvalue); ===================================================================== Found a 19 line (133 tokens) duplication in the following files: Starting at line 6247 of /home/danielmarjamaki/cppcheck-devinfo/lib/symboldatabase.cpp Starting at line 6287 of /home/danielmarjamaki/cppcheck-devinfo/lib/symboldatabase.cpp const Scope* scope = start_scope; while (scope && tok && tok->isName()) { if (tok->strAt(1) == "::" || (tok->strAt(1) == "<" && Token::simpleMatch(tok->linkAt(1), "> ::"))) { scope = scope->findRecordInNestedList(tok->str()); if (scope) { if (tok->strAt(1) == "::") tok = tok->tokAt(2); else tok = tok->linkAt(1)->tokAt(2); } else { start_scope = start_scope->nestedIn; if (!start_scope) break; scope = start_scope; tok = startTok; } } else { const Scope* scope1{}; ===================================================================== Found a 2 line (131 tokens) duplication in the following files: Starting at line 1823 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkclass.cpp Starting at line 1834 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkclass.cpp } else if (Token::simpleMatch(itr, "!=") && ((Token::simpleMatch(itr->astOperand1(), "this") && Token::simpleMatch(itr->astOperand2(), "&") && Token::simpleMatch(itr->astOperand2()->next(), rhs->str().c_str(), rhs->str().size())) || (Token::simpleMatch(itr->astOperand2(), "this") && Token::simpleMatch(itr->astOperand1(), "&") && Token::simpleMatch(itr->astOperand1()->next(), rhs->str().c_str(), rhs->str().size())))) { ===================================================================== Found a 19 line (128 tokens) duplication in the following files: Starting at line 3161 of /home/danielmarjamaki/cppcheck-devinfo/lib/templatesimplifier.cpp Starting at line 3231 of /home/danielmarjamaki/cppcheck-devinfo/lib/templatesimplifier.cpp Token * const tok2 = instantiation.token(); if (!mTokenList.getFiles().empty()) mErrorLogger.reportProgress(mTokenList.getFiles()[0], "TemplateSimplifier::simplifyTemplateInstantiations()", tok2->progressValue()); if (maxtime > 0 && std::time(nullptr) > maxtime) { if (mSettings.debugwarnings) { ErrorMessage::FileLocation loc(mTokenList.getFiles()[0], 0, 0); ErrorMessage errmsg({std::move(loc)}, emptyString, Severity::debug, "Template instantiation maximum time exceeded", "templateMaxTime", Certainty::normal); mErrorLogger.reportErr(errmsg); } return false; } assert(mTokenList.validateToken(tok2)); // that assertion fails on examples from #6021 ===================================================================== Found a 24 line (120 tokens) duplication in the following files: Starting at line 648 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkother.cpp Starting at line 673 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkother.cpp const std::string bitOp = tok2->strAt(1)[0] + tok2->strAt(2); const std::map::const_iterator i2 = varsWithBitsSet.find(tok2->varId()); // This variable has not had a bit operation performed on it yet, so just make a note of it if (i2 == varsWithBitsSet.end()) { varsWithBitsSet[tok2->varId()] = tok2; bitOperations[tok2->varId()] = bitOp; } // The same bit operation has been performed on the same variable twice, so report an error else if (bitOperations[tok2->varId()] == bitOp) redundantBitwiseOperationInSwitchError(i2->second, i2->second->str()); // A different bit operation was performed on the variable, so clear it else { varsWithBitsSet.erase(tok2->varId()); bitOperations.erase(tok2->varId()); } } // Bitwise operation. Report an error if it's performed twice before a break. E.g.: // case 3: b = b | 1; // <== redundant // case 4: b = b | 1; else if (Token::Match(tok2->previous(), ";|{|}|: %var% = %name% %or%|& %num% ;") && ===================================================================== Found a 15 line (118 tokens) duplication in the following files: Starting at line 1438 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkio.cpp Starting at line 1457 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkio.cpp const Function * function = varTok->link()->previous()->function(); if (function && function->retType && function->retType->isEnumType()) { if (function->retType->classScope->enumType) typeToken = function->retType->classScope->enumType; else { tempToken = new Token(tok1); tempToken->str("int"); typeToken = tempToken; } } else if (function && function->retDef) { typeToken = function->retDef; while (typeToken->str() == "const" || typeToken->str() == "extern") typeToken = typeToken->next(); functionInfo = function; element = true; ===================================================================== Found a 19 line (118 tokens) duplication in the following files: Starting at line 317 of /home/danielmarjamaki/cppcheck-devinfo/lib/mathlib.cpp Starting at line 396 of /home/danielmarjamaki/cppcheck-devinfo/lib/mathlib.cpp biguint ret = 0; for (std::string::size_type i = str[0] == '0'?2:3; i < str.length(); i++) { if (str[i] != '1' && str[i] != '0') break; ret <<= 1; if (str[i] == '1') ret |= 1; } if (str[0] == '-') ret = -ret; return ret; } if (isFloat(str)) { // Things are going to be less precise now: the value can't be represented in the biguint type. // Use min/max values as an approximation. See #5843 // TODO: bail out when we are out of range? const double doubleval = toDoubleNumber(str); if (doubleval > (double)std::numeric_limits::max()) ===================================================================== Found a 8 line (112 tokens) duplication in the following files: Starting at line 1731 of /home/danielmarjamaki/cppcheck-devinfo/lib/templatesimplifier.cpp Starting at line 2081 of /home/danielmarjamaki/cppcheck-devinfo/lib/templatesimplifier.cpp for (const Token *typetok = mTypesUsedInTemplateInstantiation[itype].token(); typetok && (typeindentlevel > 0 || endStr.find(typetok->str()[0]) == std::string::npos); typetok = typetok->next()) { if (typeindentlevel == 0 && typetok->str() == "*") pointerType = true; if (Token::simpleMatch(typetok, "...")) continue; if (Token::Match(typetok, "%name% <") && (typetok->strAt(2) == ">" || templateParameters(typetok->next()))) ===================================================================== Found a 9 line (110 tokens) duplication in the following files: Starting at line 4066 of /home/danielmarjamaki/cppcheck-devinfo/lib/tokenize.cpp Starting at line 1196 of /home/danielmarjamaki/cppcheck-devinfo/lib/token.cpp if (tok1->strAt(-1) == ">") tok1 = tok1->previous()->findOpeningBracket(); if (tok1 && Token::Match(tok1->tokAt(-3), "%name% :: %name%")) { tok1 = tok1->tokAt(-2); std::string scope = tok1->strAt(-1); while (Token::Match(tok1->tokAt(-2), ":: %name%")) { scope = tok1->strAt(-3) + " :: " + scope; tok1 = tok1->tokAt(-2); } ===================================================================== Found a 12 line (109 tokens) duplication in the following files: Starting at line 704 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkuninitvar.cpp Starting at line 746 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkuninitvar.cpp if (tok->str() == "?") { if (!tok->astOperand2()) return true; const bool used1 = isVariableUsed(tok->astOperand2()->astOperand1(), var); const bool used0 = isVariableUsed(tok->astOperand2()->astOperand2(), var); const bool err = (number_of_if == 0) ? (used1 || used0) : (used1 && used0); if (err) uninitvarError(tok, var.nameToken()->str(), *alloc); // Todo: skip expression if there is no error return true; } ===================================================================== Found a 10 line (109 tokens) duplication in the following files: Starting at line 3169 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkclass.cpp Starting at line 3187 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkclass.cpp void CheckClass::overrideError(const Function *funcInBase, const Function *funcInDerived) { const std::string functionName = funcInDerived ? ((funcInDerived->isDestructor() ? "~" : "") + funcInDerived->name()) : ""; const std::string funcType = (funcInDerived && funcInDerived->isDestructor()) ? "destructor" : "function"; ErrorPath errorPath; if (funcInBase && funcInDerived) { errorPath.emplace_back(funcInBase->tokenDef, "Virtual " + funcType + " in base class"); errorPath.emplace_back(funcInDerived->tokenDef, char(std::toupper(funcType[0])) + funcType.substr(1) + " in derived class"); } ===================================================================== Found a 10 line (106 tokens) duplication in the following files: Starting at line 1148 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkcondition.cpp Starting at line 1180 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkcondition.cpp if (isOppositeCond(true, tok->astOperand1(), tok2, mSettings->library, true, false)) { std::string expr1(tok->astOperand1()->expressionString()); std::string expr2(tok->astOperand2()->astOperand1()->expressionString()); std::string expr3(tok->astOperand2()->astOperand2()->expressionString()); // make copy for later because the original string might get overwritten const std::string expr1VerboseMsg = expr1; const std::string expr2VerboseMsg = expr2; const std::string expr3VerboseMsg = expr3; if (expr1.length() + expr2.length() + expr3.length() > 50U) { ===================================================================== Found a 8 line (105 tokens) duplication in the following files: Starting at line 690 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 701 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 712 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 723 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 734 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 745 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 756 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 922 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 933 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 944 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 955 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 966 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 977 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 988 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 999 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1010 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1021 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1032 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1043 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1054 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1065 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1076 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1087 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1098 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1109 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1120 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1131 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1142 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1153 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1164 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1175 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1186 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp functions["sin"] = [](const std::vector& args) { if (args.size() != 1) return ValueFlow::Value::unknown(); ValueFlow::Value v = args[0]; if (!v.isFloatValue() && !v.isIntValue()) return ValueFlow::Value::unknown(); const double value = args[0].isFloatValue() ? args[0].floatValue : args[0].intvalue; v.floatValue = std::sin(value); ===================================================================== Found a 16 line (104 tokens) duplication in the following files: Starting at line 1796 of /home/danielmarjamaki/cppcheck-devinfo/lib/cppcheck.cpp Starting at line 409 of /home/danielmarjamaki/cppcheck-devinfo/lib/checkunusedfunctions.cpp const std::string xmlfile = buildDir + '/' + filesTxtLine.substr(0,firstColon); //const std::string sourcefile = filesTxtLine.substr(lastColon+1); tinyxml2::XMLDocument doc; const tinyxml2::XMLError error = doc.LoadFile(xmlfile.c_str()); if (error != tinyxml2::XML_SUCCESS) continue; const tinyxml2::XMLElement * const rootNode = doc.FirstChildElement(); if (rootNode == nullptr) continue; for (const tinyxml2::XMLElement *e = rootNode->FirstChildElement(); e; e = e->NextSiblingElement()) { if (std::strcmp(e->Name(), "FileInfo") != 0) continue; const char *checkClassAttr = e->Attribute("check"); ===================================================================== Found a 9 line (103 tokens) duplication in the following files: Starting at line 1825 of /home/danielmarjamaki/cppcheck-devinfo/lib/templatesimplifier.cpp Starting at line 1833 of /home/danielmarjamaki/cppcheck-devinfo/lib/templatesimplifier.cpp if (start != closing) { dst->insertToken(start->str(), start->originalName(), start->getMacroName(), true); dst->previous()->linenr(start->linenr()); dst->previous()->column(start->column()); dst->previous()->isSigned(start->isSigned()); dst->previous()->isUnsigned(start->isUnsigned()); dst->previous()->isLong(start->isLong()); } } else { ===================================================================== Found a 8 line (101 tokens) duplication in the following files: Starting at line 690 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 701 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 712 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 723 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 734 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 745 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 756 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 911 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 922 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 933 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 944 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 955 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 966 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 977 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 988 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 999 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1010 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1021 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1032 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1043 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1054 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1065 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1076 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1087 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1098 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1109 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1120 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1131 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1142 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1153 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1164 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1175 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp Starting at line 1186 of /home/danielmarjamaki/cppcheck-devinfo/lib/programmemory.cpp functions["sin"] = [](const std::vector& args) { if (args.size() != 1) return ValueFlow::Value::unknown(); ValueFlow::Value v = args[0]; if (!v.isFloatValue() && !v.isIntValue()) return ValueFlow::Value::unknown(); const double value = args[0].isFloatValue() ? args[0].floatValue : args[0].intvalue; v.floatValue = std::sin(value);