From patchwork Wed Jan 27 22:53:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iain Buclaw X-Patchwork-Id: 10643 Received: (qmail 10459 invoked by alias); 27 Jan 2016 22:53:57 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 10445 invoked by uid 89); 27 Jan 2016 22:53:56 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-spam-relays-external:74.125.82.67, H*RU:74.125.82.67, Sync, 47859 X-HELO: mail-wm0-f67.google.com Received: from mail-wm0-f67.google.com (HELO mail-wm0-f67.google.com) (74.125.82.67) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 27 Jan 2016 22:53:55 +0000 Received: by mail-wm0-f67.google.com with SMTP id l66so131826wml.2 for ; Wed, 27 Jan 2016 14:53:54 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:date:message-id:subject:from :to:content-type; bh=WPSw+X20bsLwaPSfp1UBvyvoc5nP2zG0q0BS8CSxZ/Y=; b=lzMHuodC98nM4Rhs0Zf2oIyE0qR3IuWejPh+sC/K4XnV7volVN2qQdyQvQ60r5FPxs Tau1yPHsKKf7TXSReNnvHoCfRwzkITHGBE8hxq+tZf2CsP+W/0+n6E516z4H/mQltu61 d6Ucoogc7vfVyeoKYHXgO8jnLKoH7rQQsjtWlANr/pPNTat245wAh6GGYT3OO5P13Aa5 C0bSaayRAyLxn2PrhbqS6/d9UwluHu9W0Rnvuk1Thysvrk2ctIHN3nqd9xR1iLlA+7R8 Mz51agxdsnnsPMSC8XBjaHDAdHCPYpx6mGuAfSwbQVPnqxL0dBRv08Mqs/7TFIdCPceF THqQ== X-Gm-Message-State: AG10YOQLH2/XCLuJpHmRKlD5sfB4DpBVMuGJBcQNjvGr3LfwDrwptEVxldreBJk76rGQ7QNSNH2Lzt+rUIf4sA== MIME-Version: 1.0 X-Received: by 10.194.82.36 with SMTP id f4mr34487949wjy.87.1453935232146; Wed, 27 Jan 2016 14:53:52 -0800 (PST) Received: by 10.28.211.1 with HTTP; Wed, 27 Jan 2016 14:53:51 -0800 (PST) Date: Wed, 27 Jan 2016 23:53:51 +0100 Message-ID: Subject: [PATCH 1/2] [libiberty] Sync with upstream gcc. From: Iain Buclaw To: GDB Patches X-IsSubscribed: yes Hi, This patch to syncs libiberty with upstream gcc. Only additions are recent improvements to the dlang demangler, and support for new features of the upcoming release. Will follow up with a patch for the demangling tests on gdb's side. Iain. libiberty/ 2016-01-27 Iain Buclaw * d-demangle.c (dlang_call_convention): Handle extern Objective-C function calling convention. (dlang_call_convention_p): Likewise. (dlang_type): Likewise. * testsuite/d-demangle-expected: Add coverage tests. 2016-01-27 Iain Buclaw * d-demangle.c (dlang_function_args): Append ',' for variadic functions only if parameters were seen before the elipsis symbol. * testsuite/d-demangle-expected: Add coverage test for parameter-less variadic functions. 2016-01-27 Iain Buclaw * d-demangle.c (dlang_type): Handle function types only in the context of seeing a pointer type symbol. * testsuite/d-demangle-expected: Update function pointer tests. diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index 3d7ccf6..4ad90a6 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -1,5 +1,5 @@ /* Demangler for the D programming language - Copyright 2014, 2015 Free Software Foundation, Inc. + Copyright 2014, 2015, 2016 Free Software Foundation, Inc. Written by Iain Buclaw (ibuclaw@gdcproject.org) This file is part of the libiberty library. @@ -223,6 +223,10 @@ dlang_call_convention (string *decl, const char *mangled) mangled++; string_append (decl, "extern(C++) "); break; + case 'Y': /* (Objective-C) */ + mangled++; + string_append (decl, "extern(Objective-C) "); + break; default: return NULL; } @@ -399,7 +403,9 @@ dlang_function_args (string *decl, const char *mangled) return mangled; case 'Y': /* (variadic T t, ...) style. */ mangled++; - string_append (decl, ", ..."); + if (n != 0) + string_append (decl, ", "); + string_append (decl, "..."); return mangled; case 'Z': /* Normal function. */ mangled++; @@ -533,6 +539,15 @@ dlang_type (string *decl, const char *mangled) } case 'P': /* pointer (T*) */ mangled++; + /* Function pointer types don't include the trailing asterisk. */ + switch (*mangled) + { + case 'F': case 'U': case 'W': + case 'V': case 'R': case 'Y': + mangled = dlang_function_type (decl, mangled); + string_append (decl, "function"); + return mangled; + } mangled = dlang_type (decl, mangled); string_append (decl, "*"); return mangled; @@ -564,13 +579,6 @@ dlang_type (string *decl, const char *mangled) mangled++; return dlang_parse_tuple (decl, mangled); - /* Function types */ - case 'F': case 'U': case 'W': - case 'V': case 'R': - mangled = dlang_function_type (decl, mangled); - string_append (decl, "function"); - return mangled; - /* Basic types */ case 'n': mangled++; @@ -1334,7 +1342,7 @@ dlang_call_convention_p (const char *mangled) switch (*mangled) { case 'F': case 'U': case 'V': - case 'W': case 'R': + case 'W': case 'R': case 'Y': return 1; default: diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected index 2b1cc4f..04d39f4 100644 --- a/libiberty/testsuite/d-demangle-expected +++ b/libiberty/testsuite/d-demangle-expected @@ -342,6 +342,10 @@ _D8demangle4testFaaYv demangle.test(char, char, ...) # --format=dlang +_D8demangle4testFYv +demangle.test(...) +# +--format=dlang _D8demangle4testFaaZv demangle.test(char, char) # @@ -390,26 +394,34 @@ _D8demangle4testFDRZaZv demangle.test(extern(C++) char() delegate) # --format=dlang -_D8demangle4testFFZaZv +_D8demangle4testFDYZaZv +demangle.test(extern(Objective-C) char() delegate) +# +--format=dlang +_D8demangle4testFPFZaZv demangle.test(char() function) # --format=dlang -_D8demangle4testFUZaZv +_D8demangle4testFPUZaZv demangle.test(extern(C) char() function) # --format=dlang -_D8demangle4testFWZaZv +_D8demangle4testFPWZaZv demangle.test(extern(Windows) char() function) # --format=dlang -_D8demangle4testFVZaZv +_D8demangle4testFPVZaZv demangle.test(extern(Pascal) char() function) # --format=dlang -_D8demangle4testFRZaZv +_D8demangle4testFPRZaZv demangle.test(extern(C++) char() function) # --format=dlang +_D8demangle4testFPYZaZv +demangle.test(extern(Objective-C) char() function) +# +--format=dlang _D8demangle4testFDFNaZaZv demangle.test(char() pure delegate) # @@ -466,59 +478,59 @@ _D8demangle4testFNjNkDFNjZaZv demangle.test(return char() return delegate) # --format=dlang -_D8demangle4testFFNaZaZv +_D8demangle4testFPFNaZaZv demangle.test(char() pure function) # --format=dlang -_D8demangle4testFFNbZaZv +_D8demangle4testFPFNbZaZv demangle.test(char() nothrow function) # --format=dlang -_D8demangle4testFFNcZaZv +_D8demangle4testFPFNcZaZv demangle.test(char() ref function) # --format=dlang -_D8demangle4testFFNdZaZv +_D8demangle4testFPFNdZaZv demangle.test(char() @property function) # --format=dlang -_D8demangle4testFFNeZaZv +_D8demangle4testFPFNeZaZv demangle.test(char() @trusted function) # --format=dlang -_D8demangle4testFFNfZaZv +_D8demangle4testFPFNfZaZv demangle.test(char() @safe function) # --format=dlang -_D8demangle4testFFNiZaZv +_D8demangle4testFPFNiZaZv demangle.test(char() @nogc function) # --format=dlang -_D8demangle4testFFNaNbZaZv +_D8demangle4testFPFNaNbZaZv demangle.test(char() pure nothrow function) # --format=dlang -_D8demangle4testFFNbNaZaZv +_D8demangle4testFPFNbNaZaZv demangle.test(char() nothrow pure function) # --format=dlang -_D8demangle4testFFNdNfNaZaZv +_D8demangle4testFPFNdNfNaZaZv demangle.test(char() @property @safe pure function) # --format=dlang -_D8demangle4testFNjFZaZv +_D8demangle4testFNjPFZaZv demangle.test(char() function) # --format=dlang -_D8demangle4testFNkFZaZv +_D8demangle4testFNkPFZaZv demangle.test(return char() function) # --format=dlang -_D8demangle4testFFNjZaZv +_D8demangle4testFPFNjZaZv demangle.test(char() return function) # --format=dlang -_D8demangle4testFNjNkFNjZaZv +_D8demangle4testFNjNkPFNjZaZv demangle.test(return char() return function) # --format=dlang @@ -989,7 +1001,7 @@ object.TypeInfo_Array.argTypes(out TypeInfo, out TypeInfo) # --format=dlang _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv -rt.dmain2._d_run_main(int, char**, extern(C) int(char[][]) function*).tryExec(scope void() delegate) +rt.dmain2._d_run_main(int, char**, extern(C) int(char[][]) function).tryExec(scope void() delegate) # --format=dlang _D6object9Exception6__ctorMFNaNbNfAyaAyamC6object9ThrowableZC9Exception