public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/98394] New: Concept with auto... template parameter pack in if-statement causes compilation error
@ 2020-12-19 18:20 ngmr80 at web dot de
  2021-11-09 14:11 ` [Bug c++/98394] " cvs-commit at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: ngmr80 at web dot de @ 2020-12-19 18:20 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 98394
           Summary: Concept with auto... template parameter pack in
                    if-statement causes compilation error
           Product: gcc
           Version: 10.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ngmr80 at web dot de
  Target Milestone: ---

Created attachment 49807
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49807&action=edit
Preprocessed source

In C++20, when using a concept 'C' with an auto... template parameter pack in
an if-statement, the compiler reports the error "'C' does not constrain a
type.".  The same concept, however, _is_ usable in other contexts.

Example:

template<auto... T_values>
concept C = true;

int main()
{
    auto b = C<1, 2>;  // ok
    if (C<1, 2>);      // error
}

--
Output of g++-10 -v -save-temps -std=c++20 main.cpp

Using built-in specs.
COLLECT_GCC=g++-10
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
10.1.0-2ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr
--with-gcc-major-version-only --program-suffix=-10
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new
--enable-gnu-unique-object --disable-vtable-verify --enable-plugin
--enable-default-pie --with-system-zlib --enable-libphobos-checking=release
--with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch
--disable-werror --with-arch-32=i686 --with-abi=m64
--with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none=/build/gcc-10-eDoCEC/gcc-10-10.1.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-eDoCEC/gcc-10-10.1.0/debian/tmp-gcn/usr,hsa
--without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.1.0 (Ubuntu 10.1.0-2ubuntu1~18.04) 
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++2a' '-shared-libgcc'
'-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/10/cc1plus -E -quiet -v -imultiarch
x86_64-linux-gnu -D_GNU_SOURCE main.cpp -mtune=generic -march=x86-64 -std=c++2a
-fpch-preprocess -fasynchronous-unwind-tables -fstack-protector-strong -Wformat
-Wformat-security -o main.ii
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/10"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/10/include-fixed"
ignoring nonexistent directory
"/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/10
 /usr/include/x86_64-linux-gnu/c++/10
 /usr/include/c++/10/backward
 /usr/lib/gcc/x86_64-linux-gnu/10/include
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++2a' '-shared-libgcc'
'-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/10/cc1plus -fpreprocessed main.ii -quiet
-dumpbase main.cpp -mtune=generic -march=x86-64 -auxbase main -std=c++2a
-version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat
-Wformat-security -o main.s
GNU C++17 (Ubuntu 10.1.0-2ubuntu1~18.04) version 10.1.0 (x86_64-linux-gnu)
        compiled by GNU C version 10.1.0, GMP version 6.1.2, MPFR version
4.0.1, MPC version 1.1.0, isl version isl-0.19-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++17 (Ubuntu 10.1.0-2ubuntu1~18.04) version 10.1.0 (x86_64-linux-gnu)
        compiled by GNU C version 10.1.0, GMP version 6.1.2, MPFR version
4.0.1, MPC version 1.1.0, isl version isl-0.19-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 435c9a72f92ce04eba08a47828fa63c4
main.cpp: In function ‘int main()’:
main.cpp:7:9: error: ‘C’ does not constrain a type
    7 |     if (C<1, 2>);              // error
      |         ^~~~~~~
main.cpp:2:9: note: concept defined here
    2 | concept C = true;
      |         ^

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/98394] Concept with auto... template parameter pack in if-statement causes compilation error
  2020-12-19 18:20 [Bug c++/98394] New: Concept with auto... template parameter pack in if-statement causes compilation error ngmr80 at web dot de
@ 2021-11-09 14:11 ` cvs-commit at gcc dot gnu.org
  2021-11-09 14:12 ` ppalka at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-11-09 14:11 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppalka@gcc.gnu.org>:

https://gcc.gnu.org/g:a22d910305a5232694ff48ead37a7f53e46b7202

commit r12-5053-ga22d910305a5232694ff48ead37a7f53e46b7202
Author: Patrick Palka <ppalka@redhat.com>
Date:   Tue Nov 9 09:09:43 2021 -0500

    c++: bogus error w/ tentative type parse of concept-id [PR98394]

    Here when tentatively parsing the if condition as a declaration, we try
    to treat C<1> as the start of a constrained placeholder type, which we
    quickly reject because C doesn't accept a type as its first argument.
    But since we're parsing tentatively, we shouldn't emit an error in this
    case.

    In passing, also fix PR85846 by only overriding 'tentative' to false when
    given a concept-name, and not also when given a concept-id that has an
empty
    argument list.

            PR c++/98394
            PR c++/85846

    gcc/cp/ChangeLog:

            * parser.c (cp_parser_placeholder_type_specifier): Declare
            static.  Don't override tentative to false when tmpl is a
            concept-id with empty argument list.  Don't emit a "does not
            constrain a type" error when tentative.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/concepts-pr98394.C: New test.
            * g++.dg/cpp2a/concepts-pr85846.C: New test.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/98394] Concept with auto... template parameter pack in if-statement causes compilation error
  2020-12-19 18:20 [Bug c++/98394] New: Concept with auto... template parameter pack in if-statement causes compilation error ngmr80 at web dot de
  2021-11-09 14:11 ` [Bug c++/98394] " cvs-commit at gcc dot gnu.org
