On 12/11/18 2:17 AM, Jakub Jelinek wrote:
On Mon, Dec 10, 2018 at 04:30:11PM -0700, Martin Sebor wrote:
Some of my testing exposed a minor problem in GCC 9's validation
of the type of function parameters referred to by attribute
positional arguments. Whereas GCC 8 accepts all C integer types,
including enumerated types, such as:
enum AllocAlign { Align16 = 16, Align32 = 32 };
__attribute__ ((alloc_align (1))) void*
alloc (size_t, enum AllocAlign)
GCC 9 only accepts signed and unsigned integer types. This change
(introduced by myself) was unintentional, and a fix for it is in
the attached trivial patch. I plan to commit it without approval
in the next day or so unless any concerns or suggestions come up.
There is nothing obvious about this, so please don't commit it without
approval. GCC 8 and older used to accept
even float or void * or struct arguments and just ignored them.
I think we need to discuss what types we want to allow without warnings and
what we should warn.
As I wrote in the PR, I believe e.g. using alloc_align/alloc_size with
bool/_Bool is just a clear bug, you can store 0 or 1 in there, but e.g.
alignment 0 doesn't make sense.
Enums are on the border line, I'll defer to C/C++ maintainers whether we
want to include that or not.
I'd think we should allow (unscoped) enums in most places where we want
an integer constant.
Jason