rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

AC6编译cstring.c和ctime.c产生编译警告comparison of nonnull parameter

Open wdfk-prog opened this issue 3 years ago • 5 comments

KEIL5 AC6编译器 编译cstring.c和ctime.c产生编译警告

compilers/common/cstring.c(194): error: nonnull parameter 'saveptr' will evaluate to 'true' on first encounter [-Werror,-Wpointer-bool-conversion] else if (saveptr && *saveptr) ^~~~~~~ ~~

ctime.c(255): error: comparison of nonnull parameter 't' equal to a null pointer is 'false' on first encounter [-Werror,-Wtautological-pointer-compare] if(t == RT_NULL || buf == RT_NULL) ^ ~~~~~~~

  • 警告具体含义如下:

https://clang.llvm.org/docs/DiagnosticsReference.html#wpointer-bool-conversion image https://clang.llvm.org/docs/DiagnosticsReference.html#wtautological-pointer-compare image

  • 警告具体位置如下:

image image

  • Build Output如下
Build started: Project: project
*** Using Compiler 'V6.18', folder: 'D:\Program Files(x86)\Keil\Keil_v5\ARM\ARMCLANG\Bin'
Build target 'rt-thread'
rt-thread/components/libc/compilers/common/cstring.c(194): error: nonnull parameter 'saveptr' will evaluate to 'true' on first encounter [-Werror,-Wpointer-bool-conversion]
    else if (saveptr && *saveptr)
             ^~~~~~~ ~~
D:\Program Files(x86)\Keil\Keil_v5\ARM\ARMCLANG\Bin\..\include\string.h(283): note: declared 'nonnull' here
extern _ARMABI char *strtok_r(char * /*s1*/, const char * /*s2*/, char ** /*ptr*/) __attribute__((__nonnull__(2,3)));
                                                                                                  ^
rt-thread/components/libc/compilers/common/cstring.c(217): error: nonnull parameter 'saveptr' will evaluate to 'true' on first encounter [-Werror,-Wpointer-bool-conversion]
    if (saveptr)
    ~~  ^~~~~~~
D:\Program Files(x86)\Keil\Keil_v5\ARM\ARMCLANG\Bin\..\include\string.h(283): note: declared 'nonnull' here
extern _ARMABI char *strtok_r(char * /*s1*/, const char * /*s2*/, char ** /*ptr*/) __attribute__((__nonnull__(2,3)));
                                                                                                  ^
2 errors generated.
compiling cstring.c...
rt-thread/components/libc/compilers/common/ctime.c(255): error: comparison of nonnull parameter 't' equal to a null pointer is 'false' on first encounter [-Werror,-Wtautological-pointer-compare]
    if(t == RT_NULL || buf == RT_NULL)
       ^    ~~~~~~~
D:\Program Files(x86)\Keil\Keil_v5\ARM\ARMCLANG\Bin\..\include\time.h(171): note: declared 'nonnull' here
                               char * __restrict /*buf*/) __attribute__((__nonnull__(1,2)));
                                                                         ^
rt-thread/components/libc/compilers/common/ctime.c(255): error: comparison of nonnull parameter 'buf' equal to a null pointer is 'false' on first encounter [-Werror,-Wtautological-pointer-compare]
    if(t == RT_NULL || buf == RT_NULL)
                       ^~~    ~~~~~~~
D:\Program Files(x86)\Keil\Keil_v5\ARM\ARMCLANG\Bin\..\include\time.h(171): note: declared 'nonnull' here
                               char * __restrict /*buf*/) __attribute__((__nonnull__(1,2)));
                                                                         ^
2 errors generated.
compiling ctime.c...
".\build\keil\Obj\rt-thread.axf" - 4 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed:  00:00:01

wdfk-prog avatar Oct 24 '22 07:10 wdfk-prog

使用 -Wno-pointer-bool-conversion -Wno-tautological-pointer-compare可取消警告 image

wdfk-prog avatar Oct 24 '22 07:10 wdfk-prog

emmm 虽然使用-Wxxx可以干掉警告,但是有些自欺欺人,我想想怎么处理

mysterywolf avatar Oct 24 '22 22:10 mysterywolf

emmm 虽然使用-Wxxx可以干掉警告,但是有些自欺欺人,我想想怎么处理

^_^,就是想不到怎么消除才提的。

wdfk-prog avatar Oct 25 '22 01:10 wdfk-prog

报这个错误感觉有些和以前的认知不同。if (saveptr && *saveptr) 按理说没问题,非null的saveptr参数,第一次为True,这个时候可以/需要检查第二次的条件。这个是不是报错太多了?

BernardXiong avatar Dec 05 '22 01:12 BernardXiong

这个问题先不处理,等smart完全合并之后统一处理,现在我也有一些问题攒着没有处理呢

mysterywolf avatar Dec 05 '22 01:12 mysterywolf

测试没问题:stm32f103-atk-nano,AC6.15

yangjie11 avatar Mar 24 '23 10:03 yangjie11