aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2015-11-26 12:04:50 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2015-11-26 12:04:50 +0000
commit89a01fcf4cff990c0d25d048ae01abb476070d05 (patch)
treef24a3de5b3494c6c366d702ed408f860d8e5b571 /gcc
parentd083907f1fe77f592eec0d427f9a114957f52f45 (diff)
downloadgcc-89a01fcf4cff990c0d25d048ae01abb476070d05.zip
gcc-89a01fcf4cff990c0d25d048ae01abb476070d05.tar.gz
gcc-89a01fcf4cff990c0d25d048ae01abb476070d05.tar.bz2
re PR c++/68527 (ICE with -fdump-ada-spec on invalid C++ 11 code)
PR c++/68527 * c-ada-spec.c (dump_nested_types): Add guard for error_mark_node. (print_ada_struct_decl): Likewise. From-SVN: r230942
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/c-ada-spec.c10
2 files changed, 12 insertions, 4 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 6e7b0f7..595fc3a 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,9 @@
+2015-11-26 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR c++/68527
+ * c-ada-spec.c (dump_nested_types): Add guard for error_mark_node.
+ (print_ada_struct_decl): Likewise.
+
2015-11-23 Igor Zamyatin <igor.zamyatin@intel.com>
PR c++/68001
diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c
index e85c1a9..3726a68 100644
--- a/gcc/c-family/c-ada-spec.c
+++ b/gcc/c-family/c-ada-spec.c
@@ -2461,7 +2461,8 @@ dump_nested_types (pretty_printer *buffer, tree t, tree parent, bool forward,
field = TYPE_FIELDS (outer);
while (field)
{
- if ((TREE_TYPE (field) != outer
+ if (((TREE_TYPE (field) != outer
+ && TREE_TYPE (field) != error_mark_node)
|| (TREE_CODE (TREE_TYPE (field)) == POINTER_TYPE
&& TREE_TYPE (TREE_TYPE (field)) != outer))
&& (!TYPE_NAME (TREE_TYPE (field))
@@ -3230,9 +3231,10 @@ print_ada_struct_decl (pretty_printer *buffer, tree node, tree type, int spc,
}
}
/* Avoid printing the structure recursively. */
- else if ((TREE_TYPE (tmp) != node
- || (TREE_CODE (TREE_TYPE (tmp)) == POINTER_TYPE
- && TREE_TYPE (TREE_TYPE (tmp)) != node))
+ else if (((TREE_TYPE (tmp) != node
+ && TREE_TYPE (tmp) != error_mark_node)
+ || (TREE_CODE (TREE_TYPE (tmp)) == POINTER_TYPE
+ && TREE_TYPE (TREE_TYPE (tmp)) != node))
&& TREE_CODE (tmp) != TYPE_DECL
&& !TREE_STATIC (tmp))
{