diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 100734069638..705d00cee0e2 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2016-07-29 Marek Polacek + + PR c/71574 + * c-common.c (handle_alloc_align_attribute): Also check FUNCTION_DECL. + 2016-07-28 Martin Liska PR gcov-profile/68025 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 16e3965cbd00..efd98157a629 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -8370,7 +8370,8 @@ handle_alloc_align_attribute (tree *node, tree, tree args, int, { unsigned arg_count = type_num_arguments (*node); tree position = TREE_VALUE (args); - if (position && TREE_CODE (position) != IDENTIFIER_NODE) + if (position && TREE_CODE (position) != IDENTIFIER_NODE + && TREE_CODE (position) != FUNCTION_DECL) position = default_conversion (position); if (!tree_fits_uhwi_p (position) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ebb2c2fb7bdf..9960fb0c4ac7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-07-29 Marek Polacek + + PR c/71574 + * c-c++-common/pr71574.c: New test. + 2016-07-29 Kugan Vivekanandarajah PR middle-end/68217 diff --git a/gcc/testsuite/c-c++-common/pr71574.c b/gcc/testsuite/c-c++-common/pr71574.c new file mode 100644 index 000000000000..320ae3853cdd --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr71574.c @@ -0,0 +1,12 @@ +/* PR c/71574 */ +/* { dg-do compile } */ + +int fn1 (void); +int fn2 (void) __attribute__ ((alloc_align (fn1))); /* { dg-warning "parameter outside range" } */ +int fn3 (void) __attribute__ ((alloc_size (fn1))); /* { dg-warning "parameter outside range" } */ +int fn4 (void) __attribute__ ((assume_aligned (fn1))); /* { dg-warning "not integer constant" } */ +int fn5 (char *, char *) __attribute__((nonnull (fn1))); /* { dg-error "nonnull argument has invalid operand" } */ +int fn6 (const char *, ...) __attribute__ ((sentinel (fn1))); /* { dg-warning "not an integer constant" } */ + +typedef int __attribute__((vector_size (fn1))) v4si; /* { dg-warning "attribute ignored" } */ +typedef int T __attribute__((aligned (fn1))); /* { dg-error "requested alignment is not" } */