[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gnulib-bug
Subject:    Re: gl_array_list.c:452:29: runtime error: applying zero offset to null pointer
From:       Paul Eggert <eggert () cs ! ucla ! edu>
Date:       2022-02-26 19:57:40
Message-ID: 3941a0cd-85af-b092-e619-e769603abbab () cs ! ucla ! edu
[Download RAW message or body]

On 11/1/21 18:13, Paul Eggert wrote:
> 
> Most likely Paweł can configure his testing environment to suppress 
> these false alarms. If not, I suggest firing off a bug report to the 
> Clang developers, asking for an easy way to suppress them. In practice 
> these particular diagnostics are more trouble than they're worth.

While rereading the Gnulib manual I remembered this issue, found a way 
to suppress Clang's false alarms, and documented it in the attached 
Gnulib patch.
["0001-Document-clang-fsanitize-undefined-glitch.patch" (text/x-patch)]

From 532b4c9f21473559657e273ef9f8f6fc8c7c2ab1 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Sat, 26 Feb 2022 11:39:32 -0800
Subject: [PATCH] Document clang -fsanitize=undefined glitch
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* doc/gnulib-intro.texi (Unsupported Platforms):
Document incompatibility of ‘clang -fsanitize=undefined'
with Gnulib, and how to work around it by also using
‘-fno-sanitize=pointer-overflow'.
---
 ChangeLog             |  8 ++++++++
 doc/gnulib-intro.texi | 11 +++++++++++
 2 files changed, 19 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 6daf85da3e..430f81fd39 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2022-02-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Document clang -fsanitize=undefined glitch
+	* doc/gnulib-intro.texi (Unsupported Platforms):
+	Document incompatibility of ‘clang -fsanitize=undefined'
+	with Gnulib, and how to work around it by also using
+	‘-fno-sanitize=pointer-overflow'.
+
 2022-02-25  Darshit Shah  <darnir@gnu.org>
 
 	modules/unicase/special-casing: Fix compilation error
diff --git a/doc/gnulib-intro.texi b/doc/gnulib-intro.texi
index a80c0995f5..0bc9701561 100644
--- a/doc/gnulib-intro.texi
+++ b/doc/gnulib-intro.texi
@@ -235,6 +235,17 @@ and Gnulib-using code would have if it were intended to be portable to
 all practical POSIX or C platforms.
 
 @itemize @bullet
+@item
+Clang's @option{-fsanitize=undefined} option causes the program to
+crash if it adds zero to a null pointer -- behavior that is undefined
+in strict C, but which yields a null pointer on all practical porting
+targets and which the Gnulib portability guidelines allow.
+
+If you use Clang with @option{-fsanitize=undefined}, you can work
+around the problem by also using @samp{-fno-sanitize=pointer-overflow},
+although this may also disable some unrelated and useful pointer checks.
+Perhaps someday the Clang developers will fix the infelicity.
+
 @item
 The IBM i's pointers are 128 bits wide and it lacks the two types
 @code{intptr_t} and @code{uintptr_t}, which are optional in the C and
-- 
2.32.0



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic