Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/g++.dg/ext/attr-alloc_size.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/g++.dg/ext/attr-alloc_size.C Thu Feb 13 11:34:05 2020 +0900 @@ -0,0 +1,53 @@ +/* PR c++/87541 - ICE using a constant decl as an attribute alloc_size argument + { dg-do compile } + { dg-options "-O2 -Wall -Wno-array-bounds" } */ + +#define ALLOC_SIZE(N) __attribute__ ((alloc_size (N))) + +const int i1 = 1; +ALLOC_SIZE (i1) void* fcst (int); + +void* call_fcst (void) +{ + void *p = fcst (1); + __builtin___memset_chk (p, 0, 2, __builtin_object_size (p, 1)); // { dg-warning "\\\[-Wstringop-overflow=" } + return p; +} + + +enum { e1 = 1 }; +ALLOC_SIZE (e1) void* fenum (int); + +void* call_fenum (void) +{ + void *p = fenum (1); + __builtin___memset_chk (p, 0, 2, __builtin_object_size (p, 1)); // { dg-warning "\\\[-Wstringop-overflow=" } + return p; +} + + +template <class T> +struct A +{ + ALLOC_SIZE (T::N1) static void* ftemplarg_1 (int); + ALLOC_SIZE (T::N2) static void* + ftemplarg_2 (int); // { dg-warning "attribute argument value .2. exceeds the number of function parameters 1" } +}; + +struct B { static const int N1 = 1; static const int N2 = 1; }; + +void* call_ftemplarg_1 (A<B> *pa) +{ + void *p = pa->ftemplarg_1 (1); + __builtin___memset_chk (p, 0, 2, __builtin_object_size (p, 1)); // { dg-warning "\\\[-Wstringop-overflow=" } + return p; +} + +struct C { static const int N1 = 1; static const int N2 = 2; }; + +void* call_ftemplarg_2 (A<C> *pa) +{ + void *p = pa->ftemplarg_2 (1); + __builtin___memset_chk (p, 0, 2, __builtin_object_size (p, 1)); + return p; +}