Commit 903c6234 by Nathan Sidwell Committed by Nathan Sidwell

re PR c++/5132 (NaN = 0.0 * HUGE_VAL fails to compile in templates)

cp:
	PR c++/5132
	* decl2.c (reparse_absdcl_as_casts): Don't digest_init if we
	are processing a template decl.
testsuite:
	* g++.dg/template/ctor1.C: New test.

From-SVN: r48464
parent 477558bf
2002-01-02 Nathan Sidwell <nathan@codesourcery.com> 2002-01-02 Nathan Sidwell <nathan@codesourcery.com>
PR c++/5132
* decl2.c (reparse_absdcl_as_casts): Don't digest_init if we
are processing a template decl.
2002-01-02 Nathan Sidwell <nathan@codesourcery.com>
PR c++/5116, c++/764 PR c++/5116, c++/764
* call.c (build_new_op): Make sure template class operands are * call.c (build_new_op): Make sure template class operands are
instantiated. Simplify arglist construction. instantiated. Simplify arglist construction.
......
/* Process declarations and variables for C compiler. /* Process declarations and variables for C compiler.
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001 Free Software Foundation, Inc. 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com) Hacked by Michael Tiemann (tiemann@cygnus.com)
This file is part of GNU CC. This file is part of GNU CC.
...@@ -3622,12 +3622,16 @@ reparse_absdcl_as_casts (decl, expr) ...@@ -3622,12 +3622,16 @@ reparse_absdcl_as_casts (decl, expr)
type = groktypename (TREE_VALUE (CALL_DECLARATOR_PARMS (decl))); type = groktypename (TREE_VALUE (CALL_DECLARATOR_PARMS (decl)));
decl = TREE_OPERAND (decl, 0); decl = TREE_OPERAND (decl, 0);
expr = digest_init (type, expr, (tree *) 0); if (processing_template_decl)
if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type)) expr = build_min (CONSTRUCTOR, type, decl, CONSTRUCTOR_ELTS (expr));
else
{ {
int failure = complete_array_type (type, expr, 1); expr = digest_init (type, expr, (tree *) 0);
if (failure) if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
my_friendly_abort (78); {
int failure = complete_array_type (type, expr, 1);
my_friendly_assert (!failure, 78);
}
} }
} }
......
2002-01-02 Nathan Sidwell <nathan@codesourcery.com> 2002-01-02 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/template/ctor1.C: New test.
2002-01-02 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/template/friend2.C: New test. * g++.dg/template/friend2.C: New test.
2002-01-01 Hans-Peter Nilsson <hp@bitrange.com> 2002-01-01 Hans-Peter Nilsson <hp@bitrange.com>
......
// { dg-do compile }
// Copyright (C) 2001 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 31 Dec 2001 <nathan@codesourcery.com>
// PR 5132. ICE on struct constructors in templates.
// snippets from bits/huge_val.h
#define __HUGE_VAL_bytes { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
#define __huge_val_t union { unsigned char __c[8]; double __d; }
#define HUGE_VAL (__extension__ \
((__huge_val_t) { __c: __HUGE_VAL_bytes }).__d)
void foo( const int&) {
HUGE_VAL; // no problem here
}
template <class F>
void Tfoo( const F&) {
HUGE_VAL; // g++ fails here
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment