DoDoENT added a comment. > (rabbit hole/tangent: Arguably what might be more useful to the user might be > a name that's not even usable in C++ - using the member variable names, as > well as the type names, though that'd be even more verbose... like > `t1<t2{.length=3, .width=7}>` - which, I guess, if you had user defined types > for some kind of extra type safety, would get as verbose as > `t1<Shape{Length{.length = 3}, Width{.width = 5}}>` though I would expect > that would be the minority)
True, but if user defined type is defined as CRTP (very common for strong typedefs): template< typename T, typename U > struct StrongTypedef { T value; }; struct Length : StrongTypedef< unsigned, Length > {}; struct Width : StrongTypedef< unsigned, Width > {}; struct Shape { Length length; Width width; }; template< Shape > struct S {}; you would get something like `S<Shape{.length = Length{StrongTypedef<unsigned int, Length>{.value = 50}}, .width = Width{StrongTypedef<unsigned int, Width>{.value = 70}}}>` (inspired by this GCC output <https://godbolt.org/z/j1jsKrnhc>), which is truly verbose. However, the current way of printing (assuming member names are printed) it would print something like `S<{.length = {{.value = 50}}, .width = {{.value = 70}}}>`. Ideally, in this scenario, probably the best possible output would be `S<Shape{.length = Length{{.value = 50}}, .width = Width{{.value = 70}}}>`. however, I'm not exactly sure how to achieve this (my patch would print `Shape`, but not `Length` and `Width` with my policy disabled. Personally, I prefer full verbosity in all cases. Yes, it's a bit more to read, but does not confuse our less experienced c++ developers. This is why our internal build of clang has this enabled by default and I would be actually very happy if this patch gets accepted in a form where full types are always printed without the need for any new policies. If you are OK with that, I can update the patch. Just, please, let me know. ================ Comment at: clang/include/clang/AST/PrettyPrinter.h:78 CleanUglifiedParameters(false), EntireContentsOfLargeArray(true), - UseEnumerators(true) {} + UseEnumerators(true), AlwaysIncludeTypeForNonTypeTemplateArgument(false) {} ---------------- aaron.ballman wrote: > Should this be defaulting to false? I thought we wanted to always include the > type for NTTP printing? I've set this to `false` by default to not interfere with the current behavior of the clang. However, after today's discussion, I think I can completely remove the policy and simply always print the full type. That would be option (1) from [[ https://reviews.llvm.org/D134453/new/#3869610 | this comment ]] and would make clang behave the same as GCC and MSVC. If you are OK with that, I'll be happy to update the patch. ================ Comment at: clang/test/CodeGenCXX/debug-info-template.cpp:224 template void f1<t1 () volatile, t1 () const volatile, t1 () &, t1 () &&>(); -// CHECK: !DISubprogram(name: "f1<RawFuncQual::t1 () volatile, RawFuncQual::t1 () const volatile, RawFuncQual::t1 () &, RawFuncQual::t1 () &&>", +// CHECK: !DISubprogram(name: "f1<RawFuncQual::t1 () volatile, RawFuncQual::t1 () const volatile, RawFuncQual::t1 () &, RawFuncQual::t1 () &&>", // CHECK-SAME: templateParams: ![[RAW_FUNC_QUAL_ARGS:[0-9]*]], ---------------- dblaikie wrote: > Looks like some unintended whitespace changes? (removing trailing whitespace > from these lines) Sorry about that. I've configured my editor to always remove trailing whitespace (we have this policy in the company) on save action. I can return the trailing whitespace if you want, although I would like to understand the reasoning for keeping the trailing whitespace... Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D134453/new/ https://reviews.llvm.org/D134453 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits