This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/71138] New: [concepts] ill-formed non-constant expression use in nested requirement produces duplicated diagnostics with poor source locations


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

            Bug ID: 71138
           Summary: [concepts] ill-formed non-constant expression use in
                    nested requirement produces duplicated diagnostics
                    with poor source locations
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tom at honermann dot net
                CC: andrew.n.sutton at gmail dot com, asutton at gcc dot gnu.org
  Target Milestone: ---

The following test case is ill-formed and gcc r236238 correctly rejects it. 
However, duplicate diagnostic are issued and the diagnostics fail to identify
the problematic source code.

The test case contains two instances of constraint satisfaction failures
labeled #1 and #2.  The first occurs in a static_assert and produces a single
error message.  The second occurs in overload resolution and produces three
duplicate error messages.

None of the diagnostics produce identify the problematic source code annotated
in the test case.

$ cat t.cpp
template<typename T>
constexpr bool p(T) { return true; }
template<typename T>
concept bool C = requires(T t) {
    requires p(t); // An error should be reported here.
};

static_assert(C<int>); // #1: error: âtâ is not a constant expression

template<C T>
int f(T) { return 1; }
auto x = f(1); // #2: (3x) error: âtâ is not a constant expression


$ svn info
Path: .
Working Copy Root Path: /home/tom/src/gcc-trunk
URL: svn://gcc.gnu.org/svn/gcc/trunk
Relative URL: ^/trunk
Repository Root: svn://gcc.gnu.org/svn/gcc
Repository UUID: 138bc75d-0d04-0410-961f-82ee72b054a4
Revision: 236239
Node Kind: directory
Schedule: normal
Last Changed Author: uros
Last Changed Rev: 236238
Last Changed Date: 2016-05-14 05:07:13 -0400 (Sat, 14 May 2016)

$ g++ --version
g++ (GCC) 7.0.0 20160514 (experimental)
...

$ g++ -c -std=c++1z -fconcepts t.cpp
t.cpp:8:15: error: âtâ is not a constant expression
 static_assert(C<int>); // #1: error: âtâ is not a constant expression
               ^~~~~~
t.cpp:12:13: error: âtâ is not a constant expression
 auto x = f(1); // #2: (3x) error: âtâ is not a constant expression
             ^
t.cpp:12:13: error: âtâ is not a constant expression
t.cpp:12:13: error: cannot call function âint f(T) [with T = int]â
t.cpp:11:5: note:   constraints not satisfied
 int f(T) { return 1; }
     ^
t.cpp:12:13: error: âtâ is not a constant expression
 auto x = f(1); // #2: (3x) error: âtâ is not a constant expression
             ^
t.cpp:11:5: note:   concept âC<int>â was not satisfied
 int f(T) { return 1; }
     ^

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]