support reporting "this" as a templated class. The expression parser wraps expressions in C++ methods as methods with the signature $__lldb_class::$__lldb_expr(...) and previously responded to clang's queries about $__lldb_class with the type of *this. This didn't work if *this was a ClassTemplateSpecializationDecl because ClassTemplateSpecializationDecls can't be the result of simple name queries. Instead what we do now is respond that $__lldb_class is a typedef and that the target of the typedef is the (potentially templated) type of *this. That is much more robust. Thanks to John McCall for key insights. <rdar://problem/10987183> llvm-svn: 174153
54 lines
1.0 KiB
C++
54 lines
1.0 KiB
C++
//===-- main.cpp ------------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include <stdio.h>
|
|
|
|
template <class T> class A
|
|
{
|
|
public:
|
|
void accessMember(T a);
|
|
T accessMemberConst() const;
|
|
static int accessStaticMember();
|
|
|
|
void accessMemberInline(T a) __attribute__ ((always_inline))
|
|
{
|
|
m_a = a; // breakpoint 4
|
|
}
|
|
|
|
T m_a;
|
|
static int s_a;
|
|
};
|
|
|
|
template <class T> int A<T>::s_a = 5;
|
|
|
|
template <class T> void A<T>::accessMember(T a)
|
|
{
|
|
m_a = a; // breakpoint 1
|
|
}
|
|
|
|
template <class T> T A<T>::accessMemberConst() const
|
|
{
|
|
return m_a; // breakpoint 2
|
|
}
|
|
|
|
template <class T> int A<T>::accessStaticMember()
|
|
{
|
|
return s_a; // breakpoint 3
|
|
}
|
|
|
|
int main()
|
|
{
|
|
A<int> my_a;
|
|
|
|
my_a.accessMember(3);
|
|
my_a.accessMemberConst();
|
|
A<int>::accessStaticMember();
|
|
my_a.accessMemberInline(5);
|
|
}
|