diff options
author | Zack Weinberg <zack@codesourcery.com> | 2002-10-25 22:01:44 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2002-10-25 22:01:44 +0000 |
commit | f65e118396016a5802791c7842e8506bcbd83cd3 (patch) | |
tree | 67fd5fbe0785abf5f677c11524a1114df26e50b8 /gcc | |
parent | cd60b4b8e7d54de00a2d3a5764ebb1c674fcc889 (diff) | |
download | gcc-f65e118396016a5802791c7842e8506bcbd83cd3.zip gcc-f65e118396016a5802791c7842e8506bcbd83cd3.tar.gz gcc-f65e118396016a5802791c7842e8506bcbd83cd3.tar.bz2 |
re PR c++/7266 (pedantic segfaults on missing typename)
PR c++/7266
cp:
* decl.c (grokdeclarator): Check that TREE_OPERAND 0 of a
SCOPE_REF is not null before dereferencing it.
testsuite:
* g++.dg/template/typename3.C: New test.
From-SVN: r58540
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/decl.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/typename3.C | 7 |
4 files changed, 22 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 35251df..03a13c1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-10-25 Zack Weinberg <zack@codesourcery.com> + + PR c++/7266 + * decl.c (grokdeclarator): Check that TREE_OPERAND 0 of a + SCOPE_REF is not null before dereferencing it. + 2002-10-25 Mark Mitchell <mark@codesourcery.com> * class.c (build_vtbl_initializer): Don't use build_vtable_entry. @@ -8,7 +14,7 @@ * decl.c (duplicate_decls): Copy it. * method.c (make_thunk): Simplify, and add thunks to DECL_THUNKS. * semantics.c (emit_associated_thunks): Simplify. - + 2002-10-24 David Edelsohn <edelsohn@gnu.org> PR c++/7228 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 7459c87..3e1c215 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -11241,8 +11241,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) pop_decl_namespace (); else if (friendp && (TREE_COMPLEXITY (declarator) < 2)) /* Don't fall out into global scope. Hides real bug? --eichin */ ; - else if (! IS_AGGR_TYPE_CODE - (TREE_CODE (TREE_OPERAND (declarator, 0)))) + else if (!TREE_OPERAND (declarator, 0) + || !IS_AGGR_TYPE_CODE + (TREE_CODE (TREE_OPERAND (declarator, 0)))) ; else if (TREE_COMPLEXITY (declarator) == current_class_depth) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a073e68..e6874ec 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-10-25 Zack Weinberg <zack@codesourcery.com> + + * g++.dg/template/typename3.C: New test. + 2002-10-25 Mark Mitchell <mark@codesourcery.com> * g++.dg/abi/vthunk2.C: New test. @@ -27,7 +31,7 @@ PR c++/7679 * g++.dg/parse/inline1.C: New test. - + 2002-10-23 Richard Henderson <rth@redhat.com> * g++.dg/inherit/thunk1.C: Enable for x86_64. diff --git a/gcc/testsuite/g++.dg/template/typename3.C b/gcc/testsuite/g++.dg/template/typename3.C new file mode 100644 index 0000000..1c573ba --- /dev/null +++ b/gcc/testsuite/g++.dg/template/typename3.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// crash test - PR 7266 + +template <class A> +struct B { + typedef A::C::D E; // { dg-error "no type|parse error" } +}; |