|
107 | 107 | #include <climits> |
108 | 108 | #include <cstdlib> |
109 | 109 | #include <cstring> |
| 110 | +#include <ctime> |
110 | 111 | #include <exception> |
111 | 112 | #include <functional> |
112 | 113 | #include <initializer_list> |
@@ -8880,44 +8881,76 @@ void ValueFlow::setValues(TokenList *tokenlist, SymbolDatabase* symboldatabase, |
8880 | 8881 | valueFlowSameExpressions(tokenlist); |
8881 | 8882 | valueFlowConditionExpressions(tokenlist, symboldatabase, errorLogger, settings); |
8882 | 8883 |
|
| 8884 | + const std::time_t stopTime = (settings->performanceValueFlowMaxTime >= 0) ? (std::time(nullptr) + settings->performanceValueFlowMaxTime) : (~0ULL/2); |
| 8885 | + |
8883 | 8886 | std::size_t values = 0; |
8884 | 8887 | std::size_t n = 4; |
8885 | 8888 | while (n > 0 && values != getTotalValues(tokenlist)) { |
8886 | 8889 | values = getTotalValues(tokenlist); |
8887 | | - valueFlowImpossibleValues(tokenlist, settings); |
8888 | | - valueFlowSymbolicOperators(tokenlist, symboldatabase); |
8889 | | - valueFlowCondition(SymbolicConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings); |
8890 | | - valueFlowSymbolicInfer(tokenlist, symboldatabase); |
8891 | | - valueFlowArrayBool(tokenlist); |
8892 | | - valueFlowArrayElement(tokenlist, settings); |
8893 | | - valueFlowRightShift(tokenlist, settings); |
8894 | | - valueFlowAfterAssign(tokenlist, symboldatabase, errorLogger, settings); |
8895 | | - valueFlowAfterSwap(tokenlist, symboldatabase, errorLogger, settings); |
8896 | | - valueFlowCondition(SimpleConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings); |
8897 | | - valueFlowInferCondition(tokenlist, settings); |
8898 | | - valueFlowSwitchVariable(tokenlist, symboldatabase, errorLogger, settings); |
8899 | | - valueFlowForLoop(tokenlist, symboldatabase, errorLogger, settings); |
8900 | | - valueFlowSubFunction(tokenlist, symboldatabase, errorLogger, settings); |
8901 | | - valueFlowFunctionReturn(tokenlist, errorLogger); |
8902 | | - valueFlowLifetime(tokenlist, symboldatabase, errorLogger, settings); |
8903 | | - valueFlowFunctionDefaultParameter(tokenlist, symboldatabase); |
8904 | | - valueFlowUninit(tokenlist, symboldatabase, settings); |
| 8890 | + |
| 8891 | + if (std::time(nullptr) < stopTime) |
| 8892 | + valueFlowImpossibleValues(tokenlist, settings); |
| 8893 | + if (std::time(nullptr) < stopTime) |
| 8894 | + valueFlowSymbolicOperators(tokenlist, symboldatabase); |
| 8895 | + if (std::time(nullptr) < stopTime) |
| 8896 | + valueFlowCondition(SymbolicConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings); |
| 8897 | + if (std::time(nullptr) < stopTime) |
| 8898 | + valueFlowSymbolicInfer(tokenlist, symboldatabase); |
| 8899 | + if (std::time(nullptr) < stopTime) |
| 8900 | + valueFlowArrayBool(tokenlist); |
| 8901 | + if (std::time(nullptr) < stopTime) |
| 8902 | + valueFlowArrayElement(tokenlist, settings); |
| 8903 | + if (std::time(nullptr) < stopTime) |
| 8904 | + valueFlowRightShift(tokenlist, settings); |
| 8905 | + if (std::time(nullptr) < stopTime) |
| 8906 | + valueFlowAfterAssign(tokenlist, symboldatabase, errorLogger, settings); |
| 8907 | + if (std::time(nullptr) < stopTime) |
| 8908 | + valueFlowAfterSwap(tokenlist, symboldatabase, errorLogger, settings); |
| 8909 | + if (std::time(nullptr) < stopTime) |
| 8910 | + valueFlowCondition(SimpleConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings); |
| 8911 | + if (std::time(nullptr) < stopTime) |
| 8912 | + valueFlowInferCondition(tokenlist, settings); |
| 8913 | + if (std::time(nullptr) < stopTime) |
| 8914 | + valueFlowSwitchVariable(tokenlist, symboldatabase, errorLogger, settings); |
| 8915 | + if (std::time(nullptr) < stopTime) |
| 8916 | + valueFlowForLoop(tokenlist, symboldatabase, errorLogger, settings); |
| 8917 | + if (std::time(nullptr) < stopTime) |
| 8918 | + valueFlowSubFunction(tokenlist, symboldatabase, errorLogger, settings); |
| 8919 | + if (std::time(nullptr) < stopTime) |
| 8920 | + valueFlowFunctionReturn(tokenlist, errorLogger); |
| 8921 | + if (std::time(nullptr) < stopTime) |
| 8922 | + valueFlowLifetime(tokenlist, symboldatabase, errorLogger, settings); |
| 8923 | + if (std::time(nullptr) < stopTime) |
| 8924 | + valueFlowFunctionDefaultParameter(tokenlist, symboldatabase); |
| 8925 | + if (std::time(nullptr) < stopTime) |
| 8926 | + valueFlowUninit(tokenlist, symboldatabase, settings); |
| 8927 | + |
8905 | 8928 | if (tokenlist->isCPP()) { |
8906 | | - valueFlowAfterMove(tokenlist, symboldatabase, settings); |
8907 | | - valueFlowSmartPointer(tokenlist, errorLogger, settings); |
8908 | | - valueFlowIterators(tokenlist, settings); |
8909 | | - valueFlowCondition(IteratorConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings); |
8910 | | - valueFlowIteratorInfer(tokenlist, settings); |
8911 | | - valueFlowContainerSize(tokenlist, symboldatabase, errorLogger, settings); |
8912 | | - valueFlowCondition(ContainerConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings); |
8913 | | - } |
8914 | | - valueFlowSafeFunctions(tokenlist, symboldatabase, settings); |
| 8929 | + if (std::time(nullptr) < stopTime) |
| 8930 | + valueFlowAfterMove(tokenlist, symboldatabase, settings); |
| 8931 | + if (std::time(nullptr) < stopTime) |
| 8932 | + valueFlowSmartPointer(tokenlist, errorLogger, settings); |
| 8933 | + if (std::time(nullptr) < stopTime) |
| 8934 | + valueFlowIterators(tokenlist, settings); |
| 8935 | + if (std::time(nullptr) < stopTime) |
| 8936 | + valueFlowCondition(IteratorConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings); |
| 8937 | + if (std::time(nullptr) < stopTime) |
| 8938 | + valueFlowIteratorInfer(tokenlist, settings); |
| 8939 | + if (std::time(nullptr) < stopTime) |
| 8940 | + valueFlowContainerSize(tokenlist, symboldatabase, errorLogger, settings); |
| 8941 | + if (std::time(nullptr) < stopTime) |
| 8942 | + valueFlowCondition(ContainerConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings); |
| 8943 | + } |
| 8944 | + if (std::time(nullptr) < stopTime) |
| 8945 | + valueFlowSafeFunctions(tokenlist, symboldatabase, settings); |
8915 | 8946 | n--; |
8916 | 8947 | } |
8917 | 8948 |
|
8918 | | - valueFlowDynamicBufferSize(tokenlist, symboldatabase, settings); |
| 8949 | + if (std::time(nullptr) < stopTime) |
| 8950 | + valueFlowDynamicBufferSize(tokenlist, symboldatabase, settings); |
8919 | 8951 |
|
8920 | | - valueFlowDebug(tokenlist, errorLogger); |
| 8952 | + if (std::time(nullptr) < stopTime) |
| 8953 | + valueFlowDebug(tokenlist, errorLogger); |
8921 | 8954 | } |
8922 | 8955 |
|
8923 | 8956 | ValueFlow::Value ValueFlow::Value::unknown() |
|
0 commit comments