https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94553

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Marek Polacek <mpola...@gcc.gnu.org>:

https://gcc.gnu.org/g:54980635c537f3130481da2d8b1109c775db8bb0

commit r11-1714-g54980635c537f3130481da2d8b1109c775db8bb0
Author: Marek Polacek <pola...@redhat.com>
Date:   Fri Jun 26 12:40:59 2020 -0400

    c++: Check uniqueness of concepts/variable templates [PR94553]

    This patch wraps up PR94553.  Variable template names have no C
    compatibility implications so they should be unique in their
    declarative region.  It occurred to me that this applies to concepts
    as well.  This is not specified in [basic.scope.declarative]/4.2
    but that seems like a bug in the standard.

    I couldn't use variable_template_p because that uses PRIMARY_TEMPLATE_P
    which uses DECL_PRIMARY_TEMPLATE and that might not have been set up yet
    (push_template_decl hasn't yet been called).  PRIMARY_TEMPLATE_P is
    important to distinguish between a variable template and a variable in a
    function template.  But I think we don't have to worry about that in
    duplicate_decls: a template declaration cannot appear at block scope,
    and additional checks in duplicate_decls suggest that it won't ever
    see a TEMPLATE_DECL for a variable in a function template.  So
    checking that the DECL_TEMPLATE_RESULT is a VAR_DECL seems to be fine.
    I could have added a default argument to variable_template_p too to
    avoid checking PRIMARY_TEMPLATE_P but it didn't seem worth the effort.

    gcc/cp/ChangeLog:

            PR c++/94553
            * decl.c (duplicate_decls): Make sure a concept or a variable
            template is unique in its declarative region.

    gcc/testsuite/ChangeLog:

            PR c++/94553
            * g++.dg/cpp1y/pr68578.C: Adjust dg-error.
            * g++.dg/cpp1y/var-templ66.C: New test.
            * g++.dg/cpp2a/concepts-redecl1.C: New test.

Reply via email to