aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/scanner.c
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2020-04-21 18:41:02 -0400
committerPatrick Palka <ppalka@redhat.com>2020-04-21 18:41:02 -0400
commit0e665f256b4ac8c5f78713ebd4e9378fd4ecf5a8 (patch)
tree62ef8f7c90b6b9c30ddcedef2cfe428c51b40641 /gcc/fortran/scanner.c
parente76100ced607218a3bf26344fd57d7384a7c18b5 (diff)
downloadgcc-0e665f256b4ac8c5f78713ebd4e9378fd4ecf5a8.zip
gcc-0e665f256b4ac8c5f78713ebd4e9378fd4ecf5a8.tar.gz
gcc-0e665f256b4ac8c5f78713ebd4e9378fd4ecf5a8.tar.bz2
c++: Constrained inherited constructor template [PR94549]
A comment in satisfy_declaration_constraints says /* For inherited constructors, consider the original declaration; it has the correct template information attached. */ d = strip_inheriting_ctors (d); but it looks like this comment is wrong when the inherited constructor is for an instantiation of a constructor template. In that case, DECL_TEMPLATE_INFO is correct and DECL_INHERITED_CTOR points to the constructor template of the base class rather than to the particular instantiation of the constructor template (and so the DECL_TI_ARGS of the DECL_INHERITED_CTOR are in their dependent form). So doing strip_inheriting_ctors in this case then eventually leads to satisfy_associated_constraints returning true regardless of the constraints themselves, due to the passed in 'args' being dependent. An inherited constructor seems to have a non-empty DECL_TEMPLATE_INFO only when it's for an instantiation of a constructor template, so this patch fixes this issue by checking for empty DECL_TEMPLATE_INFO before calling strip_inheriting_ctors. There is another unguarded call to strip_inheriting_ctors in get_normalized_constraints_from_decl, but this one seems to be safe to do unconditionally because the rest of that function doesn't need/look at the DECL_TI_ARGS of the decl. gcc/cp/ChangeLog: PR c++/94549 * constraint.cc (satisfy_declaration_constraints): Don't strip the inherited constructor if it already has template information. gcc/testsuite/ChangeLog: PR c++/94549 * g++.dg/concepts/inherit-ctor3.C: Adjust expected diagnostics. * g++.dg/cpp2a/concepts-inherit-ctor4.C: New test. * g++.dg/cpp2a/concepts-inherit-ctor8.C: New test.
Diffstat (limited to 'gcc/fortran/scanner.c')
0 files changed, 0 insertions, 0 deletions