/// isOpaqueTypeDefinition - Return true if LT is a llvm::OpaqueType
/// and T is tag definition. This helper routine does not check
/// relationship between T and LT.
-static bool isOpaqueTypeDefinition(QualType T, llvm::Type *LT) {
-
+static bool isOpaqueTypeDefinition(QualType T, const llvm::Type *LT) {
+ if (T->isPointerType()) {
+ return
+ isOpaqueTypeDefinition(cast<PointerType>(*T).getPointeeType(),
+ cast<llvm::PointerType>(LT)->getElementType());
+ }
if (!isa<llvm::OpaqueType>(LT))
return false;
--- /dev/null
+// RUN: clang %s -emit-llvm
+struct test;
+
+typedef void (*my_func) (struct test *);
+my_func handler;
+
+struct test {
+ char a;
+};
+
+char f(struct test *t) {
+ return t->a;
+}