[Bug c/98969] [11 Regression] ICE: Segmentation fault (in print_mem_ref)
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Feb 4 20:50:06 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98969
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |msebor at gcc dot gnu.org
Target Milestone|--- |11.0
Status|NEW |ASSIGNED
Keywords|ice-on-invalid-code |ice-on-valid-code
--- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> ---
The following avoids the ICE:
diff --git a/gcc/c-family/c-pretty-print.c b/gcc/c-family/c-pretty-print.c
index 2095d4badf7..da4a8b5defd 100644
--- a/gcc/c-family/c-pretty-print.c
+++ b/gcc/c-family/c-pretty-print.c
@@ -1989,7 +1989,9 @@ print_mem_ref (c_pretty_printer *pp, tree e)
}
tree access_type = TREE_TYPE (e);
- tree arg_type = TREE_TYPE (TREE_TYPE (arg));
+ tree arg_type = TREE_TYPE (arg);
+ if (POINTER_TYPE_P (arg))
+ arg_type = TREE_TYPE (arg_type);
if (tree access_size = TYPE_SIZE_UNIT (access_type))
if (byte_off != 0
&& TREE_CODE (access_size) == INTEGER_CST
and results in:
pr98969.c: In function ‘_round_2_cb’:
pr98969.c:14:14: warning: argument 1 null where non-null expected [-Wnonnull]
14 | bb->expr = strdup ((const char *) 0);
| ^~~~~~
pr98969.c:7:1: note: in a call to function ‘strdup’ declared ‘nonnull’
7 | strdup (const char *);
| ^~~~~~
pr98969.c:15:1: warning: leak of ‘*(struct TYPE_14__ *)_round_2_cb_n_0.expr’
[CWE-401] [-Wanalyzer-malloc-leak]
15 | }
| ^
‘_round_2_cb’: events 1-2
|
| 14 | bb->expr = strdup ((const char *) 0);
| | ^~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (1) allocated here
| 15 | }
| | ~
| | |
| | (2) ‘*(struct TYPE_14__ *)_round_2_cb_n_0.expr’ leaks here; was
allocated at (1)
|
The test case is undefined but syntactically valid thus ice-on-valid-code.
More information about the Gcc-bugs
mailing list