From: Eric Botcazou Date: Tue, 14 Sep 2021 08:44:34 +0000 (+0200) Subject: Fix internal error on pointer-to-pointer binding in LTO mode X-Git-Tag: releases/gcc-11.3.0~905 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e94730e51afdaf2d61c8c89c89c39453dee7c6de;p=thirdparty%2Fgcc.git Fix internal error on pointer-to-pointer binding in LTO mode gcc/ada/ * gcc-interface/utils.c (update_pointer_to): Set TYPE_CANONICAL on pointer and reference types. --- diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index b71f7489066f..dde0d58e6d2f 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -4329,6 +4329,7 @@ update_pointer_to (tree old_type, tree new_type) TREE_TYPE (t) = new_type; if (TYPE_NULL_BOUNDS (t)) TREE_TYPE (TREE_OPERAND (TYPE_NULL_BOUNDS (t), 0)) = new_type; + TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_POINTER_TO (new_type)); } /* Chain REF and its variants at the end. */ @@ -4345,7 +4346,10 @@ update_pointer_to (tree old_type, tree new_type) /* Now adjust them. */ for (; ref; ref = TYPE_NEXT_REF_TO (ref)) for (t = TYPE_MAIN_VARIANT (ref); t; t = TYPE_NEXT_VARIANT (t)) - TREE_TYPE (t) = new_type; + { + TREE_TYPE (t) = new_type; + TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_REFERENCE_TO (new_type)); + } TYPE_POINTER_TO (old_type) = NULL_TREE; TYPE_REFERENCE_TO (old_type) = NULL_TREE;