[Bug c/88363] New: [9 Regression] alloc_align attribute doesn't accept enumerated arguments
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Dec 5 02:07:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88363
Bug ID: 88363
Summary: [9 Regression] alloc_align attribute doesn't accept
enumerated arguments
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
According to the manual:
The alloc_align attribute may be applied to a function that returns a pointer
and takes at least one argument of an integer type.
C defines integer types like so:
The type char, the signed and unsigned integer types, and the enumerated
types are collectively called integer types.
However, when a function argument of an enumerated type is referenced in the
alloc_align attribute GCC 9 prints a warning and ignores the attribute:
$ cat t.c && gcc -O2 -S -Wall -fdump-tree-optimized=/dev/stdout t.c
__attribute__ ((alloc_align (1))) void* fi (int);
enum A { A1 = 1, A2 = 2, A4 = 4 };
__attribute__ ((alloc_align (1))) void* fA (enum A);
void gi (void)
{
void *p = fi (A4);
if ((__UINTPTR_TYPE__)p & 3)
__builtin_abort ();
}
void gA (void)
{
void *p = fA (A4);
if ((__UINTPTR_TYPE__)p & 3)
__builtin_abort ();
}
t.c:4:50: warning: ‘alloc_align’ attribute argument value ‘1’ refers to
parameter type ‘enum A’ [-Wattributes]
4 | __attribute__ ((alloc_align (1))) void* fA (enum A);
| ^
;; Function gi (gi, funcdef_no=0, decl_uid=1914, cgraph_uid=1, symbol_order=0)
gi ()
{
<bb 2> [local count: 1073741824]:
fi (4); [tail call]
return;
}
;; Function gA (gA, funcdef_no=1, decl_uid=1918, cgraph_uid=2, symbol_order=1)
gA ()
{
void * p;
long unsigned int p.1_1;
long unsigned int _2;
<bb 2> [local count: 1073741824]:
p_5 = fA (4);
p.1_1 = (long unsigned int) p_5;
_2 = p.1_1 & 3;
if (_2 != 0)
goto <bb 3>; [0.00%]
else
goto <bb 4>; [100.00%]
<bb 3> [count: 0]:
__builtin_abort ();
<bb 4> [local count: 1073741824]:
return;
}
More information about the Gcc-bugs
mailing list