From patchwork Sat Nov 2 03:47:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: kamlesh kumar X-Patchwork-Id: 1188301 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-512258-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="bjbu+kyP"; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="SuwWMwyV"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 474lR123VPz9sNx for ; Sat, 2 Nov 2019 14:48:42 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references; q=dns; s= default; b=wSz3IamzV8Sm19rAyrD+RlRG2/UougfRnfiM0zNneFx7rWRTIIUwY jGQqfNOkbO1frbrM/4iNxBt5C0cHEmyJVYKzsk+rl3nu9u2Q9ixKrQilgUCmroYT JvhuRiH7ps3zN1FQXOrVH3vV99WMEkAIUWbqJQQnf8A87XG4ORvql4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:in-reply-to:references; s= default; bh=FkwyZ0sMSl1obl0gj21cuLtevYE=; b=bjbu+kyPC2yCwmilSBMr mCCc18LccK21s4HaHQ5pUrRZvZLsvlDZUvsXR0uELviywLq2mSCUmXcl12fN3bk+ t2QqK7Sqn/wRtBvwUwK/ura2I6XVwWC51AMWzFACz8SgcGXQOJM0tZpH0JCaDRex hCXVQqp6BQJlQgaWase1jZU= Received: (qmail 63449 invoked by alias); 2 Nov 2019 03:48:35 -0000 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 Received: (qmail 63330 invoked by uid 89); 2 Nov 2019 03:48:16 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=H*r:204, c_cpp_builtins X-HELO: mail-pl1-f174.google.com Received: from mail-pl1-f174.google.com (HELO mail-pl1-f174.google.com) (209.85.214.174) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 02 Nov 2019 03:48:14 +0000 Received: by mail-pl1-f174.google.com with SMTP id k7so5187888pll.1; Fri, 01 Nov 2019 20:48:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=9LT0qlH4ekLNl/6GHHTL/ivTVAR+fip1HmGBjtrlId0=; b=SuwWMwyVNhiOhTbZFJyHJH8FIFJAro6L+lRJ5uZNqzG0umQlQEmgTeTivfGR2qhKHy qAj0Bp/edMCeKT8JECsePqshwR0SR98Uht4DSffDFN1xdvEXMC13U6H6U8Y+w9kldiCd DumzZoWzCLJt3N3jvYHJ1UQMYk19yVoq2UYaaYa0z/g93xIri+f3ZDWxQ6D2APU4lTPz RwKyWjl28TiAtQywUpSqZ/p1L9tBelSS8ivpsaUajw0msW4MLZp3PhrOFwpmO3xM4WRv cLudY248AQ+r+r2Y/05JmVpXQkgtwH8mHickrh7KDwMiq7cJJmF0Ws8XbBHTZ+EE2nn9 VPgg== Received: from localhost.localdomain ([2405:204:540c:55c3:2165:21cc:5399:b93d]) by smtp.googlemail.com with ESMTPSA id m65sm11052186pje.3.2019.11.01.20.48.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Nov 2019 20:48:07 -0700 (PDT) From: Kamlesh Kumar To: jason@redhat.com Cc: polacek@redhat.com, gcc-patches@gcc.gnu.org, marxin@gcc.gnu.org, Kamlesh Kumar Subject: [PATCH v2] [PR91979] Updated the fix: Date: Sat, 2 Nov 2019 09:17:43 +0530 Message-Id: <20191102034743.2620-1-kamleshbhalui@gmail.com> In-Reply-To: References: X-IsSubscribed: yes Changlogs gcc ------ 2019-11-02 Kamlesh Kumar PR c++/91979 - mangling nullptr expression * mangle.c (write_template_arg_literal): Handle nullptr mangling. * testsuite/g++.dg/cpp0x/nullptr27.C: Modify Test. * testsuite/g++.dg/cpp0x/pr91979.C: New Test. libiberty ----------- 2019-11-02 Kamlesh Kumar * cp-demangle.c (d_expr_primary): Handle nullptr demangling. * testsuite/demangle-expected: Added test. gcc/c-family ---------- 2019-11-02 Kamlesh Kumar * c-opts.c (c_common_post_options): Updated latest_abi_version. --- gcc/c-family/c-opts.c | 2 +- gcc/cp/mangle.c | 4 +++- gcc/testsuite/g++.dg/cpp0x/nullptr27.C | 2 +- gcc/testsuite/g++.dg/cpp0x/pr91979.C | 15 +++++++++++++++ libiberty/cp-demangle.c | 11 +++++++++++ libiberty/testsuite/demangle-expected | 4 ++++ 6 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/pr91979.C diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index 0fffe60b140..d4c77be5cd5 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -937,7 +937,7 @@ c_common_post_options (const char **pfilename) /* Change flag_abi_version to be the actual current ABI level, for the benefit of c_cpp_builtins, and to make comparison simpler. */ - const int latest_abi_version = 13; + const int latest_abi_version = 14; /* Generate compatibility aliases for ABI v11 (7.1) by default. */ const int abi_compat_default = 11; diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index a9333b84349..234a975781e 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -3400,7 +3400,9 @@ write_template_arg_literal (const tree value) case INTEGER_CST: gcc_assert (!same_type_p (TREE_TYPE (value), boolean_type_node) || integer_zerop (value) || integer_onep (value)); - write_integer_cst (value); + if (abi_version_at_least(14) + && !NULLPTR_TYPE_P (TREE_TYPE (value))) + write_integer_cst (value); break; case REAL_CST: diff --git a/gcc/testsuite/g++.dg/cpp0x/nullptr27.C b/gcc/testsuite/g++.dg/cpp0x/nullptr27.C index 2510dc80634..edd11606266 100644 --- a/gcc/testsuite/g++.dg/cpp0x/nullptr27.C +++ b/gcc/testsuite/g++.dg/cpp0x/nullptr27.C @@ -1,7 +1,7 @@ // PR c++/52706 // { dg-do compile { target c++11 } } // { dg-options "-fabi-version=0" } -// { dg-final { scan-assembler "_Z1fIDnLDn0EEiT_" } } +// { dg-final { scan-assembler "_Z1fIDnLDnEEiT_" } } template int f(T); diff --git a/gcc/testsuite/g++.dg/cpp0x/pr91979.C b/gcc/testsuite/g++.dg/cpp0x/pr91979.C new file mode 100644 index 00000000000..7fcd56b27f0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr91979.C @@ -0,0 +1,15 @@ +// PR c++/91989 +// { dg-do compile { target c++11 } } +// { dg-final { scan-assembler "_Z3fooILPv0EEvPN9enable_ifIXeqT_LDnEEvE4typeE" } } + +template +struct enable_if {}; + +template +struct enable_if { typedef T type; }; + +template +void foo(typename enable_if

