Skip to content

Commit d31ef09

Browse files
authored
Add necessary const qualifier in generated tests (#622)
* Add necessary const qualifier in several cases
1 parent 26dd5d9 commit d31ef09

File tree

6 files changed

+30
-11
lines changed

6 files changed

+30
-11
lines changed

server/src/Tests.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,8 @@ void KTestObjectParser::assignAllLazyPointers(
774774
testCase.lazyReferences.emplace_back(
775775
fromPtr.varName, toPtrName,
776776
PrinterUtils::initializePointerToVar(fromPtr.type.baseType(), toPtrName,
777-
fromPtr.type.getDimension()));
777+
fromPtr.type.getDimension(),
778+
fromPtr.type.isConstQualifiedValue()));
778779
}
779780
}
780781
}
@@ -1233,13 +1234,15 @@ KTestObjectParser::getLazyPointerView(const std::vector<UTBotKTestObject> &objec
12331234
initReferences.emplace_back(
12341235
name, ptr_element->name,
12351236
PrinterUtils::initializePointerToVar(paramType.baseType(), ptr_element->name,
1236-
paramType.getDimension()));
1237+
paramType.getDimension(),
1238+
paramType.isConstQualifiedValue()));
12371239
}
12381240
if (lazyPointer || ptr_element != objects.end()) {
12391241
res = PrinterUtils::C_NULL;
12401242
}
12411243
return std::make_shared<JustValueView>(
1242-
PrinterUtils::initializePointer(paramType.baseType(), res, paramType.getDimension()));
1244+
PrinterUtils::initializePointer(paramType.baseType(), res, paramType.getDimension(),
1245+
paramType.isConstQualifiedValue()));
12431246
}
12441247

12451248
bool Tests::MethodDescription::operator==(const Tests::MethodDescription &other) const {

server/src/Tests.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ namespace tests {
380380

381381
[[nodiscard]] std::string getFunctionParamDecl() const {
382382
if (type.isTwoDimensionalPointer() && types::TypesHandler::isVoid(type.baseTypeObj())) {
383-
std::string qualifier = type.isConstQualified() ? "const " : "";
383+
std::string qualifier = PrinterUtils::getConstQualifier(type.isConstQualifiedValue());
384384
return StringUtils::stringFormat("(%svoid **) %s", qualifier, name);
385385
} else if (type.isRValueReference()) {
386386
return "std::move(" + name + ")";

server/src/utils/PrinterUtils.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace PrinterUtils {
2727
}
2828

2929
std::string getterDecl(const std::string &returnTypeName,
30-
const std::string &wrapperName) {
30+
const std::string &wrapperName) {
3131
std::string gName = getterName(wrapperName);
3232
return StringUtils::stringFormat("%s %s()", returnTypeName, gName);
3333
}
@@ -46,6 +46,10 @@ namespace PrinterUtils {
4646
return StringUtils::stringFormat("access_private::%s(%s)", fieldName, objectName);
4747
}
4848

49+
std::string getConstQualifier(bool constQualifiedValue) {
50+
return constQualifiedValue ? "const " : "";
51+
}
52+
4953
std::string fillVarName(std::string const &access, std::string const &varName) {
5054
return StringUtils::stringFormat(access, varName);
5155
}
@@ -66,21 +70,25 @@ namespace PrinterUtils {
6670

6771
std::string initializePointer(const std::string &type,
6872
const std::string &value,
69-
size_t additionalPointersCount) {
73+
size_t additionalPointersCount,
74+
bool pointerToConstQualifiedValue) {
7075
if (value == C_NULL || std::stoull(value) == 0) {
7176
return C_NULL;
7277
} else {
7378
std::string additionalPointers = StringUtils::repeat("*", additionalPointersCount);
74-
return StringUtils::stringFormat("(%s%s) 0x%lx", type, additionalPointers,
79+
std::string qualifier = getConstQualifier(pointerToConstQualifiedValue);
80+
return StringUtils::stringFormat("(%s%s%s) 0x%lx", qualifier, type, additionalPointers,
7581
std::stoull(value));
7682
}
7783
}
7884

7985
std::string initializePointerToVar(const std::string &type,
8086
const std::string &varName,
81-
size_t additionalPointersCount) {
87+
size_t additionalPointersCount,
88+
bool pointerToConstQualifiedValue) {
8289
std::string additionalPointers = StringUtils::repeat("*", additionalPointersCount);
83-
return StringUtils::stringFormat("(%s%s) &%s", type, additionalPointers, varName);
90+
std::string qualifier = getConstQualifier(pointerToConstQualifiedValue);
91+
return StringUtils::stringFormat("(%s%s%s) &%s", qualifier, type, additionalPointers, varName);
8492
}
8593

8694
std::string generateNewVar(int cnt) {

server/src/utils/PrinterUtils.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ namespace PrinterUtils {
7575

7676
std::string getFieldAccess(const std::string &objectName, const types::Field &field);
7777

78+
std::string getConstQualifier(bool constQualifiedValue);
79+
7880
std::string fillVarName(std::string const &temp, std::string const &varName);
7981

8082
void appendIndicesToVarName(std::string &varName, const std::vector<size_t> &sizes, size_t offset);
@@ -95,11 +97,13 @@ namespace PrinterUtils {
9597

9698
std::string initializePointer(const std::string &type,
9799
const std::string &value,
98-
size_t additionalPointersCount);
100+
size_t additionalPointersCount,
101+
bool pointerToConstQualifiedValue);
99102

100103
std::string initializePointerToVar(const std::string &type,
101104
const std::string &varName,
102-
size_t additionalPointersCount);
105+
size_t additionalPointersCount,
106+
bool pointerToConstQualifiedValue);
103107

104108
std::string generateNewVar(int cnt);
105109

server/test/suites/server/multi_dim_pointers.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ int func_with_multi_dim_pointer(struct MainStruct **str) {
88
struct MainStruct *ptr = *str;
99
int sz = 0;
1010
if (ptr) {
11+
if (!ptr->name) {
12+
return -1;
13+
}
1114
struct ElementStruct *e = ptr->list.head;
1215
struct ElementStruct *n;
1316
for (int i = 0; i < 5; i++) {

server/test/suites/server/multi_dim_pointers.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ struct ListStruct {
1414

1515
struct MainStruct {
1616
struct ListStruct list;
17+
const char **name;
1718
};
1819

1920
int func_with_multi_dim_pointer(struct MainStruct **str);

0 commit comments

Comments
 (0)