diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 290cdbf8c4e344..1aa48034da69fd 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -2989,8 +2989,14 @@ llvm::DIType *CGDebugInfo::CreateType(const LValueReferenceType *Ty, llvm::DIType *CGDebugInfo::CreateType(const RValueReferenceType *Ty, llvm::DIFile *Unit) { - return CreatePointerLikeType(llvm::dwarf::DW_TAG_rvalue_reference_type, Ty, - Ty->getPointeeType(), Unit); + llvm::dwarf::Tag Tag = llvm::dwarf::DW_TAG_rvalue_reference_type; + // DW_TAG_rvalue_reference_type was introduced in DWARF 4, in strict DWARF + // mode, only generate it when DWARF version is no smaller than 4. + if (CGM.getCodeGenOpts().DebugStrictDwarf && + CGM.getCodeGenOpts().DwarfVersion < 4) + Tag = llvm::dwarf::DW_TAG_reference_type; + + return CreatePointerLikeType(Tag, Ty, Ty->getPointeeType(), Unit); } llvm::DIType *CGDebugInfo::CreateType(const MemberPointerType *Ty, diff --git a/clang/test/CodeGenCXX/debug-info-rvalue-ref.cpp b/clang/test/CodeGenCXX/debug-info-rvalue-ref.cpp index de0f65ad9a0299..45b19705fae2f3 100644 --- a/clang/test/CodeGenCXX/debug-info-rvalue-ref.cpp +++ b/clang/test/CodeGenCXX/debug-info-rvalue-ref.cpp @@ -1,4 +1,8 @@ // RUN: %clang_cc1 -std=c++11 -emit-llvm -debug-info-kind=limited -triple x86_64-apple-darwin %s -o - | FileCheck %s +// RUN: %clang_cc1 -std=c++11 -gstrict-dwarf -dwarf-version=4 -emit-llvm -debug-info-kind=limited \ +// RUN: -triple x86_64-apple-darwin %s -o - | FileCheck %s +// RUN: %clang_cc1 -std=c++11 -gstrict-dwarf -dwarf-version=3 -emit-llvm -debug-info-kind=limited \ +// RUN: -triple x86_64-apple-darwin %s -o - | FileCheck %s --check-prefix=NORVALUE extern "C" { extern int printf(const char * format, ...); @@ -10,3 +14,4 @@ void foo (int &&i) // CHECK: !DIDerivedType(tag: DW_TAG_rvalue_reference_type, baseType: ![[INT:[0-9]+]], size: 64) // CHECK: ![[INT]] = !DIBasicType(name: "int" +// NORVALUE: !DIDerivedType(tag: DW_TAG_reference_type, baseType: ![[INT:[0-9]+]], size: 64)