]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: Ignore __sanitizer_ptr_{sub,cmp} builtin calls during constant expression evalua...
authorJakub Jelinek <jakub@redhat.com>
Tue, 22 Sep 2020 19:06:32 +0000 (21:06 +0200)
committerJakub Jelinek <jakub@redhat.com>
Tue, 22 Sep 2020 19:08:02 +0000 (21:08 +0200)
These two builtin calls are added already during parsing before pointer
subtractions or comparisons, normally they perform runtime verification
of whether the pointers point to the same object or different objects,
but during constant expressione valuation we don't really need those
builtins for anything.

2020-09-22  Jakub Jelinek  <jakub@redhat.com>

PR c++/97145
* constexpr.c (cxx_eval_builtin_function_call): Return void_node for
calls to __sanitize_ptr_{sub,cmp} builtins.

* g++.dg/asan/pr97145.C: New test.

gcc/cp/constexpr.c
gcc/testsuite/g++.dg/asan/pr97145.C [new file with mode: 0644]

index 72fbdab06c544d78d482c8fcf12f31858e4c53c3..dacce58fcffee9e3a1fc7570e8db7776681a2d64 100644 (file)
@@ -1355,6 +1355,12 @@ cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun,
       case BUILT_IN_STRSTR:
        strops = 2;
        strret = 1;
+       break;
+      case BUILT_IN_ASAN_POINTER_COMPARE:
+      case BUILT_IN_ASAN_POINTER_SUBTRACT:
+       /* These builtins shall be ignored during constant expression
+          evaluation.  */
+       return void_node;
       default:
        break;
       }
diff --git a/gcc/testsuite/g++.dg/asan/pr97145.C b/gcc/testsuite/g++.dg/asan/pr97145.C
new file mode 100644 (file)
index 0000000..993c8a5
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/97145
+// { dg-do compile { target c++11 } }
+// { dg-options "-fsanitize=address,pointer-subtract,pointer-compare" }
+
+constexpr char *a = nullptr;
+constexpr auto b = a - a;
+constexpr auto c = a < a;