Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.dg/Wmissing-attributes.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.dg/Wmissing-attributes.c Thu Feb 13 11:34:05 2020 +0900 @@ -0,0 +1,96 @@ +/* PR middle-end/81824 - Warn for missing attributes with function aliases + { dg-do compile } + { dg-require-alias "" } + { dg-options "-Wall" } */ + +#define ATTR(list) __attribute__ (list) + + +int alias_no_const (void); + +ATTR ((const)) int +target_const (void) /* { dg-message ".alias_no_const. target declared here" } */ +{ return 0; } + +ATTR ((alias ("target_const"))) int +alias_no_const (void); /* { dg-warning ".alias_no_const. specifies less restrictive attribute than its target .target_const.: .const." } */ + + +ATTR ((alloc_size (1), malloc)) void* +target_malloc (int n) /* { dg-message ".alias_no_malloc. target declared here" } */ +{ return __builtin_malloc (n); } + +ATTR ((alias ("target_malloc"))) void* +alias_no_malloc (int); /* { dg-warning ".alias_no_malloc. specifies less restrictive attributes than its target .target_malloc.: .alloc_size., .malloc." } */ + + +ATTR ((leaf)) int +target_leaf (void) /* { dg-message ".alias_no_leaf. target declared here" } */ +{ return 0; } + +ATTR ((alias ("target_leaf"))) int +alias_no_leaf (void); /* { dg-warning ".alias_no_leaf. specifies less restrictive attribute than its target .target_leaf.: .leaf." } */ + + +/* Verify that attributes noclone, noinline, and noipa on the target + don't cause a warning for aliases without the attribute. */ + +ATTR ((noclone)) int +target_noclone (void) +{ return 0; } + +ATTR ((alias ("target_noclone"))) int +alias_no_noclone (void); + + +ATTR ((noipa)) int +target_noipa (void) +{ return 0; } + +ATTR ((alias ("target_noipa"))) int +alias_no_noipa (void); + + +ATTR ((noinline)) int +target_noinline (void) +{ return 0; } + +ATTR ((alias ("target_noinline"))) int +alias_no_noinline (void); + + +ATTR ((nothrow)) int +target_nothrow (void) /* { dg-message ".alias_no_nothrow. target declared here" } */ +{ return 0; } + +ATTR ((alias ("target_nothrow"))) int +alias_no_nothrow (void); /* { dg-warning ".alias_no_nothrow. specifies less restrictive attribute than its target .target_nothrow.: .nothrow." } */ + + +/* Verify that attribute weak on the target doesn't cause and isn't + mentioned in a warning for aliases without the attribute. */ + +ATTR ((weak)) int +target_weak (void) +{ return 0; } + +ATTR ((alias ("target_weak"))) int +alias_no_weak (void); + + +ATTR ((nothrow, weak)) int +target_nothrow_weak (void) /* { dg-message ".alias_nothrow_no_weak. target declared here" } */ +{ return 0; } + +ATTR ((alias ("target_nothrow_weak"))) int +alias_nothrow_no_weak (void); /* { dg-warning ".alias_nothrow_no_weak. specifies less restrictive attribute than its target .target_nothrow_weak.: .nothrow." } */ + + +/* Verify that __typeof__ doesn't include attributes. */ + +ATTR ((cold)) int +target_cold (void) +{ return 0; } + +__typeof__ (target_cold) ATTR ((alias ("target_cold"))) +alias_cold; /* { dg-warning ".alias_cold. specifies less restrictive attribute than its target .target_cold.: .cold." } */