This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: cxx-mem-model merge [4 of 9] c-family


On Thu, 3 Nov 2011, Andrew MacLeod wrote:

> +   if (VEC_length (tree, params) != n_param)
> +     {
> +       error ("Incorrect number of arguments to function %qE", function);

Diagnostics start with lowercase letters.  The functions such as "error" 
that implicitly use input_location are deprecated - all the new functions 
producing diagnostics should take location_t parameters that they pass to 
error_at.  (If a location isn't readily available in the caller then you 
might make the caller pass input_location - but you still shouldn't 
introduce a new function like this with several calls to plain "error".)

> +   /* Get type of first parameter, and determine it's size.  */

"its"

> +   type_0 = TREE_TYPE (VEC_index (tree, params, 0));
> +   if (TREE_CODE (type_0) != POINTER_TYPE)
> +     {
> +       error ("argument 0 of %qE must be a pointer type", function);

Arguments are numbered from 1 in existing diagnostics, not 0.  The 
diagnostics here need to be fixed to match that.

> +   /* Check memory model parameters for validity.  */
> +   for (x = n_param - n_model ; x < n_param; x++)
> +     {
> +       tree p = VEC_index (tree, params, x);
> +       if (TREE_CODE (p) == INTEGER_CST)
> +         {
> + 	  int i = tree_low_cst (p, 1);
> + 	  if (i < 0 || i >= MEMMODEL_LAST)
> + 	    {
> + 	      error ("invalid memory model argument %d of %qE", x, function);

Given that C and C++ allow variable arguments to the standard type-generic 
macros/functions, it is also presumably OK - only undefined at runtime - 
for a constant memory model argument of the correct type to have a value 
representable in that type that isn't actually a valid memory model.  And 
so this should generate a warning, not an error (ideally generating a trap 
and an informative note that such a trap has been generated - remember 
that the side-effects of the function arguments must be evaluated before 
the trap, in case an argument exits the program, as in 
gcc.c-torture/execute/{call-trap-1.c,va-arg-trap-1.c}).

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]