Skip to content

Tests contain field initialization with undeclared stubs #606

@IDKWNTCMF

Description

@IDKWNTCMF

Description
When UnitTestBot generates tests for structs with fields of function pointer type, these fields are initialized with generated stubs. But stubs are not generated for internal structs stored by pointers, so undeclared stubs are used.

Example

typedef int (*some_func)();

struct InnerStruct {
    some_func func;
    int func_id;
};

struct MainStruct {
    struct InnerStruct* inner;
};

int process_struct_with_func_pointer(struct MainStruct* str) {
    if (str && str->inner && str->inner->func_id != 0) {
        return 1;
    }
    return 0;
}

To Reproduce
Steps to reproduce the behavior:

  1. Copy example above to your project
  2. Generate tests for function process_struct_with_func_pointer
  3. Try to run generated tests

Expected behavior
Tests are supposed to be executed successfully.

Actual behavior
An error test is generated with information about errors.

Generated test

TEST(regression, process_struct_with_func_pointer_test2)
{
    struct MainStruct str = {
        .inner = NULL
    };
    struct InnerStruct utbotInnerVar1 = {
        .func = InnerStruct_func_stub,
        .func_id = 255
    };

    str.inner = (struct InnerStruct*) &utbotInnerVar1;

    int actual = process_struct_with_func_pointer(&str);
    EXPECT_EQ(1, actual);
    struct MainStruct expected_str = {
        .inner = NULL
    };
}

Logs

/home/utbot/UTBotCpp/integration-tests/c-example/utbot_tests/makefiles/lib/structures/structs/../../../../../utbot_tests/lib/structures/structs/complex_structs_dot_c_test.cpp:19:17: error: use of undeclared identifier 'InnerStruct_func_stub'
        .func = InnerStruct_func_stub,
                ^
/home/utbot/UTBotCpp/integration-tests/c-example/utbot_tests/makefiles/lib/structures/structs/../../../../../utbot_tests/lib/structures/structs/complex_structs_dot_c_test.cpp:38:17: error: use of undeclared identifier 'InnerStruct_func_stub'
        .func = InnerStruct_func_stub,
                ^
2 errors generated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions