From 2ecebc2232d73efa80dd65bb176053f98899d069 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Tue, 13 Jul 2010 16:23:13 +0000 Subject: [PATCH] Add volatile qualifiers for "this". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108245 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGDebugInfo.cpp | 8 +++++++- test/CodeGenCXX/member-qual-debug-info.cpp | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 test/CodeGenCXX/member-qual-debug-info.cpp diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index a3c4003ff5..4e158955f8 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -537,11 +537,17 @@ CGDebugInfo::getOrCreateMethodType(const CXXMethodDecl *Method, llvm::DIType ThisPtrType = DebugFactory.CreateArtificialType(getOrCreateType(ThisPtr, Unit)); - if (Method->getTypeQualifiers() && Qualifiers::Const) + unsigned Quals = Method->getTypeQualifiers(); + if (Quals & Qualifiers::Const) ThisPtrType = DebugFactory.CreateDerivedType(llvm::dwarf::DW_TAG_const_type, Unit, "", Unit, 0, 0, 0, 0, 0, ThisPtrType); + if (Quals & Qualifiers::Volatile) + ThisPtrType = + DebugFactory.CreateDerivedType(llvm::dwarf::DW_TAG_volatile_type, + Unit, "", Unit, + 0, 0, 0, 0, 0, ThisPtrType); TypeCache[ThisPtr.getAsOpaquePtr()] = ThisPtrType; Elts.push_back(ThisPtrType); diff --git a/test/CodeGenCXX/member-qual-debug-info.cpp b/test/CodeGenCXX/member-qual-debug-info.cpp new file mode 100644 index 0000000000..c6e0991eea --- /dev/null +++ b/test/CodeGenCXX/member-qual-debug-info.cpp @@ -0,0 +1,20 @@ +// RUN: %clang_cc1 -g -S -masm-verbose -x c++ -o %t %s +// RUN: grep DW_TAG_volatile_type %t | count 3 +// RUN: grep DW_TAG_const_type %t | count 3 +// one for decl, one for def, one for abbrev + +namespace A { + class B { + public: + void dump() const volatile; + }; +} + +int main () { + using namespace A; + B b; + return 0; +} + +void A::B::dump() const volatile{ +} -- 2.40.0