summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
diff options
context:
space:
mode:
authorEric Christopher <echristo@apple.com>2012-02-09 07:26:21 +0000
committerEric Christopher <echristo@apple.com>2012-02-09 07:26:21 +0000
commit39e39c8efe0b4a8cbcf337ed440f3b04865ad0c7 (patch)
tree02a130ea6821aa004ec5b8496f78b473d567fa41 /clang/lib/CodeGen
parent78edc2fb3c6b50ff14711d913de705caa25f3fbb (diff)
downloadbcm5719-llvm-39e39c8efe0b4a8cbcf337ed440f3b04865ad0c7.tar.gz
bcm5719-llvm-39e39c8efe0b4a8cbcf337ed440f3b04865ad0c7.zip
Don't cache the artificial type for the this pointer, there's no
difference in the qual type. This is a workaround for the fact that the type isn't artificial but the this decl is, however, we don't have any way of representing it in the current metadata. For now, however, just don't cache the full type. Fixes rdar://10831526 and probably a couple of others. llvm-svn: 150159
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r--clang/lib/CodeGen/CGDebugInfo.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 1392091e66e..ab8f5fdbf6d 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -829,15 +829,17 @@ CGDebugInfo::getOrCreateMethodType(const CXXMethodDecl *Method,
uint64_t Size = CGM.getContext().getTargetInfo().getPointerWidth(AS);
uint64_t Align = CGM.getContext().getTypeAlign(ThisPtrTy);
llvm::DIType PointeeType = getOrCreateType(PointeeTy, Unit);
- llvm::DIType ThisPtrType =
- DBuilder.createArtificialType
- (DBuilder.createPointerType(PointeeType, Size, Align));
+ llvm::DIType ThisPtrType = DBuilder.createPointerType(PointeeType, Size, Align);
TypeCache[ThisPtr.getAsOpaquePtr()] = ThisPtrType;
+ // TODO: This and the artificial type below are misleading, the
+ // types aren't artificial the argument is, but the current
+ // metadata doesn't represent that.
+ ThisPtrType = DBuilder.createArtificialType(ThisPtrType);
Elts.push_back(ThisPtrType);
} else {
- llvm::DIType ThisPtrType =
- DBuilder.createArtificialType(getOrCreateType(ThisPtr, Unit));
+ llvm::DIType ThisPtrType = getOrCreateType(ThisPtr, Unit);
TypeCache[ThisPtr.getAsOpaquePtr()] = ThisPtrType;
+ ThisPtrType = DBuilder.createArtificialType(ThisPtrType);
Elts.push_back(ThisPtrType);
}
}
OpenPOWER on IntegriCloud