@ 2021-11-09 14:12 ` ppalka at gcc dot gnu.org
  2021-12-15 19:55 ` cvs-commit at gcc dot gnu.org
  2021-12-15 19:56 ` ppalka at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: ppalka at gcc dot gnu.org @ 2021-11-09 14:12 UTC (permalink / raw)
  To: gcc-bugs

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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-11-09
     Ever confirmed|0                           |1
           Assignee|unassigned at gcc dot gnu.org      |ppalka at gcc dot gnu.org
                 CC|                            |ppalka at gcc dot gnu.org
             Status|UNCONFIRMED                 |ASSIGNED
   Target Milestone|---                         |11.3

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/98394] Concept with auto... template parameter pack in if-statement causes compilation error
  2020-12-19 18:20 [Bug c++/98394] New: Concept with auto... template parameter pack in if-statement causes compilation error ngmr80 at web dot de
  2021-11-09 14:11 ` [Bug c++/98394] " cvs-commit at gcc dot gnu.org
  2021-11-09 14:12 ` ppalka at gcc dot gnu.org
@ 2021-12-15 19:55 ` cvs-commit at gcc dot gnu.org
  2021-12-15 19:56 ` ppalka at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-12-15 19:55 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-11 branch has been updated by Patrick Palka
<ppalka@gcc.gnu.org>:

https://gcc.gnu.org/g:a94867f67e0b48ba53691f1d5f43f5c7d60adecb

commit r11-9388-ga94867f67e0b48ba53691f1d5f43f5c7d60adecb
Author: Patrick Palka <ppalka@redhat.com>
Date:   Tue Nov 9 09:09:43 2021 -0500

    c++: bogus error w/ tentative type parse of concept-id [PR98394]

    Here when tentatively parsing the if condition as a declaration, we try
    to treat C<1> as the start of a constrained placeholder type, which we
    quickly reject because C doesn't accept a type as its first argument.
    But since we're parsing tentatively, we shouldn't emit an error in this
    case.

    In passing, also fix PR85846 by only overriding 'tentative' to false when
    given a concept-name, and not also when given a concept-id that has an
empty
    argument list.

            PR c++/98394
            PR c++/85846

    gcc/cp/ChangeLog:

            * parser.c (cp_parser_placeholder_type_specifier): Declare
            static.  Don't override tentative to false when tmpl is a
            concept-id with empty argument list.  Don't emit a "does not
            constrain a type" error when tentative.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/concepts-pr98394.C: New test.
            * g++.dg/cpp2a/concepts-pr85846.C: New test.

    (cherry picked from commit a22d910305a5232694ff48ead37a7f53e46b7202)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/98394] Concept with auto... template parameter pack in if-statement causes compilation error
  2020-12-19 18:20 [Bug c++/98394] New: Concept with auto... template parameter pack in if-statement causes compilation error ngmr80 at web dot de
                   ` (2 preceding siblings ...)
  2021-12-15 19:55 ` cvs-commit at gcc dot gnu.org
@ 2021-12-15 19:56 ` ppalka at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: ppalka at gcc dot gnu.org @ 2021-12-15 19:56 UTC (permalink / raw)
  To: gcc-bugs

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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|ASSIGNED                    |RESOLVED

--- Comment #3 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Fixed for GCC 11.3/12.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-12-15 19:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-19 18:20 [Bug c++/98394] New: Concept with auto... template parameter pack in if-statement causes compilation error ngmr80 at web dot de
2021-11-09 14:11 ` [Bug c++/98394] " cvs-commit at gcc dot gnu.org
2021-11-09 14:12 ` ppalka at gcc dot gnu.org
2021-12-15 19:55 ` cvs-commit at gcc dot gnu.org
2021-12-15 19:56 ` ppalka at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).