diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 35251df32ea..03a13c1ba98 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-10-25 Zack Weinberg + + 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 * 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 PR c++/7228 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 7459c8750ee..3e1c21553dd 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 a073e683dbc..e6874ec7130 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-10-25 Zack Weinberg + + * g++.dg/template/typename3.C: New test. + 2002-10-25 Mark Mitchell * 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 * 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 00000000000..1c573baa0df --- /dev/null +++ b/gcc/testsuite/g++.dg/template/typename3.C @@ -0,0 +1,7 @@ +// { dg-do compile } +// crash test - PR 7266 + +template +struct B { + typedef A::C::D E; // { dg-error "no type|parse error" } +};