aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorZack Weinberg <zack@codesourcery.com>2002-10-25 22:01:44 +0000
committerZack Weinberg <zack@gcc.gnu.org>2002-10-25 22:01:44 +0000
commitf65e118396016a5802791c7842e8506bcbd83cd3 (patch)
tree67fd5fbe0785abf5f677c11524a1114df26e50b8 /gcc
parentcd60b4b8e7d54de00a2d3a5764ebb1c674fcc889 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/cp/decl.c5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/template/typename3.C7
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" }
+};