-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Open
Labels
Description
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.