Set ValueType for auto with ternary (#5304)
This commit is contained in:
parent
827e87afe7
commit
7f22ef4e14
|
@ -645,11 +645,11 @@ static void misra_10_1_ternary(void)
|
||||||
|
|
||||||
a = ui16 << ui16; // 10.6
|
a = ui16 << ui16; // 10.6
|
||||||
a = ui16 << (get_bool(42) ? ui16 : ui16);
|
a = ui16 << (get_bool(42) ? ui16 : ui16);
|
||||||
a = ui16 << (get_bool(42) ? ui16 : (get_bool(34) ? ui16 : ui16)); // 10.4
|
a = ui16 << (get_bool(42) ? ui16 : (get_bool(34) ? ui16 : ui16));
|
||||||
a = ui16 << (get_bool(42) ? (get_bool(34) ? ui16 : ui16) : ui16); // 10.4
|
a = ui16 << (get_bool(42) ? (get_bool(34) ? ui16 : ui16) : ui16);
|
||||||
a = ui16 << (get_bool(42) ? i16 : (get_bool(34) ? ui16 : ui16)); // 10.1
|
a = ui16 << (get_bool(42) ? i16 : (get_bool(34) ? ui16 : ui16)); // 10.1 10.4
|
||||||
a = ui16 << (get_bool(42) ? (get_bool(34) ? ui16 : i16) : ui16); // 10.1 10.4
|
a = ui16 << (get_bool(42) ? (get_bool(34) ? ui16 : i16) : ui16); // 10.1 10.4
|
||||||
a = ui16 << (get_bool(42) ? (get_bool(34) ? ui16 : ui16) : i16); // 10.1
|
a = ui16 << (get_bool(42) ? (get_bool(34) ? ui16 : ui16) : i16); // 10.1 10.4
|
||||||
a = ui16 << (get_bool(42) ? (get_bool(34) ? ui16 : ui8) : ui8); // 10.4
|
a = ui16 << (get_bool(42) ? (get_bool(34) ? ui16 : ui8) : ui8); // 10.4
|
||||||
a = ui16 << (get_bool(42) ? (get_bool(34) ? i16 : ui8) : ui8); // 10.1 10.4
|
a = ui16 << (get_bool(42) ? (get_bool(34) ? i16 : ui8) : ui8); // 10.1 10.4
|
||||||
a = (get_bool(42) ? (get_bool(34) ? ui16 : ui8) : ui8) << ui16; // 10.4
|
a = (get_bool(42) ? (get_bool(34) ? ui16 : ui8) : ui8) << ui16; // 10.4
|
||||||
|
@ -1171,7 +1171,7 @@ static void misra_14_2_fn1(bool b) {
|
||||||
g += 2;
|
g += 2;
|
||||||
i2 ^= 2; // 14.2
|
i2 ^= 2; // 14.2
|
||||||
if (i2 == 2) {
|
if (i2 == 2) {
|
||||||
g += g_arr[i2];
|
g += g_arr[i2]; // cppcheck-suppress legacyUninitvar
|
||||||
}
|
}
|
||||||
misra_14_2_init_value(&i2); // TODO: Fix false negative in function call
|
misra_14_2_init_value(&i2); // TODO: Fix false negative in function call
|
||||||
}
|
}
|
||||||
|
|
|
@ -6552,6 +6552,11 @@ void SymbolDatabase::setValueType(Token* tok, const ValueType& valuetype, Source
|
||||||
setValueType(parent, *vt1);
|
setValueType(parent, *vt1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vt1->isTypeEqual(vt2)) {
|
||||||
|
setValueType(parent, *vt1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vt1->pointer != 0U) {
|
if (vt1->pointer != 0U) {
|
||||||
|
|
|
@ -510,6 +510,7 @@ private:
|
||||||
TEST_CASE(auto18);
|
TEST_CASE(auto18);
|
||||||
TEST_CASE(auto19);
|
TEST_CASE(auto19);
|
||||||
TEST_CASE(auto20);
|
TEST_CASE(auto20);
|
||||||
|
TEST_CASE(auto21);
|
||||||
|
|
||||||
TEST_CASE(unionWithConstructor);
|
TEST_CASE(unionWithConstructor);
|
||||||
|
|
||||||
|
@ -5716,8 +5717,7 @@ private:
|
||||||
ASSERT_EQUALS(E1->value, 1);
|
ASSERT_EQUALS(E1->value, 1);
|
||||||
const Token* const a = Token::findsimplematch(tokenizer.tokens(), "auto");
|
const Token* const a = Token::findsimplematch(tokenizer.tokens(), "auto");
|
||||||
ASSERT(a && a->valueType());
|
ASSERT(a && a->valueType());
|
||||||
TODO_ASSERT(E1->scope == a->valueType()->typeScope);
|
ASSERT(E1->scope == a->valueType()->typeScope);
|
||||||
ASSERT_EQUALS(a->valueType()->type, ValueType::INT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void sizeOfType() {
|
void sizeOfType() {
|
||||||
|
@ -9399,7 +9399,6 @@ private:
|
||||||
ASSERT(autoTok && autoTok->valueType());
|
ASSERT(autoTok && autoTok->valueType());
|
||||||
ASSERT_EQUALS(autoTok->valueType()->constness, 3);
|
ASSERT_EQUALS(autoTok->valueType()->constness, 3);
|
||||||
ASSERT_EQUALS(autoTok->valueType()->pointer, 1);
|
ASSERT_EQUALS(autoTok->valueType()->pointer, 1);
|
||||||
TODO_ASSERT(autoTok->valueType()->reference == Reference::LValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void auto19() { // #11517
|
void auto19() { // #11517
|
||||||
|
@ -9454,6 +9453,23 @@ private:
|
||||||
ASSERT_EQUALS(g->function()->tokenDef->linenr(), 4);
|
ASSERT_EQUALS(g->function()->tokenDef->linenr(), 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void auto21() {
|
||||||
|
GET_SYMBOL_DB("int f(bool b) {\n"
|
||||||
|
" std::vector<int> v1(1), v2(2);\n"
|
||||||
|
" auto& v = b ? v1 : v2;\n"
|
||||||
|
" v.push_back(1);\n"
|
||||||
|
" return v.size();\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
const Token* a = Token::findsimplematch(tokenizer.tokens(), "auto");
|
||||||
|
ASSERT(a && a->valueType());
|
||||||
|
ASSERT_EQUALS(a->valueType()->type, ValueType::CONTAINER);
|
||||||
|
const Token* v = Token::findsimplematch(a, "v . size");
|
||||||
|
ASSERT(v && v->valueType());
|
||||||
|
ASSERT_EQUALS(v->valueType()->type, ValueType::CONTAINER);
|
||||||
|
ASSERT(v->variable() && v->variable()->isReference());
|
||||||
|
}
|
||||||
|
|
||||||
void unionWithConstructor() {
|
void unionWithConstructor() {
|
||||||
GET_SYMBOL_DB("union Fred {\n"
|
GET_SYMBOL_DB("union Fred {\n"
|
||||||
" Fred(int x) : i(x) { }\n"
|
" Fred(int x) : i(x) { }\n"
|
||||||
|
|
Loading…
Reference in New Issue