github / github/codeql

CodeQL reports incorrect struct size for std::function

Abierto
#11,790 6 comentarios 0 reacciones 0 asignados Ver en GitHub
C++ question
Lenguaje dominante
CodeQL
Estrellas
10.1k
Forks
2.1k
Merge medio
2 d 15 h
PR fusionados (30 d)
141

Descripción

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

struct Wrapper {
std::function 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.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.