Summary: | [3.4 regression] ICE with sizeof(expr) in non-type template arg | ||
---|---|---|---|
Product: | gcc | Reporter: | Wolfgang Bangerth <bangerth> |
Component: | c++ | Assignee: | Jeffrey D. Oldham <oldham> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | bangerth, ehrhardt, gcc-bugs, s.bosscher |
Priority: | P3 | ||
Version: | unknown | ||
Target Milestone: | --- | ||
Host: | Target: | ||
Build: | Known to work: | ||
Known to fail: | Last reconfirmed: |
Description
Wolfgang Bangerth
2003-02-20 17:16:01 UTC
Fix: Index: cp/pt.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/cp/pt.c,v retrieving revision 1.663 diff -c -p -r1.663 pt.c *** cp/pt.c 24 Feb 2003 07:43:22 -0000 1.663 --- cp/pt.c 24 Feb 2003 19:35:19 -0000 *************** tsubst_copy_and_build (t, args, complain *** 8137,8143 **** if (TREE_CODE (name) == TEMPLATE_ID_EXPR) name = build_nt (TEMPLATE_ID_EXPR, TREE_OPERAND (name, 0), ! TREE_OPERAND (name, 1)); function = resolve_scoped_fn_name (TREE_OPERAND (function, 0), name); --- 8137,8143 ---- if (TREE_CODE (name) == TEMPLATE_ID_EXPR) name = build_nt (TEMPLATE_ID_EXPR, TREE_OPERAND (name, 0), ! build_expr_from_tree (TREE_OPERAND (name, 1))); function = resolve_scoped_fn_name (TREE_OPERAND (function, 0), name); Index: testsuite/g++.dg/parse/template6.C =================================================================== RCS file: testsuite/g++.dg/parse/template6.C diff -N testsuite/g++.dg/parse/template6.C *** /dev/null 1 Jan 1970 00:00:00 -0000 --- testsuite/g++.dg/parse/template6.C 24 Feb 2003 19:35:21 -0000 *************** *** 0 **** --- 1,20 ---- + // { dg-do compile } + + // Copyright (C) 2003 Free Software Foundation, Inc. + // Contributed by Wolfgang Bangerth <bangerth@ticam.utexas.edu> 20 Feb 2003. + + // PR c++/9778. Ensure templated functions in other namespaces are + // correctly instantiated. + + namespace NS { + template <int N> void foo (); + } + + template <int N> struct X { + int m; + void g () { + NS::foo<sizeof(m)>(); + } + }; + + template class X<2>; From: Wolfgang Bangerth <bangerth@ticam.utexas.edu> To: gcc-gnats@gcc.gnu.org, <gcc-bugs@gcc.gnu.org>, <oldham@codesourcery.com> Cc: Subject: Re: c++/9778 -- causing patch Date: Thu, 20 Feb 2003 17:41:38 -0600 (CST) This patch > 2003-01-16 Jeffrey D. Oldham <oldham@codesourcery.com> > > * cp-tree.h (tsubst_copy_and_build): New declaration. > * pt.c (tsubst_copy): Remove 'build_expr_from_tree' from comment. > (tsubst_expr): Use 'tsubst_copy_and_build'. Update initial comment. > (tsubst_copy_and_build): New function. seems to be causing the ICE in PR 9778. A small testcase is ---------------------------- namespace NS { template <int N> void foo (); } template <int N> struct X { int m; int g () { NS::foo<sizeof(m)>(); } }; template class X<2>; --------------------------- Jeffrey, would you mind taking a look? This report seems to be the last that prevents me from building (and then testing again) my library with mainline... If you are lucky, the fix to this report also fixes PR 9749, see the comment in 9778. Thanks Wolfgang ------------------------------------------------------------------------- Wolfgang Bangerth email: bangerth@ticam.utexas.edu www: http://www.ticam.utexas.edu/~bangerth/ From: Steven Bosscher <s.bosscher@student.tudelft.nl> To: gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org, nobody@gcc.gnu.org, bangerth@ticam.utexas.edu, gcc-prs@gcc.gnu.org Cc: Subject: Re: c++/9778: [3.4 regression] ICE with sizeof(expr) in non-type template arg Date: Thu, 20 Feb 2003 19:43:26 +0100 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9778 devphil says: : Search converges between 2003-01-16-trunk (#103) and 2003-01-17-trunk (#104). Line-numbered input is: ======================================== 1 namespace NS { 2 template <int N> void foo (); 3 } 4 5 template <int N> struct X { 6 int m; 7 int g () { 8 NS::foo<sizeof(m)>(); 9 } 10 }; 11 12 template class X<2>; 13 ======================================== Diagnostic output follows, from the last compiler tested: input: In member function `int X<N>::g() [with int N = 2]': input:12: instantiated from here input:8: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. Compiler output follows, from the last compiler tested: .file "input" Greetz Steven State-Changed-From-To: open->analyzed State-Changed-Why: This has been analyzed. Besides I can confirm that this is a regression from 3.2, hence priority high. From: oldham@gcc.gnu.org To: gcc-gnats@gcc.gnu.org Cc: Subject: c++/9778 Date: 24 Feb 2003 20:39:38 -0000 CVSROOT: /cvs/gcc Module name: gcc Changes by: oldham@gcc.gnu.org 2003-02-24 20:39:38 Modified files: gcc/cp : pt.c ChangeLog Added files: gcc/testsuite/g++.dg/parse: template6.C Log message: 2003-02-24 Jeffrey D. Oldham <oldham@codesourcery.com> PR c++/9778 * cp/pt.c (tsubst_copy_and_build): For a templated function inside a scope, process template arguments. * testsuite/g++.dg/parse/template6.C: New test case. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&r1=1.663&r2=1.664 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.3213&r2=1.3214 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/template6.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 Responsible-Changed-From-To: unassigned->oldham Responsible-Changed-Why: To fix the problem. State-Changed-From-To: analyzed->closed State-Changed-Why: The problem was resolved via a patch. |