From patchwork Sat Apr 15 15:21:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iain Buclaw X-Patchwork-Id: 751051 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]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3w4ytD0R4mz9s7k for ; Sun, 16 Apr 2017 01:21:39 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="w0raF2A8"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:content-type; q= dns; s=default; b=KTdNQ/sujWlVuy5p5iM7DSDiahJASHnF5u9Dw9Aq69uGjX psFBC9uoUw65sNsuJ6DJJRVh8HhgzwEatgTtnU+JNK0Z8lfJu54A9k4TgAGbfMfE ZuTCTIMz4gCL+4QB0H4ot45TrdwjndS0qFFZn4FszD1XguRQlbW/jlu65nWPg= 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 :mime-version:from:date:message-id:subject:to:content-type; s= default; bh=U9FRXPtEXX0sOYdmNG8fjJ5V1Zg=; b=w0raF2A8HmxyvWC1qVBj 55445QweWIgZ/18F7ePeBM2v47KlG0l+mfkSPjUa2hHne7udyxJ/WnAT8+eBjAvG 7VMLgMrPMv1ULdcrR7DGOAiSZRU5ZiqmfH9oeBTDG5LCHG+GM2+0q9wFjAtP+9BI Iz6ynAXKmd5QRD6Cy/GHgjM= Received: (qmail 33149 invoked by alias); 15 Apr 2017 15:21:31 -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 33137 invoked by uid 89); 15 Apr 2017 15:21:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.1 required=5.0 tests=AWL, 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.2 spammy=kindly X-HELO: mail-vk0-f51.google.com Received: from mail-vk0-f51.google.com (HELO mail-vk0-f51.google.com) (209.85.213.51) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 15 Apr 2017 15:21:29 +0000 Received: by mail-vk0-f51.google.com with SMTP id n73so3440521vke.1 for ; Sat, 15 Apr 2017 08:21:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:from:date:message-id:subject :to; bh=qKDuBvQDKm/bVNkQTGv2MreLLgYDyqTf54BPk8FcdaY=; b=N+XmUcKNw5z3E1Wp4u6bEevQP2AaeGhJx6Zto6AGNJaJQ1kZd15D+26SQszyplfMKg k7jLihSjPX2fxz3kmHUfv1qsNz6crRCIq9gIoureKWs1Y23LKM6eeDGciAwxVo3dRy1p CvKrV+9izJ209/umKlP/D6hWHoXZh/SomSwROZzCgmF4B/EJlzOSvl35lwZPLOloRvdM /EzV/YQqdnXByYUKnn4GwdAVc4hRM20GIVKoRRSuMBhidfpjboP1xq1edTbhRLUxBelk KkcqFYiUdlU3SH54Q1Ds+di61lSB1avST015aVIw0OaOTHjefpCxBMAHoh/MfL2bjL6D K/ZA== X-Gm-Message-State: AN3rC/5Qcen7u0TDHKBmwIRMt5U/2dA1kgIeU+ilqe5mU2sOBYYZInWF ntCdMZ1E1Fabm4HxS80NgTQTch/wPKr0 X-Received: by 10.31.92.208 with SMTP id q199mr35817vkb.99.1492269689403; Sat, 15 Apr 2017 08:21:29 -0700 (PDT) MIME-Version: 1.0 Received: by 10.31.41.142 with HTTP; Sat, 15 Apr 2017 08:21:28 -0700 (PDT) From: Iain Buclaw Date: Sat, 15 Apr 2017 17:21:28 +0200 Message-ID: Subject: [PATCH 3/7] [D] libiberty: Recognize anonymous symbols names. To: gcc-patches X-IsSubscribed: yes This implements another previously undocumented part of the D ABI spec, where symbols with no name are always encoded into the mangled name. SymbolName: LName TemplateInstanceName 0 // anonymous symbols This has never really been a problem, as strtol() kindly jumps over any leading zeros in the number it is parsing. However this change makes it so they are at least explicitly skipped over, rather than silently ignored. commit 6ffcb4ce75e471304960c97bec596c89e26894f8 Author: Iain Buclaw Date: Sat Apr 15 11:32:07 2017 +0200 libiberty/ChangeLog: 2017-04-15 Iain Buclaw * d-demangle.c (dlang_parse_symbol): Skip over anonymous symbols. * testsuite/d-demangle-expected: Add tests. diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index 74dde9d..533653f 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -1362,6 +1362,10 @@ dlang_parse_symbol (string *decl, const char *mangled, if (n++) string_append (decl, "."); + /* Skip over anonymous symbols. */ + while (*mangled == '0') + mangled++; + mangled = dlang_identifier (decl, mangled, kind); if (mangled && dlang_call_convention_p (mangled)) diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected index 6725684..530e0e6 100644 --- a/libiberty/testsuite/d-demangle-expected +++ b/libiberty/testsuite/d-demangle-expected @@ -929,6 +929,14 @@ demangle.test(char() delegate shared inout) _D8demangle4testFDONgxFZaZv demangle.test(char() delegate shared inout const) # +--format=dlang +_D8demangle004testFaZv +demangle.test(char) +# +--format=dlang +_D8demangle000000004testFaZv +demangle.test(char) +# # Unittests # --format=dlang