[cfe-commits] r46575 - in /cfe/trunk: CodeGen/CodeGenTypes.cpp test/CodeGen/opaque-pointer.c

Lauro Ramos Venancio lauro.venancio at gmail.com
Wed Jan 30 13:21:09 PST 2008


Author: laurov
Date: Wed Jan 30 15:21:08 2008
New Revision: 46575

URL: http://llvm.org/viewvc/llvm-project?rev=46575&view=rev
Log:
A pointer to an opaque type is an "opaque type definition".


Added:
    cfe/trunk/test/CodeGen/opaque-pointer.c
Modified:
    cfe/trunk/CodeGen/CodeGenTypes.cpp

Modified: cfe/trunk/CodeGen/CodeGenTypes.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CodeGen/CodeGenTypes.cpp?rev=46575&r1=46574&r2=46575&view=diff

==============================================================================
--- cfe/trunk/CodeGen/CodeGenTypes.cpp (original)
+++ cfe/trunk/CodeGen/CodeGenTypes.cpp Wed Jan 30 15:21:08 2008
@@ -94,8 +94,12 @@
 /// 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;
 

Added: cfe/trunk/test/CodeGen/opaque-pointer.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/opaque-pointer.c?rev=46575&view=auto

==============================================================================
--- cfe/trunk/test/CodeGen/opaque-pointer.c (added)
+++ cfe/trunk/test/CodeGen/opaque-pointer.c Wed Jan 30 15:21:08 2008
@@ -0,0 +1,13 @@
+// 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;
+}





More information about the cfe-commits mailing list