re PR c++/40370 (ICE with invalid array bound in template class)
PR c++/40370 PR c++/40372 * parser.c (cp_parser_direct_declarator): Don't set TREE_SIDE_EFFECTS on error_mark_node. Check for VLAs outside of function context before check whether to wrap bounds into a NOP_EXPR with TREE_SIDE_EFFECTS. * g++.dg/template/error41.C: New test. * g++.dg/template/error42.C: New test. From-SVN: r148278
This commit is contained in:
parent
db34470d17
commit
85a988d14e
|
@ -1,3 +1,12 @@
|
||||||
|
2009-06-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR c++/40370
|
||||||
|
PR c++/40372
|
||||||
|
* parser.c (cp_parser_direct_declarator): Don't set TREE_SIDE_EFFECTS
|
||||||
|
on error_mark_node. Check for VLAs outside of function context
|
||||||
|
before check whether to wrap bounds into a NOP_EXPR with
|
||||||
|
TREE_SIDE_EFFECTS.
|
||||||
|
|
||||||
2009-06-08 Alexandre Oliva <aoliva@redhat.com>
|
2009-06-08 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
* repo.c (get_base_filename): Use aux_base_name rather than
|
* repo.c (get_base_filename): Use aux_base_name rather than
|
||||||
|
|
|
@ -13336,13 +13336,6 @@ cp_parser_direct_declarator (cp_parser* parser,
|
||||||
&non_constant_p);
|
&non_constant_p);
|
||||||
if (!non_constant_p)
|
if (!non_constant_p)
|
||||||
bounds = fold_non_dependent_expr (bounds);
|
bounds = fold_non_dependent_expr (bounds);
|
||||||
else if (processing_template_decl)
|
|
||||||
{
|
|
||||||
/* Remember this wasn't a constant-expression. */
|
|
||||||
bounds = build_nop (TREE_TYPE (bounds), bounds);
|
|
||||||
TREE_SIDE_EFFECTS (bounds) = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Normally, the array bound must be an integral constant
|
/* Normally, the array bound must be an integral constant
|
||||||
expression. However, as an extension, we allow VLAs
|
expression. However, as an extension, we allow VLAs
|
||||||
in function scopes. */
|
in function scopes. */
|
||||||
|
@ -13352,6 +13345,12 @@ cp_parser_direct_declarator (cp_parser* parser,
|
||||||
&token->location);
|
&token->location);
|
||||||
bounds = error_mark_node;
|
bounds = error_mark_node;
|
||||||
}
|
}
|
||||||
|
else if (processing_template_decl && !error_operand_p (bounds))
|
||||||
|
{
|
||||||
|
/* Remember this wasn't a constant-expression. */
|
||||||
|
bounds = build_nop (TREE_TYPE (bounds), bounds);
|
||||||
|
TREE_SIDE_EFFECTS (bounds) = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
bounds = NULL_TREE;
|
bounds = NULL_TREE;
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
|
2009-06-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR c++/40370
|
||||||
|
PR c++/40372
|
||||||
|
* g++.dg/template/error41.C: New test.
|
||||||
|
* g++.dg/template/error42.C: New test.
|
||||||
|
|
||||||
2009-06-08 Revital Eres <eres@il.ibm.com>
|
2009-06-08 Revital Eres <eres@il.ibm.com>
|
||||||
|
|
||||||
PR40359
|
PR testsuite/40359
|
||||||
* gcc.dg/vect/vect-58.c: Change checks to use vect_hw_misalign.
|
* gcc.dg/vect/vect-58.c: Change checks to use vect_hw_misalign.
|
||||||
* gcc.dg/vect/vect-88.c: Likewise.
|
* gcc.dg/vect/vect-88.c: Likewise.
|
||||||
* gcc.dg/vect/no-section-anchors-vect-66.c: Likewise.
|
* gcc.dg/vect/no-section-anchors-vect-66.c: Likewise.
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
// PR c++/40370
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
struct A
|
||||||
|
{
|
||||||
|
static int i;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <int> struct B
|
||||||
|
{
|
||||||
|
int x[A::i]; // { dg-error "array bound is not an integer constant" }
|
||||||
|
};
|
|
@ -0,0 +1,20 @@
|
||||||
|
// PR c++/40372
|
||||||
|
// { dg-do compile }
|
||||||
|
|
||||||
|
template <int> struct A
|
||||||
|
{
|
||||||
|
int i; // { dg-error "invalid use of non-static data member" }
|
||||||
|
friend void foo ()
|
||||||
|
{
|
||||||
|
int x[i]; // { dg-error "from this location" }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct B
|
||||||
|
{
|
||||||
|
int j; // { dg-error "invalid use of non-static data member" }
|
||||||
|
friend int bar ()
|
||||||
|
{
|
||||||
|
return j; // { dg-error "from this location" }
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue