[PING][PATCH] improve validation of attribute arguments (PR c/78666)
Martin Sebor
msebor@gmail.com
Thu Jul 16 22:53:08 GMT 2020
Ping: https://gcc.gnu.org/pipermail/gcc-patches/2020-July/549686.html
(Jeff, I forgot to mention this patch when we spoke earlier today.)
On 7/8/20 6:01 PM, Martin Sebor wrote:
> GCC has gotten better at detecting conflicts between various
> attributes but it still doesn't do a perfect job of detecting
> similar problems due to mismatches between contradictory
> arguments to the same attribute. For example,
>
> __attribute ((alloc_size (1))) void* allocate (size_t, size_t);
>
> followed by
>
> __attribute ((alloc_size (2))) void* allocate (size_t, size_t);
>
> is accepted with the former overriding the latter in calls to
> the function. Similar problem exists with a few other attributes
> that take arguments.
>
> The attached change adds a new utility function that checks for
> such mismatches and issues warnings. It also adds calls to it
> to detect the problem in attributes alloc_align, alloc_size, and
> section. This isn't meant to be a comprehensive fix but rather
> a starting point for one.
>
> Tested on x86_64-linux.
>
> Martin
>
> PS I ran into this again while debugging some unrelated changes
> and wondering about the behavior in similar situations to mine.
> Since the behavior seemed clearly suboptimal I figured I might
> as well fix it.
>
> PPS The improved checking triggers warnings in a few calls to
> __builtin_has_attribute due to apparent conflicts. I've xfailed
> those in the test since it's a known issue with some existing
> attributes that should be fixed at some point. Valid uses of
> the built-in shouldn't trigger diagnostics except for completely
> nonsensical arguments. Unfortunately, the line between valid
> and completely nonsensical is a blurry one (GCC either issues
> errors, or -Wattributes, or silently ignores some cases
> altogether, such as those that are the subject of this patch)
> and there is no internal mechanism to control the response.
More information about the Gcc-patches
mailing list