r362856 - DebugInfo: Add support for 'nodebug' attribute on typedefs and alias templates
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 17 10:59:57 PDT 2019
Is this really measurable? All you're suppressing are the typedef DIEs
and their names; the DIEs are small, although I admit the names can take
up space.
(I'm not really objecting, it's just hard to intuit a big size benefit.)
--paulr
> -----Original Message-----
> From: cfe-commits [mailto:cfe-commits-bounces at lists.llvm.org] On Behalf Of
> David Blaikie via cfe-commits
> Sent: Friday, June 07, 2019 8:01 PM
> To: cfe-commits at lists.llvm.org
> Subject: r362856 - DebugInfo: Add support for 'nodebug' attribute on
> typedefs and alias templates
>
> Author: dblaikie
> Date: Fri Jun 7 17:01:21 2019
> New Revision: 362856
>
> URL: http://llvm.org/viewvc/llvm-project?rev=362856&view=rev
> Log:
> DebugInfo: Add support for 'nodebug' attribute on typedefs and alias
> templates
>
> Seems like a logical extension to me - and of interest because it might
> help reduce the debug info size of libc++ by applying this attribute to
> type traits that have a disproportionate debug info cost compared to the
> benefit (& possibly harm/confusion) they cause users.
>
> Modified:
> cfe/trunk/include/clang/Basic/Attr.td
> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> cfe/trunk/test/CodeGenCXX/debug-info-nodebug.cpp
> cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test
> cfe/trunk/test/Sema/attr-nodebug.c
>
> Modified: cfe/trunk/include/clang/Basic/Attr.td
> URL: http://llvm.org/viewvc/llvm-
> project/cfe/trunk/include/clang/Basic/Attr.td?rev=362856&r1=362855&r2=3628
> 56&view=diff
> ==========================================================================
> ====
> --- cfe/trunk/include/clang/Basic/Attr.td (original)
> +++ cfe/trunk/include/clang/Basic/Attr.td Fri Jun 7 17:01:21 2019
> @@ -1434,7 +1434,7 @@ def NoCommon : InheritableAttr {
>
> def NoDebug : InheritableAttr {
> let Spellings = [GCC<"nodebug">];
> - let Subjects = SubjectList<[FunctionLike, ObjCMethod, NonParmVar]>;
> + let Subjects = SubjectList<[TypedefName, FunctionLike, ObjCMethod,
> NonParmVar]>;
> let Documentation = [NoDebugDocs];
> }
>
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-
> project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=362856&r1=362855&r2=3628
> 56&view=diff
> ==========================================================================
> ====
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Fri Jun 7 17:01:21 2019
> @@ -1091,15 +1091,18 @@ llvm::DIType *CGDebugInfo::CreateType(co
> assert(Ty->isTypeAlias());
> llvm::DIType *Src = getOrCreateType(Ty->getAliasedType(), Unit);
>
> + auto *AliasDecl =
> + cast<TypeAliasTemplateDecl>(Ty-
> >getTemplateName().getAsTemplateDecl())
> + ->getTemplatedDecl();
> +
> + if (AliasDecl->hasAttr<NoDebugAttr>())
> + return Src;
> +
> SmallString<128> NS;
> llvm::raw_svector_ostream OS(NS);
> Ty->getTemplateName().print(OS, getPrintingPolicy(), /*qualified*/
> false);
> printTemplateArgumentList(OS, Ty->template_arguments(),
> getPrintingPolicy());
>
> - auto *AliasDecl =
> - cast<TypeAliasTemplateDecl>(Ty-
> >getTemplateName().getAsTemplateDecl())
> - ->getTemplatedDecl();
> -
> SourceLocation Loc = AliasDecl->getLocation();
> return DBuilder.createTypedef(Src, OS.str(), getOrCreateFile(Loc),
> getLineNumber(Loc),
> @@ -1108,15 +1111,20 @@ llvm::DIType *CGDebugInfo::CreateType(co
>
> llvm::DIType *CGDebugInfo::CreateType(const TypedefType *Ty,
> llvm::DIFile *Unit) {
> + llvm::DIType *Underlying =
> + getOrCreateType(Ty->getDecl()->getUnderlyingType(), Unit);
> +
> + if (Ty->getDecl()->hasAttr<NoDebugAttr>())
> + return Underlying;
> +
> // We don't set size information, but do specify where the typedef was
> // declared.
> SourceLocation Loc = Ty->getDecl()->getLocation();
>
> // Typedefs are derived from some other type.
> - return DBuilder.createTypedef(
> - getOrCreateType(Ty->getDecl()->getUnderlyingType(), Unit),
> - Ty->getDecl()->getName(), getOrCreateFile(Loc), getLineNumber(Loc),
> - getDeclContextDescriptor(Ty->getDecl()));
> + return DBuilder.createTypedef(Underlying, Ty->getDecl()->getName(),
> + getOrCreateFile(Loc), getLineNumber(Loc),
> + getDeclContextDescriptor(Ty->getDecl()));
> }
>
> static unsigned getDwarfCC(CallingConv CC) {
>
> Modified: cfe/trunk/test/CodeGenCXX/debug-info-nodebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-
> info-nodebug.cpp?rev=362856&r1=362855&r2=362856&view=diff
> ==========================================================================
> ====
> --- cfe/trunk/test/CodeGenCXX/debug-info-nodebug.cpp (original)
> +++ cfe/trunk/test/CodeGenCXX/debug-info-nodebug.cpp Fri Jun 7 17:01:21
> 2019
> @@ -1,5 +1,5 @@
> -// RUN: %clang_cc1 -DSETNODEBUG=0 -emit-llvm -debug-info-kind=limited %s
> -o - | FileCheck %s --check-prefix=YESINFO
> -// RUN: %clang_cc1 -DSETNODEBUG=1 -emit-llvm -debug-info-kind=limited %s
> -o - | FileCheck %s --check-prefix=NOINFO
> +// RUN: %clang_cc1 -DSETNODEBUG=0 -emit-llvm -std=c++14 -debug-info-
> kind=limited %s -o - | FileCheck %s --check-prefix=YESINFO
> +// RUN: %clang_cc1 -DSETNODEBUG=1 -emit-llvm -std=c++14 -debug-info-
> kind=limited %s -o - | FileCheck %s --check-prefix=NOINFO
>
> #if SETNODEBUG
> #define NODEBUG __attribute__((nodebug))
> @@ -53,3 +53,15 @@ void func4() {
> // NOINFO-NOT: !DIGlobalVariable(name: "static_local"
> // YESINFO-DAG: !DILocalVariable(name: "normal_local"
> // NOINFO-NOT: !DILocalVariable(name: "normal_local"
> +
> +template <typename T>
> +using y NODEBUG = int;
> +void func5() {
> + NODEBUG typedef int x;
> + x a;
> + y<int> b;
> +}
> +// YESINFO-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "x"
> +// NOINFO-NOT: !DIDerivedType(tag: DW_TAG_typedef, name: "x"
> +// YESINFO-DAG: !DIDerivedType(tag: DW_TAG_typedef, name: "y<int>"
> +// NOINFO-NOT: !DIDerivedType(tag: DW_TAG_typedef, name: "y<int>"
>
> Modified: cfe/trunk/test/Misc/pragma-attribute-supported-attributes-
> list.test
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/pragma-
> attribute-supported-attributes-
> list.test?rev=362856&r1=362855&r2=362856&view=diff
> ==========================================================================
> ====
> --- cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test
> (original)
> +++ cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test
> Fri Jun 7 17:01:21 2019
> @@ -72,7 +72,7 @@
> // CHECK-NEXT: NSConsumesSelf (SubjectMatchRule_objc_method)
> // CHECK-NEXT: Naked (SubjectMatchRule_function)
> // CHECK-NEXT: NoCommon (SubjectMatchRule_variable)
> -// CHECK-NEXT: NoDebug (SubjectMatchRule_hasType_functionType,
> SubjectMatchRule_objc_method, SubjectMatchRule_variable_not_is_parameter)
> +// CHECK-NEXT: NoDebug (SubjectMatchRule_type_alias,
> SubjectMatchRule_hasType_functionType, SubjectMatchRule_objc_method,
> SubjectMatchRule_variable_not_is_parameter)
> // CHECK-NEXT: NoDestroy (SubjectMatchRule_variable)
> // CHECK-NEXT: NoDuplicate (SubjectMatchRule_function)
> // CHECK-NEXT: NoEscape (SubjectMatchRule_variable_is_parameter)
>
> Modified: cfe/trunk/test/Sema/attr-nodebug.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-
> nodebug.c?rev=362856&r1=362855&r2=362856&view=diff
> ==========================================================================
> ====
> --- cfe/trunk/test/Sema/attr-nodebug.c (original)
> +++ cfe/trunk/test/Sema/attr-nodebug.c Fri Jun 7 17:01:21 2019
> @@ -2,7 +2,7 @@
>
> int a __attribute__((nodebug));
>
> -void b(int p __attribute__((nodebug))) { // expected-warning {{'nodebug'
> attribute only applies to functions, function pointers, Objective-C
> methods, and variables}}
> +void b(int p __attribute__((nodebug))) { // expected-warning {{'nodebug'
> attribute only applies to typedefs, functions, function pointers,
> Objective-C methods, and variables}}
> int b __attribute__((nodebug));
> }
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list