Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. Pushed to trunk as r16-312-g039ba6580f5328.
gcc/analyzer/ChangeLog: * sm-malloc.cc (malloc_diagnostic::describe_state_change): Tweak the "EXPR is NULL" message for the case where EXPR is a null pointer. gcc/testsuite/ChangeLog: * c-c++-common/analyzer/data-model-path-1.c: Check for "using NULL here" message. * c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early.c: Likewise. Check for "return of NULL" message. * c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c: Likewise. * gcc.dg/analyzer/data-model-5.c: Likewise. * gcc.dg/analyzer/data-model-5b.c: Likewise. * gcc.dg/analyzer/data-model-5c.c: Likewise. * gcc.dg/analyzer/torture/pr93647.c: Likewise. --- gcc/analyzer/sm-malloc.cc | 9 +++++++-- gcc/testsuite/c-c++-common/analyzer/data-model-path-1.c | 2 +- .../null-deref-pr108251-smp_fetch_ssl_fc_has_early.c | 4 ++-- .../analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c | 2 +- gcc/testsuite/gcc.dg/analyzer/data-model-5.c | 2 +- gcc/testsuite/gcc.dg/analyzer/data-model-5b.c | 2 +- gcc/testsuite/gcc.dg/analyzer/data-model-5c.c | 2 +- gcc/testsuite/gcc.dg/analyzer/torture/pr93647.c | 2 +- 8 files changed, 15 insertions(+), 10 deletions(-) diff --git a/gcc/analyzer/sm-malloc.cc b/gcc/analyzer/sm-malloc.cc index 01862686d58..333dfea47d3 100644 --- a/gcc/analyzer/sm-malloc.cc +++ b/gcc/analyzer/sm-malloc.cc @@ -785,8 +785,13 @@ public: else { if (change.m_expr) - pp_printf (&pp, "%qE is NULL", - change.m_expr); + { + if (zerop (change.m_expr)) + pp_printf (&pp, "using NULL here"); + else + pp_printf (&pp, "%qE is NULL", + change.m_expr); + } else pp_printf (&pp, "%qs is NULL", "<unknown>"); diff --git a/gcc/testsuite/c-c++-common/analyzer/data-model-path-1.c b/gcc/testsuite/c-c++-common/analyzer/data-model-path-1.c index d7058ea18e0..0609dc8cb4f 100644 --- a/gcc/testsuite/c-c++-common/analyzer/data-model-path-1.c +++ b/gcc/testsuite/c-c++-common/analyzer/data-model-path-1.c @@ -3,7 +3,7 @@ static int *__attribute__((noinline)) callee (void) { - return NULL; + return NULL; /* { dg-message "using NULL here" } */ } void test_1 (void) diff --git a/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early.c b/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early.c index c5f1fa42e6f..4f04e46695e 100644 --- a/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early.c +++ b/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early.c @@ -66,7 +66,7 @@ static inline struct connection *__objt_conn(enum obj_type *t) static inline struct connection *objt_conn(enum obj_type *t) { if (!t || *t != OBJ_TYPE_CONN) - return (struct connection *) ((void *)0); + return (struct connection *) ((void *)0); /* { dg-message "using NULL here" } */ return __objt_conn(t); } struct session { @@ -85,7 +85,7 @@ smp_fetch_ssl_fc_has_early(const struct arg *args, struct sample *smp, const cha SSL *ssl; struct connection *conn; - conn = objt_conn(smp->sess->origin); + conn = objt_conn(smp->sess->origin); /* { dg-message "return of NULL" } */ ssl = ssl_sock_get_ssl_object(conn); if (!ssl) return 0; diff --git a/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c b/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c index 9dcf7aa31f1..0ebeeff8348 100644 --- a/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c +++ b/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108400-SoftEtherVPN-WebUi.c @@ -60,7 +60,7 @@ void WuExpireSessionKey(WEBUI *wu) for(i=0; i<LIST_NUM(wu->Contexts); i++) { - STRMAP_ENTRY *entry = (STRMAP_ENTRY*)LIST_DATA(wu->Contexts, i); + STRMAP_ENTRY *entry = (STRMAP_ENTRY*)LIST_DATA(wu->Contexts, i); /* { dg-message "'entry' is NULL" } */ WU_CONTEXT *context = (WU_CONTEXT*)entry->Value; /* { dg-bogus "dereference of NULL 'entry'" "PR analyzer/108400" { xfail *-*-* } } */ if(context->ExpireDate < Tick64()) { diff --git a/gcc/testsuite/gcc.dg/analyzer/data-model-5.c b/gcc/testsuite/gcc.dg/analyzer/data-model-5.c index b71bad757a1..78e27521980 100644 --- a/gcc/testsuite/gcc.dg/analyzer/data-model-5.c +++ b/gcc/testsuite/gcc.dg/analyzer/data-model-5.c @@ -60,7 +60,7 @@ base_obj *alloc_obj (type_obj *ob_type, size_t sz) { base_obj *obj = (base_obj *)malloc (sz); if (!obj) - return NULL; + return NULL; /* { dg-message "using NULL here" } */ obj->ob_type = ob_type; obj->ob_refcnt = 1; return obj; diff --git a/gcc/testsuite/gcc.dg/analyzer/data-model-5b.c b/gcc/testsuite/gcc.dg/analyzer/data-model-5b.c index cd6a4df00dd..f66c8c4aefe 100644 --- a/gcc/testsuite/gcc.dg/analyzer/data-model-5b.c +++ b/gcc/testsuite/gcc.dg/analyzer/data-model-5b.c @@ -44,7 +44,7 @@ base_obj *alloc_obj (type_obj *ob_type, size_t sz) { base_obj *obj = (base_obj *)malloc (sz); if (!obj) - return NULL; + return NULL; /* { dg-message "using NULL here" } */ obj->ob_type = ob_type; obj->ob_refcnt = 1; return obj; diff --git a/gcc/testsuite/gcc.dg/analyzer/data-model-5c.c b/gcc/testsuite/gcc.dg/analyzer/data-model-5c.c index ad4e1d2644d..1ce355f7ff2 100644 --- a/gcc/testsuite/gcc.dg/analyzer/data-model-5c.c +++ b/gcc/testsuite/gcc.dg/analyzer/data-model-5c.c @@ -38,7 +38,7 @@ base_obj *alloc_obj (type_obj *ob_type, size_t sz) { base_obj *obj = (base_obj *)malloc (sz); if (!obj) - return NULL; + return NULL; /* { dg-message "using NULL here" } */ obj->ob_type = ob_type; obj->ob_refcnt = 1; return obj; diff --git a/gcc/testsuite/gcc.dg/analyzer/torture/pr93647.c b/gcc/testsuite/gcc.dg/analyzer/torture/pr93647.c index fbfe570780b..194c99aa42d 100644 --- a/gcc/testsuite/gcc.dg/analyzer/torture/pr93647.c +++ b/gcc/testsuite/gcc.dg/analyzer/torture/pr93647.c @@ -8,7 +8,7 @@ ky (int); void wd (void) { - tz = 0; + tz = 0; /* { dg-message "using NULL here" } */ ky (*tz); /* { dg-warning "dereference of NULL" } */ } -- 2.26.3