This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430-GCC-opensource:某些库代码(newlib:libm、STDC++等)在 MSP430上使用了不正确的整数宽度

Guru**** 2564260 points
Other Parts Discussed in Thread: MSP430-GCC-OPENSOURCE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/927240/msp430-gcc-opensource-some-library-code-newlib-libm-stdc-etc-uses-incorrect-integer-widths-on-msp430

器件型号:MSP430-GCC-opensource

在编译 MSP430-GCC-opensource 工具链期间、我注意到这种类型的几个警告闪烁:

e_scalb.c:在函数'__ieeee754_scalb'中:
e_scalb.c:警告:溢出到转换 fromn 'long int'到'int'将值从'-65000'更改为'536'[-Woverflow]

这只是一个示例、还有其他一些示例、如中所示

newlib/libc/search/hash-c

newlib/libc/stdio/open_memstream.c:334

newlib/libc/stdlib/arc4rand.c:102

newlib/libm/common/s_round.c (第71行、16位整数常量被20个位置移位)

GCC/include/demangle.h (第58行、另一个-Wshift-count-overflow)

libstdc++-v3/libsupc++/hash-bytes.cc:97 (可能可以、因为这仅用于散列计算)

此外、还有一些指向较小整数类型警告的指针表。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我意识到这些必须是上游固定的、但随着 TI 发布 MSP430-GCC-opensource 工具链、我在此报告这一点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    除了 demange.h 外、这些已针对下一个版本进行了修复。

    如果您愿意、我可以发布修补程序、修复此处的警告、以便您可以将它们应用到源代码中。

    对于它的价值、警告似乎没有表明代码存在任何实际问题;我没有观察到修复这些问题后对测试结果的任何改进。

    对于 demange.h 中的警告、没有直接的修复方法 明显的修复方法是将使用溢出移位定义的宏的移位量更改为位掩码中的一个可用间隙。 但是、位掩码中的这些视在间隙之前为其他值保留、因此更改它们的含义可能不安全。

    无论如何、我认为没有人会使用 MSP430目标库尝试还原 Rust 或 D 语言(MSP430-GCC 首先不支持这些语言)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不需要、谢谢。 不管怎么说、大多数这些都在一些模糊的地方、MSP430用户永远不会使用它们。

    我即将打开一篇文章、介绍 如何为 uint8_t / INT8_t 破坏 PRIu8/PRId8格式字符串宏、但这似乎已在 gcc 9.2.0中修复。