re PR c++/4934 (Seg fault on legal code)
authorJason Merrill <jason@redhat.com>
Sat, 6 Apr 2002 22:22:00 +0000 (17:22 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Sat, 6 Apr 2002 22:22:00 +0000 (17:22 -0500)
        PR c++/4934
        * error.c (dump_expr) [CONVERT_EXPR]: Make sure TREE_TYPE (t) is
        set before checking it.

From-SVN: r51972

gcc/cp/ChangeLog
gcc/cp/error.c
gcc/testsuite/g++.dg/template/nontype1.C [new file with mode: 0644]

index 524cbeaf3b5bba721bd0a9b4b63f8ff5cb5f8e8c..e739e2a0a11bf37bddb3cc84097f6fbe85e4e518 100644 (file)
@@ -1,5 +1,9 @@
 2002-04-06  Jason Merrill  <jason@redhat.com>
 
+       PR c++/4934
+       * error.c (dump_expr) [CONVERT_EXPR]: Make sure TREE_TYPE (t) is
+       set before checking it.
+
        PR c++/525
        * init.c (build_member_call): Use build_scoped_ref.
        (resolve_offset_ref): Likewise.
index 499f726b012243993eba47c7107667639cbe2a11..579f584912bd09a630fd17c5b70ae4f36e07116d 100644 (file)
@@ -1729,7 +1729,7 @@ dump_expr (t, flags)
       break;
 
     case CONVERT_EXPR:
-      if (VOID_TYPE_P (TREE_TYPE (t)))
+      if (TREE_TYPE (t) && VOID_TYPE_P (TREE_TYPE (t)))
        {
          print_left_paren (scratch_buffer);
          dump_type (TREE_TYPE (t), flags);
diff --git a/gcc/testsuite/g++.dg/template/nontype1.C b/gcc/testsuite/g++.dg/template/nontype1.C
new file mode 100644 (file)
index 0000000..834a36a
--- /dev/null
@@ -0,0 +1,5 @@
+// PR c++/4934
+// dump_expr didn't know how to deal with a CONVERT_EXPR with no type.
+
+template<unsigned>   struct A {};
+template<typename T> struct B { A<sizeof(+int())> a; };