diff options
author | Dirk Mueller <dmueller@suse.de> | 2007-05-25 21:18:15 +0000 |
---|---|---|
committer | Dirk Mueller <mueller@gcc.gnu.org> | 2007-05-25 21:18:15 +0000 |
commit | 51bc54a661221ccafb2e14dc0d0c2e1a9c621a2b (patch) | |
tree | f9fc57995ca9957ad153664eb76e3a1d3b7c3a41 /gcc/testsuite | |
parent | 1094da913be99ab5768f3a37bb955ae60f85006d (diff) | |
download | gcc-51bc54a661221ccafb2e14dc0d0c2e1a9c621a2b.zip gcc-51bc54a661221ccafb2e14dc0d0c2e1a9c621a2b.tar.gz gcc-51bc54a661221ccafb2e14dc0d0c2e1a9c621a2b.tar.bz2 |
extend.texi (alloc_size): New attribute.
2007-05-25 Dirk Mueller <dmueller@suse.de>
Marcus Meissner <meissner@suse.de>
* doc/extend.texi (alloc_size): New attribute.
* c-common.c (handle_alloc_size_attribute): New.
* tree-object-size.c (alloc_object_size): Use alloc_size
attribute, if available.
* testsuite/gcc.dg/attr-alloc_size.c: New.
Co-Authored-By: Marcus Meissner <meissner@suse.de>
From-SVN: r125073
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/attr-alloc_size.c | 36 |
2 files changed, 41 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0da350c..ed0ee7f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-05-25 Dirk Mueller <dmueller@suse.de> + Marcus Meissner <meissner@suse.de> + + * testsuite/gcc.dg/attr-alloc_size.c: New. + 2007-05-25 Simon Martin <simartin@users.sourceforge.net> Lee Millward <lee.millward@gmail.com> diff --git a/gcc/testsuite/gcc.dg/attr-alloc_size.c b/gcc/testsuite/gcc.dg/attr-alloc_size.c new file mode 100644 index 0000000..e646e5e --- /dev/null +++ b/gcc/testsuite/gcc.dg/attr-alloc_size.c @@ -0,0 +1,36 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wall" } */ + +extern void abort (void); + +#include "../gcc.c-torture/execute/builtins/chk.h" + +extern char *mallocminus1(int size) __attribute__((alloc_size(-1))); /* { dg-warning "parameter outside range" } */ +extern char *malloc0(int size) __attribute__((alloc_size(0))); /* { dg-warning "parameter outside range" } */ +extern char *malloc1(int size) __attribute__((alloc_size(1))); +extern char *malloc2(int empty, int size) __attribute__((alloc_size(2))); +extern char *calloc1(int size, int elements) __attribute__((alloc_size(1,2))); +extern char *calloc2(int size, int empty, int elements) __attribute__((alloc_size(1,3))); +extern char *balloc1(void *size) __attribute__((alloc_size(1))); + +void +test (void) +{ + char *p; + + p = malloc0 (6); + strcpy (p, "Hello"); + p = malloc1 (6); + strcpy (p, "Hello"); + strcpy (p, "Hello World"); /* { dg-warning "will always overflow" "strcpy" } */ + p = malloc2 (424242, 6); + strcpy (p, "World"); + strcpy (p, "Hello World"); /* { dg-warning "will always overflow" "strcpy" } */ + p = calloc1 (2, 5); + strcpy (p, "World"); + strcpy (p, "Hello World"); /* { dg-warning "will always overflow" "strcpy" } */ + p = calloc2 (2, 424242, 5); + strcpy (p, "World"); + strcpy (p, "Hello World"); /* { dg-warning "will always overflow" "strcpy" } */ +} + |