re PR c++/18318 (ICE: error: Multiple inline callers)
cp: PR c++/18318 * parser.c (cp_parser_new_type_id): Move array size expression checks from here ... * init.c (build_new): ... to here. testsuite: PR c++/18318 * g++.dg/template/new1.C: New. From-SVN: r91678
This commit is contained in:
parent
2085a21fd6
commit
ad1063d545
@ -1,3 +1,10 @@
|
||||
2004-12-02 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/18318
|
||||
* parser.c (cp_parser_new_type_id): Move array size expression
|
||||
checks from here ...
|
||||
* init.c (build_new): ... to here.
|
||||
|
||||
2004-12-02 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/18758
|
||||
@ -18,7 +25,8 @@
|
||||
|
||||
2004-12-01 Matt Austern <austern@apple.com>
|
||||
|
||||
* name-lookup.c (namespace_binding): Omit alias check for global namespace.
|
||||
* name-lookup.c (namespace_binding): Omit alias check for global
|
||||
namespace.
|
||||
|
||||
2004-12-01 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
|
@ -1633,6 +1633,15 @@ build_new (tree placement, tree type, tree nelts, tree init,
|
||||
return rval;
|
||||
}
|
||||
|
||||
if (nelts)
|
||||
{
|
||||
if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, nelts, false))
|
||||
pedwarn ("size in array new must have integral type");
|
||||
nelts = save_expr (cp_convert (sizetype, nelts));
|
||||
if (nelts == integer_zero_node)
|
||||
warning ("zero size array reserves no space");
|
||||
}
|
||||
|
||||
/* ``A reference cannot be created by the new operator. A reference
|
||||
is not an object (8.2.2, 8.4.3), so a pointer to it could not be
|
||||
returned by new.'' ARM 5.3.3 */
|
||||
|
@ -4901,15 +4901,7 @@ cp_parser_new_type_id (cp_parser* parser, tree *nelts)
|
||||
*nelts = declarator->u.array.bounds;
|
||||
if (*nelts == error_mark_node)
|
||||
*nelts = integer_one_node;
|
||||
else if (!processing_template_decl)
|
||||
{
|
||||
if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, *nelts,
|
||||
false))
|
||||
pedwarn ("size in array new must have integral type");
|
||||
*nelts = save_expr (cp_convert (sizetype, *nelts));
|
||||
if (*nelts == integer_zero_node)
|
||||
warning ("zero size array reserves no space");
|
||||
}
|
||||
|
||||
if (outer_declarator)
|
||||
outer_declarator->declarator = declarator->declarator;
|
||||
else
|
||||
|
@ -1,3 +1,8 @@
|
||||
2004-12-03 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/18318
|
||||
* g++.dg/template/new1.C: New.
|
||||
|
||||
2004-12-02 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
|
||||
|
||||
PR fortran/18710
|
||||
|
45
gcc/testsuite/g++.dg/template/new1.C
Normal file
45
gcc/testsuite/g++.dg/template/new1.C
Normal file
@ -0,0 +1,45 @@
|
||||
// { dg-do run }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
// Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
// Contributed by Nathan Sidwell 2 Dec 2004 <nathan@codesourcery.com>
|
||||
|
||||
// PR 18318. ICE with template new[]
|
||||
// Origin:Elliot Hughes <enh@jessies.org>
|
||||
// Andrew Pinski <pinskia@gcc.gnu.org>
|
||||
|
||||
struct Aint
|
||||
{
|
||||
~Aint ();
|
||||
Aint ();
|
||||
};
|
||||
|
||||
Aint::Aint () {}
|
||||
Aint::~Aint () {}
|
||||
|
||||
static int count;
|
||||
|
||||
template <class T>
|
||||
struct A
|
||||
{
|
||||
unsigned Blksize() const;
|
||||
|
||||
void f()
|
||||
{
|
||||
new T[Blksize()];
|
||||
}
|
||||
};
|
||||
|
||||
template <class T> unsigned A<T>::Blksize () const
|
||||
{
|
||||
count++;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
A<Aint> a;
|
||||
a.f();
|
||||
|
||||
return count != 1;
|
||||
}
|
Loading…
Reference in New Issue
Block a user