::type* = 0) {} + +template void foo<(void *)0>(void *); + diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 5b674d7d93c..3fb1c56409e 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -3577,6 +3577,17 @@ d_expr_primary (struct d_info *di) && type->u.s_builtin.type->print != D_PRINT_DEFAULT) di->expansion -= type->u.s_builtin.type->len; + if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE + && strncmp (type->u.s_builtin.type->name, + cplus_demangle_builtin_types[33].name, 17) == 0) + { + if (d_peek_char (di) == 'E') + { + d_advance (di, 1); + return type; + } + } + /* Rather than try to interpret the literal value, we just collect it as a string. Note that it's possible to have a floating point literal here. The ABI specifies that the diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected index 61681484d0e..f68a8a71aaf 100644 --- a/libiberty/testsuite/demangle-expected +++ b/libiberty/testsuite/demangle-expected @@ -1446,3 +1446,7 @@ Foo()::X::fn _ZZZ3FooIiEfvENKUlT_E_clIcEEDaS0_EN1X2fnEv Foo()::{lambda(auto:1)#1}::operator()(char) const::X::fn() Foo()::{lambda(auto:1)#1}::operator()(char) const::X::fn +#PR91979 demangling nullptr expression + +_Z3fooILPv0EEvPN9enable_ifIXeqT_LDnEEvE4typeE +void foo<(void*)0>(enable_if<((void*)0)==((decltype(nullptr))), void>::type*)