Repository navigation
Commit 7f40723
committed
fix(pkg): compat.gmp 在 MSVC ABI 上给 gmp.h 的 _MSC_VER 分支补守卫
首轮 windows CI:516 个 TU 全部编译通过,链接死在十个重复符号 ——
__gmpz_get_ui / __gmpn_sub / … 各自在 gmp.h 的内联体和带 -D__GMP_FORCE_<fn>
的那个 TU 里各定义一次。
gmp.h 用一串厂商分支决定 inline 怎么写。GCC 分支给
`extern __inline__ __attribute__ ((__gnu_inline__))`,即 GNU89 语义:头里的函数体
只用于内联、永不作为独立符号发射,独立那份由 __GMP_FORCE_<fn> 的 TU 提供。而
`_MSC_VER` 那条是整串里唯一没有 `! defined (__GMP_EXTERN_INLINE)` 守卫的
(SunPro/SCO 都有),clang 打 MSVC ABI 时两个宏都定义,于是它把 GCC 的答案改写成
裸 `__inline` —— MS 语义下每个包含 gmp.h 的 TU 都发射一份外部定义。
上游没碰到,因为它没有 MSVC ABI 构建。补上邻居们已有的守卫即可,别处严格 no-op:
非 windows 不定义 _MSC_VER,真 MSVC 不定义 __GNUC__。生成器对补丁点做了"必须恰好
命中一次"的断言,上游改了这段会报错而不是静默漏打。
顺带修正一处注释:单个 gmpxx TU 的理由是"feature 表只能门控 sources、带不了
__GMP_WITHIN_GMPXX",不是 basename 撞名 —— 2026.8.3.4 起对象路径无条件嵌套,
本包自己就有三个 add.c 各自落在 obj/compat_gmp/gmp-6.3.0/{mpf,mpn/generic,mpz}/add.o。
本地(linux gcc@16.1.0 与 llvm@22.1.8)重跑 gmp / gmp-gmpxx 仍全绿 —— 该补丁在
非 windows 上不改变任何一个字节的行为。1 parent a974951 commit 7f40723
3 files changed
Lines changed: 110 additions & 17 deletions
File tree
- .agents/docs
- pkgs/c
- tools/gmp
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
131 | 131 | | |
132 | 132 | | |
133 | 133 | | |
134 | | - | |
135 | | - | |
136 | | - | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
137 | 140 | | |
138 | 141 | | |
139 | 142 | | |
| |||
142 | 145 | | |
143 | 146 | | |
144 | 147 | | |
145 | | - | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
146 | 177 | | |
147 | 178 | | |
148 | 179 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
931 | 931 | | |
932 | 932 | | |
933 | 933 | | |
934 | | - | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
935 | 942 | | |
936 | 943 | | |
937 | 944 | | |
| |||
3449 | 3456 | | |
3450 | 3457 | | |
3451 | 3458 | | |
3452 | | - | |
3453 | | - | |
3454 | | - | |
3455 | | - | |
3456 | | - | |
| 3459 | + | |
| 3460 | + | |
| 3461 | + | |
| 3462 | + | |
| 3463 | + | |
| 3464 | + | |
| 3465 | + | |
| 3466 | + | |
3457 | 3467 | | |
3458 | 3468 | | |
3459 | 3469 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
298 | 298 | | |
299 | 299 | | |
300 | 300 | | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
301 | 346 | | |
302 | 347 | | |
303 | 348 | | |
| |||
345 | 390 | | |
346 | 391 | | |
347 | 392 | | |
348 | | - | |
| 393 | + | |
| 394 | + | |
349 | 395 | | |
350 | | - | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
351 | 400 | | |
352 | 401 | | |
353 | 402 | | |
| |||
437 | 486 | | |
438 | 487 | | |
439 | 488 | | |
440 | | - | |
441 | | - | |
442 | | - | |
443 | | - | |
444 | | - | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
445 | 497 | | |
446 | 498 | | |
447 | 499 | | |
| |||
0 commit comments