Message ID | 20200922074801.GW2176@tucnak |
---|---|
State | New |
Headers | show |
Series | c++: Ignore __sanitizer_ptr_{sub,cmp} builtin calls during constant expression evaluation [PR97145] | expand |
On 9/22/20 3:48 AM, Jakub Jelinek wrote: > Hi! > > 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. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? OK. > 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.jj 2020-09-07 16:58:53.342195330 +0200 > +++ gcc/cp/constexpr.c 2020-09-21 23:50:39.909211245 +0200 > @@ -1355,6 +1355,12 @@ cxx_eval_builtin_function_call (const co > 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; > } > --- gcc/testsuite/g++.dg/asan/pr97145.C.jj 2020-09-21 17:37:50.408562876 +0200 > +++ gcc/testsuite/g++.dg/asan/pr97145.C 2020-09-21 17:38:26.961031023 +0200 > @@ -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; > > Jakub >
--- gcc/cp/constexpr.c.jj 2020-09-07 16:58:53.342195330 +0200 +++ gcc/cp/constexpr.c 2020-09-21 23:50:39.909211245 +0200 @@ -1355,6 +1355,12 @@ cxx_eval_builtin_function_call (const co 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; } --- gcc/testsuite/g++.dg/asan/pr97145.C.jj 2020-09-21 17:37:50.408562876 +0200 +++ gcc/testsuite/g++.dg/asan/pr97145.C 2020-09-21 17:38:26.961031023 +0200 @@ -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;