re PR c++/11525 (ICE/segfault on C++ code)
cp: PR c++/11525 * parser.c (cp_parser_primary_expression): Do not set non-constant-p merely because it is a dependent scope. testsuite: PR c++/11525 * g++.dg/parse/constant4.C: New test. From-SVN: r70041
This commit is contained in:
parent
2fdd01a09a
commit
f21e6028bf
@ -1,5 +1,9 @@
|
||||
2003-08-01 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/11525
|
||||
* parser.c (cp_parser_primary_expression): Do not set
|
||||
non-constant-p merely because it is a dependent scope.
|
||||
|
||||
PR c++/9447
|
||||
* decl2.c (do_class_using_decl): Set type to NULL_TREE.
|
||||
* semantics.c (finish_expr_stmt): Do not convert to void in a
|
||||
|
@ -2394,11 +2394,6 @@ cp_parser_primary_expression (cp_parser *parser,
|
||||
{
|
||||
if (TYPE_P (TREE_OPERAND (decl, 0)))
|
||||
*qualifying_class = TREE_OPERAND (decl, 0);
|
||||
/* Since this name was dependent, the expression isn't
|
||||
constant -- yet. No error is issued because it
|
||||
might be constant when things are instantiated. */
|
||||
if (parser->constant_expression_p)
|
||||
parser->non_constant_expression_p = true;
|
||||
return decl;
|
||||
}
|
||||
/* Check to see if DECL is a local variable in a context
|
||||
|
@ -1,5 +1,8 @@
|
||||
2003-08-01 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/11525
|
||||
* g++.dg/parse/constant4.C: New test.
|
||||
|
||||
PR c++/9447
|
||||
* g++.dg/template/using5.C: New test.
|
||||
|
||||
|
40
gcc/testsuite/g++.dg/parse/constant4.C
Normal file
40
gcc/testsuite/g++.dg/parse/constant4.C
Normal file
@ -0,0 +1,40 @@
|
||||
// { dg-do compile }
|
||||
|
||||
// Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
// Contributed by Nathan Sidwell 31 Jul 2003 <nathan@codesourcery.com>
|
||||
|
||||
// PR c++/11525 incorrect error about non-constant initalizer
|
||||
|
||||
template<typename> class X;
|
||||
template<unsigned> class Y {};
|
||||
|
||||
|
||||
template<typename T>
|
||||
void Foo ()
|
||||
{
|
||||
static const unsigned I = X<T>::I;
|
||||
|
||||
Y<I> i;
|
||||
|
||||
static const unsigned J = X<T>::J;
|
||||
|
||||
Y<J> j; // { dg-error "non-constant" "" }
|
||||
}
|
||||
|
||||
struct A
|
||||
{
|
||||
operator unsigned () const;
|
||||
};
|
||||
|
||||
template <typename> struct X
|
||||
{
|
||||
enum {I};
|
||||
static A const J;
|
||||
};
|
||||
|
||||
void Baz ()
|
||||
{
|
||||
Foo<int> (); // { dg-error "instantiated" "" }
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user