diff options
author | Martin Liska <mliska@suse.cz> | 2020-12-09 16:21:18 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2020-12-14 10:49:27 +0100 |
commit | ab28eac607637a641fbec27c5f6bbe9b6197c80f (patch) | |
tree | 0bf15ad54b9bfbec1e28df92669cf33190fff945 /gcc/c | |
parent | cf7efe2d36f4f940afebae04fc342dbd3d386b9b (diff) | |
download | gcc-ab28eac607637a641fbec27c5f6bbe9b6197c80f.zip gcc-ab28eac607637a641fbec27c5f6bbe9b6197c80f.tar.gz gcc-ab28eac607637a641fbec27c5f6bbe9b6197c80f.tar.bz2 |
sanitizer: do not ICE for pointer cmp/sub
gcc/c/ChangeLog:
PR sanitizer/98204
* c-typeck.c (pointer_diff): Do not emit a top-level
sanitization.
(build_binary_op): Likewise.
gcc/testsuite/ChangeLog:
PR sanitizer/98204
* c-c++-common/asan/pr98204.c: New test.
Diffstat (limited to 'gcc/c')
-rw-r--r-- | gcc/c/c-typeck.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index 138af07..7d58e8d 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -3949,10 +3949,9 @@ pointer_diff (location_t loc, tree op0, tree op1, tree *instrument_expr) pedwarn (loc, OPT_Wpointer_arith, "pointer to a function used in subtraction"); - if (sanitize_flags_p (SANITIZE_POINTER_SUBTRACT)) + if (current_function_decl != NULL_TREE + && sanitize_flags_p (SANITIZE_POINTER_SUBTRACT)) { - gcc_assert (current_function_decl != NULL_TREE); - op0 = save_expr (op0); op1 = save_expr (op1); @@ -12324,6 +12323,7 @@ build_binary_op (location_t location, enum tree_code code, } if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE) + && current_function_decl != NULL_TREE && sanitize_flags_p (SANITIZE_POINTER_COMPARE)) { op0 = save_expr (op0); |