From patchwork Mon Dec 19 18:14:31 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Carlini X-Patchwork-Id: 132291 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id B45B1B7036 for ; Tue, 20 Dec 2011 05:15:58 +1100 (EST) Received: (qmail 23989 invoked by alias); 19 Dec 2011 18:15:54 -0000 Received: (qmail 23977 invoked by uid 22791); 19 Dec 2011 18:15:52 -0000 X-SWARE-Spam-Status: No, hits=-3.5 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from acsinet15.oracle.com (HELO acsinet15.oracle.com) (141.146.126.227) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 19 Dec 2011 18:15:38 +0000 Received: from ucsinet21.oracle.com (ucsinet21.oracle.com [156.151.31.93]) by acsinet15.oracle.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id pBJIFamv029399 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 19 Dec 2011 18:15:37 GMT Received: from acsmt358.oracle.com (acsmt358.oracle.com [141.146.40.158]) by ucsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id pBJIFZrT001781 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 19 Dec 2011 18:15:36 GMT Received: from abhmt101.oracle.com (abhmt101.oracle.com [141.146.116.53]) by acsmt358.oracle.com (8.12.11.20060308/8.12.11) with ESMTP id pBJIFYt3012828; Mon, 19 Dec 2011 12:15:34 -0600 Received: from [192.168.1.4] (/79.52.192.36) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 19 Dec 2011 10:15:34 -0800 Message-ID: <4EEF7F07.8070204@oracle.com> Date: Mon, 19 Dec 2011 19:14:31 +0100 From: Paolo Carlini User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: "gcc-patches@gcc.gnu.org" CC: Jason Merrill Subject: [C++ Patch] PR 51328 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hi, per the audit trail, treat BIT_NOT_EXPR specially, do not try to "adjust" it with make_typename_type. Tested x86_64-linux. Thanks, Paolo. /////////////////////////// /cp 2011-12-19 Paolo Carlini PR c++/51328 * pt.c (convert_template_argument): Early error out and return error_mark_node for invalid uses of destructors as types. /testsuite 2011-12-19 Paolo Carlini PR c++/51328 * g++.dg/template/crash109.C: New. Index: testsuite/g++.dg/template/crash109.C =================================================================== --- testsuite/g++.dg/template/crash109.C (revision 0) +++ testsuite/g++.dg/template/crash109.C (revision 0) @@ -0,0 +1,6 @@ +// PR c++/51328 + +template struct A +{ + void foo(A); // { dg-error "invalid use of destructor" } +}; Index: cp/pt.c =================================================================== --- cp/pt.c (revision 182488) +++ cp/pt.c (working copy) @@ -6445,9 +6445,17 @@ convert_template_argument (tree parm, if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM) { - permerror (input_location, "to refer to a type member of a template parameter, " - "use %", orig_arg); + if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR) + { + if (complain & tf_error) + error ("invalid use of destructor %qE as a type", orig_arg); + return error_mark_node; + } + permerror (input_location, + "to refer to a type member of a template parameter, " + "use %", orig_arg); + orig_arg = make_typename_type (TREE_OPERAND (arg, 0), TREE_OPERAND (arg, 1), typename_type,