Author: David Blaikie Date: 2022-02-15T11:58:40-08:00 New Revision: 1ea326634b582f5574e0b22b85e5b0c631b30dcf
URL: https://github.com/llvm/llvm-project/commit/1ea326634b582f5574e0b22b85e5b0c631b30dcf DIFF: https://github.com/llvm/llvm-project/commit/1ea326634b582f5574e0b22b85e5b0c631b30dcf.diff LOG: DebugInfo: Don't simplify template names using _BitInt(N) _BitInt(N) only encodes the byte size in DWARF, not the bit size, so can't be reconstituted. Added: Modified: clang/lib/CodeGen/CGDebugInfo.cpp clang/test/CodeGenCXX/debug-info-simple-template-names.cpp cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index d8ba5592ad478..91a8f278de5c4 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -5032,6 +5032,15 @@ struct ReconstitutableType : public RecursiveASTVisitor<ReconstitutableType> { Reconstitutable = false; return false; } + bool VisitType(Type *T) { + // _BitInt(N) isn't reconstitutable because the bit width isn't encoded in + // the DWARF, only the byte width. + if (T->isBitIntType()) { + Reconstitutable = false; + return false; + } + return true; + } bool TraverseEnumType(EnumType *ET) { // Unnamed enums can't be reconstituted due to a lack of column info we // produce in the DWARF, so we can't get Clang's full name back. diff --git a/clang/test/CodeGenCXX/debug-info-simple-template-names.cpp b/clang/test/CodeGenCXX/debug-info-simple-template-names.cpp index 06e83ea6f59eb..d20c9478c363d 100644 --- a/clang/test/CodeGenCXX/debug-info-simple-template-names.cpp +++ b/clang/test/CodeGenCXX/debug-info-simple-template-names.cpp @@ -105,4 +105,10 @@ void f() { f3<t1>(); // CHECK: !DISubprogram(name: "_STNf3|<t1>", + + f1<_BitInt(3)>(); + // CHECK: !DISubprogram(name: "f1<_BitInt(3)>", + + f1<const unsigned _BitInt(5)>(); + // CHECK: !DISubprogram(name: "f1<const unsigned _BitInt(5)>", } diff --git a/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp b/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp index 898b27ec0e479..ee429ef3b5798 100644 --- a/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp +++ b/cross-project-tests/debuginfo-tests/clang_llvm_roundtrip/simplified_template_names.cpp @@ -316,6 +316,8 @@ int main() { f1<void(t8)>(); operator_not_really<int>(); t12 v4; + f1<_BitInt(3)>(); + f1<const unsigned _BitInt(5)>(); } void t8::mem() { struct t7 { }; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits