/dev/log01
昨天一个 maintainer 在 tg 上私信我:
> Hi, fyi 22nd release will branch next week
> (https://discourse.llvm.org/t/llvm-22-x-will-branch-next-week-tue-13th-jan/89377)
> which means all the patches landed after
> it will be revealed to public only half a
> year later.
感谢他提醒我,虽然因为隔着五个小时的时差导致我收到信息的时候是凌晨,进而导致作息又乱了..
clang-22 距离发版还有 5 天,现在手上还有 11 个在做的 PR (💦),更不幸的是 clang 发版时间和 我期末考试还撞一起了,寄完了 (明天考马原,目前一章没学,等下还得去找 pdf 背)
但感觉有几个 PR 或许有机会能压着时间点 land:
- 一是给 clang-tidy 某个 check 加 C++20 constinit 的支持,这个 PR 目前缺一些测试点和文档上的小修改,感觉今天晚上睡前顺手修掉问题不大
以及在和 Reviewer 对线的过程中发现了一个很有趣 (创) 的事情:
https://clang-tidy.godbolt.org/z/qTbvKs69W
"""
extern int b;
constinit int b = 42;
"""
先 extern 声明再 declare constinit, 最开始的 extern 不会拿到 constinit 的属性! (for anyone interested: 本地复现可以拿 clang -Xclang -ast-dump -fsyntax-only 跑出来,不过这种情况一般会用 clang-query..)
"""
|-VarDecl prev 0x11b00d88 <line:7:1, col:19> col:15 b 'int' cinit
| |-IntegerLiteral <col:19> 'int' 42
| `-ConstInitAttr <col:1> constinit
"""
另一位 maintainer 找出了 constexpr 也适用这个逻辑:https://godbolt.org/z/heea3fc8s,那代表说这个 check 原来的处理逻辑也是有 bug 的...
不管怎么样能定出来的 bug 都是好 bug,至少修起来会比较简单。
- 给一个 check 加新的 option: 这个 PR 被拖了差不多一个月,但隔壁 cppcheck 和 simplecpp 两个项目已经出现了缺这个 option 导致的问题,但 Reviewer 不 review 我其实也没什么办法,昨天给了一些代码风格和测试点上的意见,感觉全 address 后应该就差不多了?但感觉会很折磨,这个分支有点太老了,切过去大概要从头开始编译.. 准备等下问问伟大的 Gemini 有没有什么好办法。
一些如果能 land 会很好的 PR:
- CUDA support!!: 上周在尝试给 clang-tidy 加 CUDA 支持时,修了一个 Assert Failure 的问题,但 AaronBallman 在过圣诞假期,所以无人来审。
然后前两天一个 Google 的工程师说要给 Tooling 加一套编译信息的框架来解决这个问题,我觉得很难评,主要是我确实不知道 Clang Tooling 和 Clang Driver 是怎么交互的,而如果准备现在把这玩意搞清楚,那我概率论就可以重修去了 ( ^ω^)
- 数据流分析的 Regression: Bloomberg 一位工程师找到了一个 False Positive,看上去是 clang19 到 20 之间引入的 regression, 查了两个小时发现是新引入的缓存机制导致原始代码里 Matcher 的一个未知隐蔽 bug 开始发力 (世界上第三痛苦的事是 debug CI,第二痛苦的事是 bisect,最痛苦的事情是一边 bisect 一边写小作文……)
很难受的是虽然 bisect 出了 commit 但还是没方法稳定复现问题,我猜测是 range based loops 的问题,但数据流分析的东西太难手动构造出不收敛且好观测的情况了,直接爆炸。