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
This commit is contained in:
parent
477558bf39
commit
903c623438
@ -1,3 +1,9 @@
|
||||
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
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Process declarations and variables for C compiler.
|
||||
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)
|
||||
|
||||
This file is part of GNU CC.
|
||||
@ -3622,12 +3622,16 @@ reparse_absdcl_as_casts (decl, expr)
|
||||
type = groktypename (TREE_VALUE (CALL_DECLARATOR_PARMS (decl)));
|
||||
decl = TREE_OPERAND (decl, 0);
|
||||
|
||||
expr = digest_init (type, expr, (tree *) 0);
|
||||
if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
|
||||
if (processing_template_decl)
|
||||
expr = build_min (CONSTRUCTOR, type, decl, CONSTRUCTOR_ELTS (expr));
|
||||
else
|
||||
{
|
||||
int failure = complete_array_type (type, expr, 1);
|
||||
if (failure)
|
||||
my_friendly_abort (78);
|
||||
expr = digest_init (type, expr, (tree *) 0);
|
||||
if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
|
||||
{
|
||||
int failure = complete_array_type (type, expr, 1);
|
||||
my_friendly_assert (!failure, 78);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
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.
|
||||
|
22
gcc/testsuite/g++.dg/template/ctor1.C
Normal file
22
gcc/testsuite/g++.dg/template/ctor1.C
Normal file
@ -0,0 +1,22 @@
|
||||
// { 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
|
||||
}
|
Loading…
Reference in New Issue
Block a user