Skip to content

CodeQL reports incorrect struct size for std::function #11790

@WilliamParks

Description

@WilliamParks

I've got a test case where CodeQL reports different structure sizes than the actual compiler.

This is using a recent compile of LLVM 15.0.6, on an M1 Mac, as well as the default OS clang binary. I have a fresh install of CodeQL, version 2.11.6.
Notably, this only happens when using clang++, and not when I use g++.

Minimized source file:

#include <functional>
 
struct Wrapper {
    std::function<void(int)> foo;
};

int main()
{
    printf("size %ld\n", sizeof(Wrapper));
}

Compilation command:

codeql database create ./clang_db --overwrite --language=cpp --command="/Users/b/tools/llvm-project/build/bin/clang++ -std=c++17 ./test.cpp -o clang_test"

CodeQL query:

import cpp

from Class c
where c.getName() = "Wrapper"
select c.getName(), c.getSize()

CodeQL Output

Compiling query plan for /Users/b/projects/DataCov/codeql/temp.ql.
[1/1 comp 2.4s] Compiled /Users/b/projects/DataCov/codeql/temp.ql.
temp.ql: Evaluation completed (124ms).
|  col0   | col1 |
+---------+------+
| Wrapper |   48 |
Shutting down query evaluator.

Running clang_test

size 32

Notably, the g++ compiled version reports the same size as CodeQL.

Metadata

Metadata

Assignees

No one assigned

    Labels

    C++questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions