This commit is contained in:
Jakub Jelinek 2021-06-17 10:57:18 +02:00
parent a2a6a491f5
commit 063f63dafb
2 changed files with 21 additions and 95 deletions

View File

@ -4,7 +4,7 @@
%global gcc_major 11
# Note, gcc_release must be integer, if you want to add suffixes to
# %%{release}, append them after %%{gcc_release} on Release: line.
%global gcc_release 4
%global gcc_release 5
%global nvptx_tools_gitrev 5f6f343a302d620b0868edab376c00b15741e39e
%global newlib_cygwin_gitrev 50e2a63b04bdd018484605fbb954fd1bd5147fa0
%global _unpackaged_files_terminate_build 0
@ -265,7 +265,6 @@ Patch10: gcc11-Wno-format-security.patch
Patch11: gcc11-rh1574936.patch
Patch12: gcc11-d-shared-libphobos.patch
Patch13: gcc11-pr99341-revert.patch
Patch14: gcc11-pr100797.patch
Patch100: gcc11-fortran-fdec-duplicates.patch
Patch101: gcc11-fortran-flogical-as-integer.patch
@ -789,7 +788,6 @@ to NVidia PTX capable devices if available.
%endif
%patch12 -p0 -b .d-shared-libphobos~
%patch13 -p0 -b .pr99341-revert~
%patch14 -p0 -b .pr100797~
%if 0%{?rhel} >= 9
%patch100 -p1 -b .fortran-fdec-duplicates~
@ -3132,7 +3130,26 @@ end
%endif
%changelog
* Mon Jun 14 2021 Florian Weimer <fweimer@redhat.com> - 11.1.1-4
* Thu Jun 17 2021 Jakub Jelinek <jakub@redhat.com> 11.1.1-5
- update from releases/gcc-11-branch
- PRs bootstrap/100731, c++/91706, c++/91859, c++/95719, c++/100065,
c++/100102, c++/100580, c++/100666, c++/100796, c++/100797,
c++/100862, c++/100946, c++/100963, c++/101029, c++/101078, c/100902,
c/100920, d/100882, d/100935, d/100964, d/100967, d/100999,
debug/100852, fortran/82376, fortran/98301, fortran/99839,
fortran/100965, ipa/100791, libstdc++/98842, libstdc++/100475,
libstdc++/100577, libstdc++/100631, libstdc++/100639,
libstdc++/100676, libstdc++/100690, libstdc++/100768,
libstdc++/100770, libstdc++/100824, libstdc++/100833,
libstdc++/100889, libstdc++/100894, libstdc++/100900,
libstdc++/100982, libstdc++/101034, libstdc++/101055,
middle-end/100576, middle-end/100898, middle-end/101009,
preprocessor/100646, rtl-optimization/100342, rtl-optimization/100590,
rtl-optimization/101008, target/100333, target/100885, target/100887,
target/101046, testsuite/100750, tree-optimization/100934,
tree-optimization/100981
* Mon Jun 14 2021 Florian Weimer <fweimer@redhat.com> 11.1.1-4
- NVR bump to enable rebuild in side tag
* Mon May 31 2021 Jakub Jelinek <jakub@redhat.com> 11.1.1-3

View File

@ -1,91 +0,0 @@
2021-05-27 Jason Merrill <jason@redhat.com>
PR c++/100797
PR c++/95719
* call.c (build_over_call): Adjust base_binfo in
resolves_to_fixed_type_p case.
* g++.dg/inherit/virtual15.C: New test.
--- gcc/cp/call.c
+++ gcc/cp/call.c
@@ -9152,18 +9152,32 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
if (base_binfo == error_mark_node)
return error_mark_node;
}
- tree converted_arg = build_base_path (PLUS_EXPR, arg,
- base_binfo, 1, complain);
/* If we know the dynamic type of the object, look up the final overrider
in the BINFO. */
if (DECL_VINDEX (fn) && (flags & LOOKUP_NONVIRTUAL) == 0
&& resolves_to_fixed_type_p (arg))
{
- fn = lookup_vfn_in_binfo (DECL_VINDEX (fn), base_binfo);
- flags |= LOOKUP_NONVIRTUAL;
+ tree ov = lookup_vfn_in_binfo (DECL_VINDEX (fn), base_binfo);
+
+ /* And unwind base_binfo to match. If we don't find the type we're
+ looking for in BINFO_INHERITANCE_CHAIN, we're looking at diamond
+ inheritance; for now do a normal virtual call in that case. */
+ tree octx = DECL_CONTEXT (ov);
+ tree obinfo = base_binfo;
+ while (obinfo && !SAME_BINFO_TYPE_P (BINFO_TYPE (obinfo), octx))
+ obinfo = BINFO_INHERITANCE_CHAIN (obinfo);
+ if (obinfo)
+ {
+ fn = ov;
+ base_binfo = obinfo;
+ flags |= LOOKUP_NONVIRTUAL;
+ }
}
+ tree converted_arg = build_base_path (PLUS_EXPR, arg,
+ base_binfo, 1, complain);
+
argarray[j++] = converted_arg;
parm = TREE_CHAIN (parm);
if (first_arg != NULL_TREE)
--- gcc/testsuite/g++.dg/inherit/virtual15.C
+++ gcc/testsuite/g++.dg/inherit/virtual15.C
@@ -0,0 +1,18 @@
+// PR c++/100797
+// { dg-do run }
+
+bool ok = false;
+struct S1 { virtual ~S1() {} };
+struct S2 { virtual void f1() = 0; };
+struct S3: S1, S2 {
+ void f1() { f2(); }
+ virtual void f2() = 0;
+};
+struct S4: S3 {
+ void f2() { ok = true; }
+ using S2::f1;
+};
+int main() {
+ S4().f1();
+ if (!ok) __builtin_abort ();
+}
--- gcc/testsuite/g++.dg/inherit/virtual15a.C
+++ gcc/testsuite/g++.dg/inherit/virtual15a.C
@@ -0,0 +1,19 @@
+// PR c++/100797 plus diamond inheritance
+// { dg-do run }
+
+bool ok = false;
+struct S1 { virtual ~S1() {} };
+struct S2 { virtual void f1() = 0; };
+struct S3: S1, virtual S2 {
+ void f1() { f2(); }
+ virtual void f2() = 0;
+};
+struct SX: virtual S2 { };
+struct S4: SX, S3 {
+ void f2() { ok = true; }
+ using S2::f1;
+};
+int main() {
+ S4().f1();
+ if (!ok) __builtin_abort ();
+}