Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision f1b1e4c22ee1c825678ab38142bbcf3879708434)
+++ src/InitTweak/InitTweak.cc	(revision 10a7775d07dcc9d19f88786e6be9a198720e9cac)
@@ -137,3 +137,14 @@
     }
   }
+
+  Type * getPointerBase( Type * type ) {
+    if ( PointerType * ptrType = dynamic_cast< PointerType * >( type ) ) {
+      return ptrType->get_base();
+    } else if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) {
+      return arrayType->get_base();
+    } else {
+      return NULL;
+    }
+  }
+
 }
Index: src/InitTweak/InitTweak.h
===================================================================
--- src/InitTweak/InitTweak.h	(revision f1b1e4c22ee1c825678ab38142bbcf3879708434)
+++ src/InitTweak/InitTweak.h	(revision 10a7775d07dcc9d19f88786e6be9a198720e9cac)
@@ -48,4 +48,7 @@
   /// returns the argument to a call expression in position N indexed from 0
   Expression * getCallArg( Expression * callExpr, unsigned int pos );
+
+  /// returns the base type of a PointerType or ArrayType
+  Type * getPointerBase( Type * );
 } // namespace
 
