github / github/codeql

CodeQL reports incorrect struct size for std::function

未关闭
#11,790 6 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
C++ question
主要语言
CodeQL
星标
10.1k
派生
2.1k
平均合并
2 天 15 小时
30 天内合并 PR
141

描述

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.

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。