diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-10 22:31:34 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-07-10 22:31:34 +0000 |
commit | b87324ba585d14ec78e674cac10b12a8994f3347 (patch) | |
tree | a98144101fbc6c86a63b25fe1140c1c24e05dabc /gcc | |
parent | b750596037e69a88f3b19a612d83f1eec74e1621 (diff) |
PR c++/40502
* error.c (cp_print_error_function): Check for NULL block.
* g++.dg/ext/strncpy-chk1.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_4-branch@149499 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/error.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/strncpy-chk1.C | 31 |
4 files changed, 42 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 06f5e062d5a..54ab71ec6d0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2009-07-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/40502 + * error.c (cp_print_error_function): Check for NULL block. + 2009-07-09 Dodji Seketeli <dodji@redhat.com> PR c++/40684 diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 936560b0b76..cc4b92992ca 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -2458,7 +2458,7 @@ cp_print_error_function (diagnostic_context *context, while (block && TREE_CODE (block) == BLOCK) block = BLOCK_SUPERCONTEXT (block); - if (TREE_CODE (block) == FUNCTION_DECL) + if (block && TREE_CODE (block) == FUNCTION_DECL) fndecl = block; abstract_origin = NULL; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 166fb3414ca..28ce702525e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-07-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/40502 + * g++.dg/ext/strncpy-chk1.C: New test. + 2009-07-09 Paul Thomas <pault@gcc.gnu.org> PR fortran/40440 diff --git a/gcc/testsuite/g++.dg/ext/strncpy-chk1.C b/gcc/testsuite/g++.dg/ext/strncpy-chk1.C new file mode 100644 index 00000000000..7770ba93127 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/strncpy-chk1.C @@ -0,0 +1,31 @@ +// PR c++/40502 +// { dg-do compile } +// { dg-options "-O2" } + +struct A { char x[12], y[35]; }; +struct B { char z[50]; }; + +inline void +foo (char *dest, const char *__restrict src, __SIZE_TYPE__ n) +{ + __builtin___strncpy_chk (dest, src, n, __builtin_object_size (dest, 0)); // { dg-warning "will always overflow" } +} + +void bar (const char *, int); + +inline void +baz (int i) +{ + char s[128], t[32]; + bar (s, 0); + bar (t, i); + A a; + B b; + foo (a.y, b.z, 36); +} + +void +test () +{ + baz (0); +} |