Thanks - I'll take a look at the bug report. On Thu, Jul 8, 2021 at 5:27 PM <douglas.y...@sony.com> wrote:
> Hi David, > > Your change has caused some failures in the GDB test suite that we run > internally. I have put details up in PR51034. Can you please take a look? > > Douglas Yung > > -----Original Message----- > From: cfe-commits <cfe-commits-boun...@lists.llvm.org> On Behalf Of David > Blaikie via cfe-commits > Sent: Tuesday, July 6, 2021 16:28 > To: cfe-commits@lists.llvm.org > Subject: [clang] 6c9559b - DebugInfo: Mangle K&R declarations for debug > info linkage names > > > Author: David Blaikie > Date: 2021-07-06T16:28:02-07:00 > New Revision: 6c9559b67b91966bfeff9e17808a3e84a92e64a0 > > URL: > https://urldefense.com/v3/__https://github.com/llvm/llvm-project/commit/6c9559b67b91966bfeff9e17808a3e84a92e64a0__;!!JmoZiZGBv3RvKRSx!vFf7ecy0edfxiybhfYjYVxwii_QJ0ux7EALh-TLSkJxMX6qz3NFd0w9lAa2n-lcD9A$ > DIFF: > https://urldefense.com/v3/__https://github.com/llvm/llvm-project/commit/6c9559b67b91966bfeff9e17808a3e84a92e64a0.diff__;!!JmoZiZGBv3RvKRSx!vFf7ecy0edfxiybhfYjYVxwii_QJ0ux7EALh-TLSkJxMX6qz3NFd0w9lAa3n7ANbTQ$ > > LOG: DebugInfo: Mangle K&R declarations for debug info linkage names > > This fixes a gap in the `overloadable` attribute support (K&R declared > functions would get mangled symbol names, but that name wouldn't be > represented in the debug info linkage name field for the function) and in > -funique-internal-linkage-names (this came up in review discussion on > D98799) where K&R static declarations would not get the uniqued linkage > names. > > Added: > clang/test/CodeGen/overloadable-debug.c > > Modified: > clang/lib/AST/ItaniumMangle.cpp > clang/lib/CodeGen/CGDebugInfo.cpp > clang/test/CodeGen/unique-internal-linkage-names-dwarf.c > > Removed: > > > > > ################################################################################ > diff --git a/clang/lib/AST/ItaniumMangle.cpp > b/clang/lib/AST/ItaniumMangle.cpp index b5b9cd7535196..c40916308611b 100644 > --- a/clang/lib/AST/ItaniumMangle.cpp > +++ b/clang/lib/AST/ItaniumMangle.cpp > @@ -649,7 +649,7 @@ bool > ItaniumMangleContextImpl::isUniqueInternalLinkageDecl( > > // For C functions without prototypes, return false as their > // names should not be mangled. > - if (!FD->hasPrototype()) > + if (!FD->getType()->getAs<FunctionProtoType>()) > return false; > > if (isInternalLinkageDecl(ND)) > > diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp > b/clang/lib/CodeGen/CGDebugInfo.cpp > index 8a5b246275b15..0363fd7023f32 100644 > --- a/clang/lib/CodeGen/CGDebugInfo.cpp > +++ b/clang/lib/CodeGen/CGDebugInfo.cpp > @@ -3546,7 +3546,7 @@ void > CGDebugInfo::collectFunctionDeclProps(GlobalDecl GD, llvm::DIFile *Unit, > const auto *FD = cast<FunctionDecl>(GD.getCanonicalDecl().getDecl()); > Name = getFunctionName(FD); > // Use mangled name as linkage name for C/C++ functions. > - if (FD->hasPrototype()) { > + if (FD->getType()->getAs<FunctionProtoType>()) { > LinkageName = CGM.getMangledName(GD); > Flags |= llvm::DINode::FlagPrototyped; > } > > diff --git a/clang/test/CodeGen/overloadable-debug.c > b/clang/test/CodeGen/overloadable-debug.c > new file mode 100644 > index 0000000000000..6eda318844960 > --- /dev/null > +++ b/clang/test/CodeGen/overloadable-debug.c > @@ -0,0 +1,6 @@ > +// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm > +-debug-info-kind=limited %s -o - | FileCheck %s > + > +__attribute__((overloadable)) void f1(a) int a; { } > + > +// CHECK: !DISubprogram(name: "f1", linkageName: "_Z2f1i" > > diff --git a/clang/test/CodeGen/unique-internal-linkage-names-dwarf.c > b/clang/test/CodeGen/unique-internal-linkage-names-dwarf.c > index e5d507e154aeb..cae839830c6e2 100644 > --- a/clang/test/CodeGen/unique-internal-linkage-names-dwarf.c > +++ b/clang/test/CodeGen/unique-internal-linkage-names-dwarf.c > @@ -13,27 +13,15 @@ static int foo(void) { > return glob; > } > > -// bar should not be given a uniquefied name under > -funique-internal-linkage-names, -// since it doesn't come with valid > prototype. > +// K&R prototypes should be given uniquefied names under > -funique-internal-linkage-names. > static int bar(a) int a; > { > return glob + a; > } > > -// go should be given a uniquefied name under > -funique-internal-linkage-names, even -// if its definition doesn't come > with a valid prototype, but the declaration here -// has a prototype. > -static int go(int); > - > void baz() { > foo(); > bar(1); > - go(2); > -} > - > -static int go(a) int a; > -{ > - return glob + a; > } > > > @@ -43,13 +31,11 @@ static int go(a) int a; // PLAIN: distinct > !DIGlobalVariable(name: "glob"{{.*}}) // PLAIN: distinct > !DISubprogram(name: "foo"{{.*}}) // PLAIN: distinct !DISubprogram(name: > "bar"{{.*}}) -// PLAIN: distinct !DISubprogram(name: "go"{{.*}}) // > PLAIN-NOT: linkageName: > // > // UNIQUE: @glob = internal global i32 > // UNIQUE: define internal i32 @_ZL3foov.[[MODHASH:__uniq.[0-9]+]]() > -// UNIQUE: define internal i32 @bar(i32 %a) -// UNIQUE: define internal > i32 @_ZL2goi.[[MODHASH]](i32 %a) > +// UNIQUE: define internal i32 @_ZL3bari.[[MODHASH]](i32 %a) > // UNIQUE: distinct !DIGlobalVariable(name: "glob"{{.*}}) // UNIQUE: > distinct !DISubprogram(name: "foo", linkageName: > "_ZL3foov.[[MODHASH]]"{{.*}}) -// UNIQUE: distinct !DISubprogram(name: > "go", linkageName: "_ZL2goi.[[MODHASH]]"{{.*}}) > +// UNIQUE: distinct !DISubprogram(name: "bar", linkageName: > +"_ZL3bari.[[MODHASH]]"{{.*}}) > > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > > https://urldefense.com/v3/__https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits__;!!JmoZiZGBv3RvKRSx!vFf7ecy0edfxiybhfYjYVxwii_QJ0ux7EALh-TLSkJxMX6qz3NFd0w9lAa1uki4Jqw$ >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits