Lines Matching defs:Thunk
878 /// AddThunk - Add a thunk for the given method.
879 void AddThunk(const CXXMethodDecl *MD, const ThunkInfo &Thunk);
924 /// adjustment is required and no thunk is generated. However, inside D
928 /// thunk. Since we require that a call to C::f() first convert to A*,
1061 void VTableBuilder::AddThunk(const CXXMethodDecl *MD, const ThunkInfo &Thunk) {
1067 // Check if we have this thunk already.
1068 if (std::find(ThunksVector.begin(), ThunksVector.end(), Thunk) !=
1072 ThunksVector.push_back(Thunk);
1114 // When a return thunk is needed by a derived class that overrides a
1116 // While the thunk itself might be needed by vtables in subclasses or
1118 // the thunk in this vtable. Still, we do so to match gcc.
1142 // We don't need to store thunk information for construction vtables.
1149 const ThunkInfo &Thunk = I->second;
1162 // We've already added the thunk when we saw the complete dtor pointer.
1169 AddThunk(MD, Thunk);
1515 // thunk if we ever have a class hierarchy where the base class is not
1534 // This is a virtual thunk for the most derived class, add it.
1911 ThunkInfo Thunk = VTableThunks.lookup(I);
1912 if (!Thunk.isEmpty()) {
1914 if (!Thunk.Return.isEmpty()) {
1916 Out << Thunk.Return.NonVirtual << " non-virtual";
1918 if (Thunk.Return.VBaseOffsetOffset) {
1919 Out << ", " << Thunk.Return.VBaseOffsetOffset;
1927 if (!Thunk.This.isEmpty()) {
1929 Out << Thunk.This.NonVirtual << " non-virtual";
1931 if (Thunk.This.VCallOffsetOffset) {
1932 Out << ", " << Thunk.This.VCallOffsetOffset;
1961 ThunkInfo Thunk = VTableThunks.lookup(I);
1962 if (!Thunk.isEmpty()) {
1964 if (!Thunk.This.isEmpty()) {
1966 Out << Thunk.This.NonVirtual << " non-virtual";
1968 if (Thunk.This.VCallOffsetOffset) {
1969 Out << ", " << Thunk.This.VCallOffsetOffset;
2087 const ThunkInfo &Thunk = ThunksVector[I];
2092 if (!Thunk.Return.isEmpty()) {
2093 Out << "return adjustment: " << Thunk.This.NonVirtual;
2095 if (Thunk.Return.VBaseOffsetOffset) {
2096 Out << ", " << Thunk.Return.VBaseOffsetOffset;
2100 if (!Thunk.This.isEmpty())
2105 if (!Thunk.This.isEmpty()) {
2107 Out << Thunk.This.NonVirtual << " non-virtual";
2109 if (Thunk.This.VCallOffsetOffset) {
2110 Out << ", " << Thunk.This.VCallOffsetOffset;