diff options
author | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-07-10 13:56:55 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-07-10 13:56:55 +0200 |
commit | 9304142e10e1d694d07b6fde8118a69e06fa7e56 (patch) | |
tree | 873a6020149f155eedc3253da45acf496caf8ad0 | |
parent | 182e00b1ba05699ef2e161d9282636142471e914 (diff) | |
download | gcc-9304142e10e1d694d07b6fde8118a69e06fa7e56.zip gcc-9304142e10e1d694d07b6fde8118a69e06fa7e56.tar.gz gcc-9304142e10e1d694d07b6fde8118a69e06fa7e56.tar.bz2 |
re PR middle-end/40502 (crash in cp_diagnostic_starter)
PR c++/40502
* error.c (cp_print_error_function): Check for NULL block.
* g++.dg/ext/strncpy-chk1.C: New test.
From-SVN: r149470
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-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, 43 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 604ba46..c29e32d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ +2009-07-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/40502 + * error.c (cp_print_error_function): Check for NULL block. + 2008-07-09 Simon Martin <simartin@users.sourceforge.net> - Jason Merrill <jason@redhat.com> + Jason Merrill <jason@redhat.com> * pt.c (perform_typedefs_access_check, get_types_needing_access_check, append_type_to_template_for_access_check_1): Use CLASS_TYPE_P. diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 850f406..a0ba51a 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -2603,7 +2603,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 4cb3306..7e7be11 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-10 Richard Guenther <rguenther@suse.de> PR tree-optimization/40496 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 0000000..7770ba9 --- /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); +} |