[Bug c++/46871] New: [C++0x] ICE: in cxx_eval_constant_expression, at cp/semantics.c:6686 on invalid code (+rejects valid)
zsojka at seznam dot cz
gcc-bugzilla@gcc.gnu.org
Thu Dec 9 17:02:00 GMT 2010
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46871
Summary: [C++0x] ICE: in cxx_eval_constant_expression, at
cp/semantics.c:6686 on invalid code (+rejects valid)
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: zsojka@seznam.cz
Testcase is similiar to PR46870:
-------- testcase.C --------
template < int > struct S
{
void foo ()
{
// const int c = 0;
const int b = c > c;
S < b > ();
}
};
----------------------------
Compiler output:
$ gcc testcase.C -std=c++0x
testcase.C: In member function 'void S<<anonymous> >::foo()':
testcase.C:6:19: error: 'c' was not declared in this scope
testcase.C:7:11: error: '(int)b' is not a valid template argument for type
'int' because it is a non-constant expression
testcase.C:7:11: error: the value of 'b' is not usable in a constant expression
testcase.C:7:11: internal compiler error: in cxx_eval_constant_expression, at
cp/semantics.c:6686
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
Backtrace is quite long (44 callers)
When the commented code is uncommented, it seems gcc rejects valid code (comeau
online accepts it):
-------- testcase.C --------
template < int > struct S
{
void foo ()
{
const int c = 0;
const int b = c > c;
S < b > ();
}
};
----------------------------
$ gcc testcase.C -std=c++0x
testcase.C: In member function 'void S<<anonymous> >::foo()':
testcase.C:7:11: error: could not convert template argument 'b' to 'int'
More information about the Gcc-bugs
mailing list