aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/tree.c
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2021-01-15 11:38:43 -0800
committerNathan Sidwell <nathan@acm.org>2021-01-15 12:45:18 -0800
commit9beb6d88effdab4209beb8bc5e4b8773317f1d33 (patch)
treea2e246e22c663ee17ad9ba708068fde08f6c9bea /gcc/cp/tree.c
parente1efa6af61ab54faf0d8d091328e0c6a1141050c (diff)
downloadgcc-9beb6d88effdab4209beb8bc5e4b8773317f1d33.zip
gcc-9beb6d88effdab4209beb8bc5e4b8773317f1d33.tar.gz
gcc-9beb6d88effdab4209beb8bc5e4b8773317f1d33.tar.bz2
c++: Fix qualified array-type construction [PR 98538]
This was an assert that was too picky. The reason I had to alter array construction was that on stream in, we cannot dynamically determine a type's dependentness. Thus on stream out of the 'problematic' types, we save the dependentness for reconstruction. Fortunately the paths into cp_build_qualified_type_real from streamin with arrays do have the array's dependentess set as needed. PR c++/98538 gcc/cp/ * tree.c (cp_build_qualified_type_real): Propagate an array's dependentness to the copy, if known. gcc/testsuite/ * g++.dg/template/pr98538.C: New.
Diffstat (limited to 'gcc/cp/tree.c')
-rw-r--r--gcc/cp/tree.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 290e73b..7dcb453 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -1340,10 +1340,12 @@ cp_build_qualified_type_real (tree type,
if (!t)
{
- gcc_checking_assert (TYPE_DEPENDENT_P_VALID (type)
- || !dependent_type_p (type));
+ /* If we already know the dependentness, tell the array type
+ constructor. This is important for module streaming, as we cannot
+ dynamically determine that on read in. */
t = build_cplus_array_type (element_type, TYPE_DOMAIN (type),
- TYPE_DEPENDENT_P (type));
+ TYPE_DEPENDENT_P_VALID (type)
+ ? int (TYPE_DEPENDENT_P (type)) : -1);
/* Keep the typedef name. */
if (TYPE_NAME (t) != TYPE_NAME (type))