From 53191045ac0d07ca2090fef0a85f065e53454508 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Fri, 24 May 2024 17:16:16 -0400 Subject: [PATCH] ctf: silence some -Wnull-dereference errors Building with gcc 14.1.1 (Arch Linux package 14.1.1+r58+gfc9fb69ad62-1), I get some `-Wnull-dereference` errors that seem bogus: CXX plugins/ctf/fs-src/fs.lo In file included from /usr/include/c++/14.1.1/memory:78, from /home/simark/src/babeltrace/src/cpp-common/bt2c/glib-up.hpp:10, from /home/simark/src/babeltrace/src/plugins/ctf/fs-src/fs.cpp:19: In member function 'std::__uniq_ptr_impl<_Tp, _Dp>::pointer std::__uniq_ptr_impl<_Tp, _Dp>::release() [with _Tp = ctf_fs_trace; _Dp = std::default_delete]', inlined from 'std::__uniq_ptr_impl<_Tp, _Dp>& std::__uniq_ptr_impl<_Tp, _Dp>::operator=(std::__uniq_ptr_impl<_Tp, _Dp>&&) [with _Tp = ctf_fs_trace; _Dp = std::default_delete]' at /usr/include/c++/14.1.1/bits/unique_ptr.h:185:7, inlined from 'std::__uniq_ptr_data<_Tp, _Dp, , >& std::__uniq_ptr_data<_Tp, _Dp, , >::operator=(std::__uniq_ptr_data<_Tp, _Dp, , >&&) [with _Tp = ctf_fs_trace; _Dp = std::default_delete; bool = true; bool = true]' at /usr/include/c++/14.1.1/bits/unique_ptr.h:237:24, inlined from 'std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(std::unique_ptr<_Tp, _Dp>&&) [with _Tp = ctf_fs_trace; _Dp = std::default_delete]' at /usr/include/c++/14.1.1/bits/unique_ptr.h:408:19, inlined from 'int ctf_fs_component_create_ctf_fs_trace(ctf_fs_component*, bt2::ConstArrayValue, const char*, bt_self_component*)' at /home/simark/src/babeltrace/src/plugins/ctf/fs-src/fs.cpp:1415:44: /usr/include/c++/14.1.1/bits/unique_ptr.h:211:17: error: potential null pointer dereference [-Werror=null-dereference] 211 | pointer __p = _M_ptr(); | ^~~ CXX plugins/ctf/lttng-live/viewer-connection.lo In file included from /usr/include/c++/14.1.1/bits/stl_tempbuf.h:61, from /usr/include/c++/14.1.1/memory:66, from /home/simark/src/babeltrace/src/cpp-common/bt2s/make-unique.hpp:10, from /home/simark/src/babeltrace/src/plugins/ctf/lttng-live/viewer-connection.cpp:16: In function 'void std::_Construct(_Tp*, _Args&& ...) [with _Tp = char; _Args = {}]', inlined from 'static _ForwardIterator std::__uninitialized_default_n_1::__uninit_default_n(_ForwardIterator, _Size) [with _ForwardIterator = char*; _Size = long unsigned int]' at /usr/include/c++/14.1.1/bits/stl_uninitialized.h:666:23, inlined from 'static _ForwardIterator std::__uninitialized_default_n_1::__uninit_default_n(_ForwardIterator, _Size) [with _ForwardIterator = char*; _Size = long unsigned int]' at /usr/include/c++/14.1.1/bits/stl_uninitialized.h:660:9, inlined from '_ForwardIterator std::__uninitialized_default_n(_ForwardIterator, _Size) [with _ForwardIterator = char*; _Size = long unsigned int]' at /usr/include/c++/14.1.1/bits/stl_uninitialized.h:712:20, inlined from '_ForwardIterator std::__uninitialized_default_n_a(_ForwardIterator, _Size, allocator<_Tp>&) [with _ForwardIterator = char*; _Size = long unsigned int; _Tp = char]' at /usr/include/c++/14.1.1/bits/stl_uninitialized.h:779:44, inlined from 'void std::vector<_Tp, _Alloc>::_M_default_append(size_type) [with _Tp = char; _Alloc = std::allocator]' at /usr/include/c++/14.1.1/bits/vector.tcc:863:35, inlined from 'void std::vector<_Tp, _Alloc>::resize(size_type) [with _Tp = char; _Alloc = std::allocator]' at /usr/include/c++/14.1.1/bits/stl_vector.h:1016:21, inlined from 'lttng_live_get_one_metadata_status lttng_live_get_one_metadata_packet(lttng_live_trace*, std::vector&)' at /home/simark/src/babeltrace/src/plugins/ctf/lttng-live/viewer-connection.cpp:1028:16: /usr/include/c++/14.1.1/bits/stl_construct.h:119:7: error: null pointer dereference [-Werror=null-dereference] 119 | ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Silence the warning at these specific spots to get the build going. Change-Id: Ia46b4f420cfdd00202d0b915825ac3b995128291 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/12776 Reviewed-by: Philippe Proulx Tested-by: jenkins --- src/common/macros.h | 1 + src/plugins/ctf/fs-src/fs.cpp | 3 +++ src/plugins/ctf/lttng-live/viewer-connection.cpp | 3 +++ 3 files changed, 7 insertions(+) diff --git a/src/common/macros.h b/src/common/macros.h index 8a518b03..81efe7fe 100644 --- a/src/common/macros.h +++ b/src/common/macros.h @@ -80,6 +80,7 @@ extern "C" { #define BT_DIAG_POP _Pragma ("GCC diagnostic push") #define BT_DIAG_IGNORE_SHADOW _Pragma("GCC diagnostic ignored \"-Wshadow\"") +#define BT_DIAG_IGNORE_NULL_DEREFERENCE _Pragma("GCC diagnostic ignored \"-Wnull-dereference\"") #if defined __clang__ # if __has_warning("-Wunused-but-set-variable") diff --git a/src/plugins/ctf/fs-src/fs.cpp b/src/plugins/ctf/fs-src/fs.cpp index e86d30ce..b17d2ad5 100644 --- a/src/plugins/ctf/fs-src/fs.cpp +++ b/src/plugins/ctf/fs-src/fs.cpp @@ -1412,7 +1412,10 @@ int ctf_fs_component_create_ctf_fs_trace(struct ctf_fs_component *ctf_fs, } } else { /* Just one trace, it may or may not have a UUID, both are fine. */ + BT_DIAG_PUSH + BT_DIAG_IGNORE_NULL_DEREFERENCE ctf_fs->trace = std::move(traces[0]); + BT_DIAG_POP } int ret = fix_packet_index_tracer_bugs(ctf_fs->trace.get()); diff --git a/src/plugins/ctf/lttng-live/viewer-connection.cpp b/src/plugins/ctf/lttng-live/viewer-connection.cpp index 46cfd2c4..b639b6ed 100644 --- a/src/plugins/ctf/lttng-live/viewer-connection.cpp +++ b/src/plugins/ctf/lttng-live/viewer-connection.cpp @@ -1025,7 +1025,10 @@ lttng_live_get_one_metadata_packet(struct lttng_live_trace *trace, std::vector