diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2021-08-22 13:54:04 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2021-08-22 14:02:21 -0700 |
commit | b53aba93b81ed718ca783818fa31636f43bffda8 (patch) | |
tree | 29baa57de4569230f3d548e4e96392204c1b582e /src | |
parent | c21eddbfea31b4da027a4a210263c4f2ed994cbf (diff) | |
download | diffutils-b53aba93b81ed718ca783818fa31636f43bffda8.tar.gz |
diff3: suppress -fanalyzer alarms
* src/diff3.c: Add pragma to suppress -Wanalyzer-null-dereference
alarms.
* src/diff.h (find_dir_file_pathname): Add malloc-related
attributes, to pacify gcc -Wsuggest-attribute=malloc.
Diffstat (limited to 'src')
-rw-r--r-- | src/diff.h | 12 | ||||
-rw-r--r-- | src/diff3.c | 8 |
2 files changed, 17 insertions, 3 deletions
@@ -355,7 +355,9 @@ extern void print_context_script (struct change *, bool); extern int diff_dirs (struct comparison const *, int (*) (struct comparison const *, char const *, char const *)); -extern char *find_dir_file_pathname (char const *, char const *); +extern char *find_dir_file_pathname (char const *, char const *) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; /* ed.c */ extern void print_ed_script (struct change *); @@ -380,12 +382,16 @@ extern void print_sdiff_script (struct change *); /* util.c */ extern char const change_letter[4]; extern char const pr_program[]; -extern char *concat (char const *, char const *, char const *); +extern char *concat (char const *, char const *, char const *) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_RETURNS_NONNULL; extern bool lines_differ (char const *, char const *) _GL_ATTRIBUTE_PURE; extern lin translate_line_number (struct file_data const *, lin); extern struct change *find_change (struct change *); extern struct change *find_reverse_change (struct change *); -extern void *zalloc (size_t); +extern void *zalloc (size_t) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE + _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; extern enum changes analyze_hunk (struct change *, lin *, lin *, lin *, lin *); extern void begin_output (void); extern void debug_script (struct change *); diff --git a/src/diff3.c b/src/diff3.c index 6be7e3c..1f656b6 100644 --- a/src/diff3.c +++ b/src/diff3.c @@ -16,6 +16,14 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* As of GCC 11.2.1, gcc -Wanalyzer-too-complex reports that this + program's code is too complicated for gcc -fanalyzer. + FIXME: Compile with -DANALYZER_NULL_DEFERENCE and see whether the + resulting diagnostics are false alarms. */ +#if 10 <= __GNUC__ && !ANALYZER_NULL_DEREFERENCE +# pragma GCC diagnostic ignored "-Wanalyzer-null-dereference" +#endif + #include "system.h" #include "paths.h" |