On Tue, May 28, 2019 at 08:59:57AM -0400, Jason Merrill wrote: > On 5/27/19 5:20 PM, Jakub Jelinek wrote: > > As the testcase shows, we are silently accepting writes into const > > variables, because the type generic builtins don't have a prototype. > > > > Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for > > trunk? > > > > 2019-05-27 Jakub Jelinek <ja...@redhat.com> > > > > PR c/90628 > > * c-common.c (check_builtin_function_arguments) > > <case BUILTIN_*_OVERFLOW>: Diagnose pointer to const qualified integer > > as last argument. > > > > * c-c++-common/builtin-arith-overflow-3.c: New test. > > > > --- gcc/c-family/c-common.c.jj 2019-05-21 16:16:48.068973678 +0200 > > +++ gcc/c-family/c-common.c 2019-05-27 10:46:25.525968739 +0200 > > @@ -5995,6 +5995,13 @@ check_builtin_function_arguments (locati > > "has pointer to boolean type", fndecl); > > return false; > > } > > + else if (TYPE_READONLY (TREE_TYPE (TREE_TYPE (args[2])))) > > + { > > + error_at (ARG_LOCATION (2), "argument 3 in call to function %qE " > > + "has pointer type to %<const%> qualified integer", > > + fndecl); > > Is there a reason not to also print the type with %qT?
So like: + error_at (ARG_LOCATION (2), "argument 3 in call to function %qE " + "has pointer type to %<const%> qualified integer " + "(%qT)", fndecl, TREE_TYPE (args[2])); or some other wording? I didn't want to say "argument 3 in call to function %qE has type %qT" because then users wouldn't know what the actual problem is. Jakub