11.0.1-0.3.fc34
This commit is contained in:
parent
eb3f14c713
commit
f8c38830d9
1
.gitignore
vendored
1
.gitignore
vendored
@ -37,3 +37,4 @@
|
||||
/gcc-11.0.1-20210307.tar.xz
|
||||
/gcc-11.0.1-20210319.tar.xz
|
||||
/isl-0.18.tar.bz2
|
||||
/gcc-11.0.1-20210324.tar.xz
|
||||
|
38
gcc.spec
38
gcc.spec
@ -1,5 +1,5 @@
|
||||
%global DATE 20210319
|
||||
%global gitrev e4dd2d1e93fef51f05cef0ed942fdc7dfd83dafd
|
||||
%global DATE 20210324
|
||||
%global gitrev aae01c864baeefadc9bb5312de389116f77ccb83
|
||||
%global gcc_version 11.0.1
|
||||
%global gcc_major 11
|
||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||
@ -119,7 +119,7 @@
|
||||
Summary: Various compilers (C, C++, Objective-C, ...)
|
||||
Name: gcc
|
||||
Version: %{gcc_version}
|
||||
Release: %{gcc_release}.2%{?dist}
|
||||
Release: %{gcc_release}.3%{?dist}
|
||||
# libgcc, libgfortran, libgomp, libstdc++ and crtstuff have
|
||||
# GCC Runtime Exception.
|
||||
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
|
||||
@ -264,14 +264,9 @@ Patch9: gcc11-foffload-default.patch
|
||||
Patch10: gcc11-Wno-format-security.patch
|
||||
Patch11: gcc11-rh1574936.patch
|
||||
Patch12: gcc11-d-shared-libphobos.patch
|
||||
Patch13: gcc11-pr99378-revert.patch
|
||||
Patch14: gcc11-pr99388.patch
|
||||
Patch15: gcc11-pr91710.patch
|
||||
Patch16: gcc11-pr99230.patch
|
||||
Patch17: gcc11-pr99490.patch
|
||||
Patch18: gcc11-pr99562.patch
|
||||
Patch19: gcc11-pr99650.patch
|
||||
Patch20: gcc11-pr99341-revert.patch
|
||||
Patch13: gcc11-pr91710.patch
|
||||
Patch14: gcc11-pr99490.patch
|
||||
Patch15: gcc11-pr99341-revert.patch
|
||||
|
||||
Patch100: gcc11-fortran-fdec-duplicates.patch
|
||||
Patch101: gcc11-fortran-flogical-as-integer.patch
|
||||
@ -794,14 +789,9 @@ to NVidia PTX capable devices if available.
|
||||
%patch11 -p0 -b .rh1574936~
|
||||
%endif
|
||||
%patch12 -p0 -b .d-shared-libphobos~
|
||||
%patch13 -p0 -b .pr99378-revert~
|
||||
%patch14 -p0 -b .pr99388~
|
||||
%patch15 -p0 -b .pr91710~
|
||||
%patch16 -p0 -b .pr99230~
|
||||
%patch17 -p0 -b .pr99490~
|
||||
%patch18 -p0 -b .pr99562~
|
||||
%patch19 -p0 -b .pr99650~
|
||||
%patch20 -p0 -b .pr99341-revert~
|
||||
%patch13 -p0 -b .pr91710~
|
||||
%patch14 -p0 -b .pr99490~
|
||||
%patch15 -p0 -b .pr99341-revert~
|
||||
|
||||
%if 0%{?rhel} >= 9
|
||||
%patch100 -p1 -b .fortran-fdec-duplicates~
|
||||
@ -3136,6 +3126,16 @@ end
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Wed Mar 24 2021 Jakub Jelinek <jakub@redhat.com> 11.0.1-0.3
|
||||
- update from trunk
|
||||
- PRs analyzer/99614, c++/99239, c++/99283, c++/99318, c++/99425, c++/99456,
|
||||
c++/99480, c++/99687, c/99588, fortran/93660, fortran/99688,
|
||||
rtl-optimization/99680, target/97252, target/97926, target/98914,
|
||||
target/99540, target/99581, target/99652, target/99660, target/99661,
|
||||
target/99663, target/99679, target/99702, target/99704, target/99733,
|
||||
tree-optimization/99296, tree-optimization/99656,
|
||||
tree-optimization/99694, tree-optimization/99721
|
||||
|
||||
* Fri Mar 19 2021 Jakub Jelinek <jakub@redhat.com> 11.0.1-0.2
|
||||
- update from trunk
|
||||
- PRs c++/90448, c++/96268, c++/96749, c++/97973, c++/98480, c++/98704,
|
||||
|
@ -1,137 +0,0 @@
|
||||
2021-03-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/99230
|
||||
* c-gimplify.c (c_genericize_control_stmt): Handle STATEMENT_LIST.
|
||||
|
||||
* cp-gimplify.c (cp_genericize_r) <case STATEMENT_LIST>: Remove
|
||||
special code, instead call c_genericize_control_stmt.
|
||||
|
||||
* gcc.dg/pr99230.c: New test.
|
||||
|
||||
--- gcc/c-family/c-gimplify.c.jj 2021-01-04 10:25:50.402102825 +0100
|
||||
+++ gcc/c-family/c-gimplify.c 2021-03-17 19:19:20.052702095 +0100
|
||||
@@ -497,6 +497,35 @@ c_genericize_control_stmt (tree *stmt_p,
|
||||
genericize_omp_for_stmt (stmt_p, walk_subtrees, data, func, lh);
|
||||
break;
|
||||
|
||||
+ case STATEMENT_LIST:
|
||||
+ if (TREE_SIDE_EFFECTS (stmt))
|
||||
+ {
|
||||
+ tree_stmt_iterator i;
|
||||
+ int nondebug_stmts = 0;
|
||||
+ bool clear_side_effects = true;
|
||||
+ /* Genericization can clear TREE_SIDE_EFFECTS, e.g. when
|
||||
+ transforming an IF_STMT into COND_EXPR. If such stmt
|
||||
+ appears in a STATEMENT_LIST that contains only that
|
||||
+ stmt and some DEBUG_BEGIN_STMTs, without -g where the
|
||||
+ STATEMENT_LIST wouldn't be present at all the resulting
|
||||
+ expression wouldn't have TREE_SIDE_EFFECTS set, so make sure
|
||||
+ to clear it even on the STATEMENT_LIST in such cases. */
|
||||
+ for (i = tsi_start (stmt); !tsi_end_p (i); tsi_next (&i))
|
||||
+ {
|
||||
+ tree t = tsi_stmt (i);
|
||||
+ if (TREE_CODE (t) != DEBUG_BEGIN_STMT && nondebug_stmts < 2)
|
||||
+ nondebug_stmts++;
|
||||
+ walk_tree_1 (tsi_stmt_ptr (i), func, data, NULL, lh);
|
||||
+ if (TREE_CODE (t) != DEBUG_BEGIN_STMT
|
||||
+ && (nondebug_stmts > 1 || TREE_SIDE_EFFECTS (tsi_stmt (i))))
|
||||
+ clear_side_effects = false;
|
||||
+ }
|
||||
+ if (clear_side_effects)
|
||||
+ TREE_SIDE_EFFECTS (stmt) = 0;
|
||||
+ *walk_subtrees = 0;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
break;
|
||||
}
|
||||
--- gcc/cp/cp-gimplify.c.jj 2021-03-04 09:42:27.602123905 +0100
|
||||
+++ gcc/cp/cp-gimplify.c 2021-03-17 19:38:42.743888589 +0100
|
||||
@@ -1464,35 +1464,6 @@ cp_genericize_r (tree *stmt_p, int *walk
|
||||
walk_subtrees = 0;
|
||||
break;
|
||||
|
||||
- case STATEMENT_LIST:
|
||||
- if (TREE_SIDE_EFFECTS (stmt))
|
||||
- {
|
||||
- tree_stmt_iterator i;
|
||||
- int nondebug_stmts = 0;
|
||||
- bool clear_side_effects = true;
|
||||
- /* Genericization can clear TREE_SIDE_EFFECTS, e.g. when
|
||||
- transforming an IF_STMT into COND_EXPR. If such stmt
|
||||
- appears in a STATEMENT_LIST that contains only that
|
||||
- stmt and some DEBUG_BEGIN_STMTs, without -g where the
|
||||
- STATEMENT_LIST wouldn't be present at all the resulting
|
||||
- expression wouldn't have TREE_SIDE_EFFECTS set, so make sure
|
||||
- to clear it even on the STATEMENT_LIST in such cases. */
|
||||
- for (i = tsi_start (stmt); !tsi_end_p (i); tsi_next (&i))
|
||||
- {
|
||||
- tree t = tsi_stmt (i);
|
||||
- if (TREE_CODE (t) != DEBUG_BEGIN_STMT && nondebug_stmts < 2)
|
||||
- nondebug_stmts++;
|
||||
- cp_walk_tree (tsi_stmt_ptr (i), cp_genericize_r, data, NULL);
|
||||
- if (TREE_CODE (t) != DEBUG_BEGIN_STMT
|
||||
- && (nondebug_stmts > 1 || TREE_SIDE_EFFECTS (tsi_stmt (i))))
|
||||
- clear_side_effects = false;
|
||||
- }
|
||||
- if (clear_side_effects)
|
||||
- TREE_SIDE_EFFECTS (stmt) = 0;
|
||||
- *walk_subtrees = 0;
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
case OMP_DISTRIBUTE:
|
||||
/* Need to explicitly instantiate copy ctors on class iterators of
|
||||
composite distribute parallel for. */
|
||||
@@ -1566,6 +1537,7 @@ cp_genericize_r (tree *stmt_p, int *walk
|
||||
case OMP_SIMD:
|
||||
case OMP_LOOP:
|
||||
case OACC_LOOP:
|
||||
+ case STATEMENT_LIST:
|
||||
/* These cases are handled by shared code. */
|
||||
c_genericize_control_stmt (stmt_p, walk_subtrees, data,
|
||||
cp_genericize_r, cp_walk_subtrees);
|
||||
--- gcc/testsuite/gcc.dg/pr99230.c.jj 2021-03-17 19:34:26.633711074 +0100
|
||||
+++ gcc/testsuite/gcc.dg/pr99230.c 2021-03-17 19:33:30.210332887 +0100
|
||||
@@ -0,0 +1,40 @@
|
||||
+/* PR debug/99230 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O2 --param logical-op-non-short-circuit=0 -fcompare-debug --param=jump-table-max-growth-ratio-for-speed=5000" } */
|
||||
+
|
||||
+extern void fn2 (void);
|
||||
+extern void fn3 (int);
|
||||
+int a, b;
|
||||
+void
|
||||
+fn1 (void)
|
||||
+{
|
||||
+ int c;
|
||||
+ short d;
|
||||
+ switch (a) {
|
||||
+ case 22000:
|
||||
+ fn2 ();
|
||||
+ case 22300:
|
||||
+ b = 0;
|
||||
+ case 22600:
|
||||
+ case 22601:
|
||||
+ case 22900:
|
||||
+ fn3 (1);
|
||||
+ case 20100:
|
||||
+ fn3 (2);
|
||||
+ case 20200:
|
||||
+ fn3 (3);
|
||||
+ case 20300:
|
||||
+ fn3 (4);
|
||||
+ case 20400:
|
||||
+ fn3 (5);
|
||||
+ case 20310:
|
||||
+ fn3 (4);
|
||||
+ case 20410:
|
||||
+ fn3 (5);
|
||||
+ }
|
||||
+ if (d || c) {
|
||||
+ do
|
||||
+ ;
|
||||
+ while (0);
|
||||
+ }
|
||||
+}
|
@ -1,94 +0,0 @@
|
||||
Revert:
|
||||
2021-03-18 Vladimir N. Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR target/99422
|
||||
* lra-constraints.c (process_address_1): Use lookup_constraint
|
||||
only for a single constraint.
|
||||
|
||||
2021-03-10 Vladimir N. Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR target/99422
|
||||
* lra-constraints.c (process_address_1): Don't check unknown
|
||||
constraint, use X for empty constraint.
|
||||
|
||||
2021-03-09 Vladimir N. Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR target/99454
|
||||
* lra-constraints.c (process_address_1): Process constraint 'g'
|
||||
separately and digital constraints containing more one digit.
|
||||
|
||||
2021-03-09 Vladimir N. Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR target/99454
|
||||
* lra-constraints.c (process_address_1): Process 0..9 constraints
|
||||
in process_address_1.
|
||||
|
||||
2021-03-08 Vladimir N. Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR target/99422
|
||||
* lra-constraints.c (skip_contraint_modifiers): New function.
|
||||
(process_address_1): Use it before lookup_constraint call.
|
||||
|
||||
2021-03-05 Vladimir N. Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR target/99378
|
||||
* lra-constraints.c (process_address_1): Skip decomposing address
|
||||
for asm insn operand with unknown constraint.
|
||||
|
||||
--- gcc/lra-constraints.c.jj 2021-03-19 13:53:38.094778251 +0100
|
||||
+++ gcc/lra-constraints.c 2021-03-19 14:23:16.017389900 +0100
|
||||
@@ -3392,21 +3392,6 @@ equiv_address_substitution (struct addre
|
||||
return change_p;
|
||||
}
|
||||
|
||||
-/* Skip all modifiers and whitespaces in constraint STR and return the
|
||||
- result. */
|
||||
-static const char *
|
||||
-skip_contraint_modifiers (const char *str)
|
||||
-{
|
||||
- for (;;str++)
|
||||
- switch (*str)
|
||||
- {
|
||||
- case '+' : case '&' : case '=': case '*': case ' ': case '\t':
|
||||
- case '$': case '^' : case '%': case '?': case '!':
|
||||
- break;
|
||||
- default: return str;
|
||||
- }
|
||||
-}
|
||||
-
|
||||
/* Major function to make reloads for an address in operand NOP or
|
||||
check its correctness (If CHECK_ONLY_P is true). The supported
|
||||
cases are:
|
||||
@@ -3441,8 +3426,8 @@ process_address_1 (int nop, bool check_o
|
||||
HOST_WIDE_INT scale;
|
||||
rtx op = *curr_id->operand_loc[nop];
|
||||
rtx mem = extract_mem_from_operand (op);
|
||||
- const char *constraint;
|
||||
- enum constraint_num cn;
|
||||
+ const char *constraint = curr_static_id->operand[nop].constraint;
|
||||
+ enum constraint_num cn = lookup_constraint (constraint);
|
||||
bool change_p = false;
|
||||
|
||||
if (MEM_P (mem)
|
||||
@@ -3450,21 +3435,6 @@ process_address_1 (int nop, bool check_o
|
||||
&& GET_CODE (XEXP (mem, 0)) == SCRATCH)
|
||||
return false;
|
||||
|
||||
- constraint
|
||||
- = skip_contraint_modifiers (curr_static_id->operand[nop].constraint);
|
||||
- if (IN_RANGE (constraint[0], '0', '9'))
|
||||
- {
|
||||
- char *end;
|
||||
- unsigned long dup = strtoul (constraint, &end, 10);
|
||||
- constraint
|
||||
- = skip_contraint_modifiers (curr_static_id->operand[dup].constraint);
|
||||
- }
|
||||
- if (*skip_contraint_modifiers (constraint
|
||||
- + CONSTRAINT_LEN (constraint[0],
|
||||
- constraint)) != '\0')
|
||||
- cn = CONSTRAINT__UNKNOWN;
|
||||
- else
|
||||
- cn = lookup_constraint (*constraint == '\0' ? "X" : constraint);
|
||||
if (insn_extra_address_constraint (cn)
|
||||
/* When we find an asm operand with an address constraint that
|
||||
doesn't satisfy address_operand to begin with, we clear
|
@ -1,92 +0,0 @@
|
||||
2021-03-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/99388
|
||||
* dwarf2out.c (insert_float): Change return type from void to
|
||||
unsigned, handle GET_MODE_SIZE (mode) == 2 and return element size.
|
||||
(mem_loc_descriptor, loc_descriptor, add_const_value_attribute):
|
||||
Adjust callers.
|
||||
|
||||
--- gcc/dwarf2out.c.jj 2021-03-03 09:53:55.391191719 +0100
|
||||
+++ gcc/dwarf2out.c 2021-03-04 15:51:23.174396552 +0100
|
||||
@@ -3825,7 +3825,7 @@ static void add_data_member_location_att
|
||||
static bool add_const_value_attribute (dw_die_ref, rtx);
|
||||
static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
|
||||
static void insert_wide_int (const wide_int &, unsigned char *, int);
|
||||
-static void insert_float (const_rtx, unsigned char *);
|
||||
+static unsigned insert_float (const_rtx, unsigned char *);
|
||||
static rtx rtl_for_decl_location (tree);
|
||||
static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool);
|
||||
static bool tree_add_const_value_attribute (dw_die_ref, tree);
|
||||
@@ -16292,11 +16292,12 @@ mem_loc_descriptor (rtx rtl, machine_mod
|
||||
scalar_float_mode float_mode = as_a <scalar_float_mode> (mode);
|
||||
unsigned int length = GET_MODE_SIZE (float_mode);
|
||||
unsigned char *array = ggc_vec_alloc<unsigned char> (length);
|
||||
+ unsigned int elt_size = insert_float (rtl, array);
|
||||
|
||||
- insert_float (rtl, array);
|
||||
mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
|
||||
- mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
|
||||
- mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
|
||||
+ mem_loc_result->dw_loc_oprnd2.v.val_vec.length
|
||||
+ = length / elt_size;
|
||||
+ mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
|
||||
mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
|
||||
}
|
||||
}
|
||||
@@ -16866,11 +16867,11 @@ loc_descriptor (rtx rtl, machine_mode mo
|
||||
{
|
||||
unsigned int length = GET_MODE_SIZE (smode);
|
||||
unsigned char *array = ggc_vec_alloc<unsigned char> (length);
|
||||
+ unsigned int elt_size = insert_float (rtl, array);
|
||||
|
||||
- insert_float (rtl, array);
|
||||
loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
|
||||
- loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
|
||||
- loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
|
||||
+ loc_result->dw_loc_oprnd2.v.val_vec.length = length / elt_size;
|
||||
+ loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
|
||||
loc_result->dw_loc_oprnd2.v.val_vec.array = array;
|
||||
}
|
||||
}
|
||||
@@ -19689,7 +19690,7 @@ insert_wide_int (const wide_int &val, un
|
||||
|
||||
/* Writes floating point values to dw_vec_const array. */
|
||||
|
||||
-static void
|
||||
+static unsigned
|
||||
insert_float (const_rtx rtl, unsigned char *array)
|
||||
{
|
||||
long val[4];
|
||||
@@ -19699,11 +19700,19 @@ insert_float (const_rtx rtl, unsigned ch
|
||||
real_to_target (val, CONST_DOUBLE_REAL_VALUE (rtl), mode);
|
||||
|
||||
/* real_to_target puts 32-bit pieces in each long. Pack them. */
|
||||
+ if (GET_MODE_SIZE (mode) < 4)
|
||||
+ {
|
||||
+ gcc_assert (GET_MODE_SIZE (mode) == 2);
|
||||
+ insert_int (val[0], 2, array);
|
||||
+ return 2;
|
||||
+ }
|
||||
+
|
||||
for (i = 0; i < GET_MODE_SIZE (mode) / 4; i++)
|
||||
{
|
||||
insert_int (val[i], 4, array);
|
||||
array += 4;
|
||||
}
|
||||
+ return 4;
|
||||
}
|
||||
|
||||
/* Attach a DW_AT_const_value attribute for a variable or a parameter which
|
||||
@@ -19752,9 +19761,10 @@ add_const_value_attribute (dw_die_ref di
|
||||
scalar_float_mode mode = as_a <scalar_float_mode> (GET_MODE (rtl));
|
||||
unsigned int length = GET_MODE_SIZE (mode);
|
||||
unsigned char *array = ggc_vec_alloc<unsigned char> (length);
|
||||
+ unsigned int elt_size = insert_float (rtl, array);
|
||||
|
||||
- insert_float (rtl, array);
|
||||
- add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
|
||||
+ add_AT_vec (die, DW_AT_const_value, length / elt_size, elt_size,
|
||||
+ array);
|
||||
}
|
||||
return true;
|
||||
|
@ -1,39 +0,0 @@
|
||||
2021-03-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/99562
|
||||
PR debug/66728
|
||||
* dwarf2out.c (get_full_len): Use get_precision rather than
|
||||
min_precision.
|
||||
(add_const_value_attribute): Make sure add_AT_wide argument has
|
||||
precision prec rather than some very wide one.
|
||||
|
||||
--- gcc/dwarf2out.c.jj 2021-03-11 14:01:43.385194205 +0100
|
||||
+++ gcc/dwarf2out.c 2021-03-12 17:34:49.365207265 +0100
|
||||
@@ -385,13 +385,12 @@ dump_struct_debug (tree type, enum debug
|
||||
#endif
|
||||
|
||||
/* Get the number of HOST_WIDE_INTs needed to represent the precision
|
||||
- of the number. Some constants have a large uniform precision, so
|
||||
- we get the precision needed for the actual value of the number. */
|
||||
+ of the number. */
|
||||
|
||||
static unsigned int
|
||||
get_full_len (const wide_int &op)
|
||||
{
|
||||
- int prec = wi::min_precision (op, UNSIGNED);
|
||||
+ int prec = wi::get_precision (op);
|
||||
return ((prec + HOST_BITS_PER_WIDE_INT - 1)
|
||||
/ HOST_BITS_PER_WIDE_INT);
|
||||
}
|
||||
@@ -19732,8 +19731,9 @@ add_const_value_attribute (dw_die_ref di
|
||||
{
|
||||
wide_int w1 = rtx_mode_t (rtl, MAX_MODE_INT);
|
||||
unsigned int prec = MIN (wi::min_precision (w1, UNSIGNED),
|
||||
- (unsigned int)CONST_WIDE_INT_NUNITS (rtl) * HOST_BITS_PER_WIDE_INT);
|
||||
- wide_int w = wi::zext (w1, prec);
|
||||
+ (unsigned int) CONST_WIDE_INT_NUNITS (rtl)
|
||||
+ * HOST_BITS_PER_WIDE_INT);
|
||||
+ wide_int w = wide_int::from (w1, prec, UNSIGNED);
|
||||
add_AT_wide (die, DW_AT_const_value, w);
|
||||
}
|
||||
return true;
|
@ -1,44 +0,0 @@
|
||||
2021-03-18 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/99650
|
||||
* decl.c (cp_finish_decomp): Diagnose void initializers when
|
||||
using tuple_element and get.
|
||||
|
||||
* g++.dg/cpp1z/decomp55.C: New test.
|
||||
|
||||
--- gcc/cp/decl.c.jj 2021-03-16 21:17:41.014498713 +0100
|
||||
+++ gcc/cp/decl.c 2021-03-18 19:31:22.430149523 +0100
|
||||
@@ -8629,6 +8629,11 @@ cp_finish_decomp (tree decl, tree first,
|
||||
: get_tuple_element_type (type, i));
|
||||
input_location = sloc;
|
||||
|
||||
+ if (VOID_TYPE_P (eltype))
|
||||
+ {
|
||||
+ error ("forming reference to void");
|
||||
+ eltype = error_mark_node;
|
||||
+ }
|
||||
if (init == error_mark_node || eltype == error_mark_node)
|
||||
{
|
||||
inform (dloc, "in initialization of structured binding "
|
||||
--- gcc/testsuite/g++.dg/cpp1z/decomp55.C.jj 2021-03-18 19:43:07.958457494 +0100
|
||||
+++ gcc/testsuite/g++.dg/cpp1z/decomp55.C 2021-03-18 19:42:35.099815746 +0100
|
||||
@@ -0,0 +1,19 @@
|
||||
+// PR c++/99650
|
||||
+// { dg-do compile { target c++17 } }
|
||||
+
|
||||
+namespace std {
|
||||
+ template<typename T> struct tuple_size;
|
||||
+ template<int, typename> struct tuple_element;
|
||||
+}
|
||||
+
|
||||
+struct A {
|
||||
+ int i;
|
||||
+ template <int I> void get() { }
|
||||
+};
|
||||
+
|
||||
+template<> struct std::tuple_size<A> { static const int value = 2; };
|
||||
+template<int I> struct std::tuple_element<I,A> { using type = void; };
|
||||
+
|
||||
+A a = { 42 };
|
||||
+auto [ x, y ] = a; // { dg-error "forming reference to void" }
|
||||
+// { dg-message "in initialization of structured binding variable 'x'" "" { target *-*-* } .-1 }
|
2
sources
2
sources
@ -1,4 +1,4 @@
|
||||
SHA512 (gcc-11.0.1-20210319.tar.xz) = 5e8469f34601f9fd30439509129a738f61c61357f260cc6addffdea1a6b14eba0cf7030ad6e32dd000f08b0fbba13e90d6618e5d699658000675cdfe22c919f1
|
||||
SHA512 (gcc-11.0.1-20210324.tar.xz) = 3f7fb2bb2098b021efe5e3dcf128a91525adc49ace1ad4120bbccc95827c45affe9beacfff43b03a0da30fcb6f8ea1a22ab7bd05f2aed05b0541f8c2ca4cfd0c
|
||||
SHA512 (isl-0.18.tar.bz2) = 85d0b40f4dbf14cb99d17aa07048cdcab2dc3eb527d2fbb1e84c41b2de5f351025370e57448b63b2b8a8cf8a0843a089c3263f9baee1542d5c2e1cb37ed39d94
|
||||
SHA512 (newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz) = 002a48a7b689a81abbf16161bcaec001a842e67dfbe372e9e109092703bfc666675f16198f60ca429370e8850d564547dc505df81bc3aaca4ce6defbc014ad6c
|
||||
SHA512 (nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz) = f6d10db94fa1570ae0f94df073fa3c73c8e5ee16d59070b53d94f7db0de8a031bc44d7f3f1852533da04b625ce758e022263855ed43cfc6867e0708d001e53c7
|
||||
|
Loading…
Reference in New Issue
Block a user