diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
index 72c829a..f978e38 100644
--- a/include/clang-c/Index.h
+++ b/include/clang-c/Index.h
@@ -2065,20 +2075,38 @@ CINDEX_LINKAGE CXType clang_getCursorResultType(CXCursor C);
 CINDEX_LINKAGE unsigned clang_isPODType(CXType T);
 
 /**
- * \brief Return the element type of an array type.
+ * \brief Return the element type of an array, vector or complex type.
  *
- * If a non-array type is passed in, an invalid type is returned.
+ * If an inappropriate type is passed in, an invalid type is returned.
  */
-CINDEX_LINKAGE CXType clang_getArrayElementType(CXType T);
+CINDEX_LINKAGE CXType clang_getElementType(CXType T);
 
 /**
- * \brief Return the the array size of a constant array.
+ * \brief Return the the array size of a constant array or vector type.
  *
- * If a non-array type is passed in, -1 is returned.
+ * If an inappropriate type is passed in, -1 is returned.
  */
 CINDEX_LINKAGE long long clang_getArraySize(CXType T);
diff --git a/tools/libclang/CXType.cpp b/tools/libclang/CXType.cpp
index 0e62e27..74dbf66 100644
--- a/tools/libclang/CXType.cpp
+++ b/tools/libclang/CXType.cpp
@@ -85,6 +87,8 @@ static CXTypeKind GetTypeKind(QualType T) {
     TKCASE(FunctionNoProto);
     TKCASE(FunctionProto);
     TKCASE(ConstantArray);
+    TKCASE(IncompleteArray);
+    TKCASE(Vector);
     default:
       return CXType_Unexposed;
   }
@@ -332,6 +336,8 @@ CXString clang_getTypeKindSpelling(enum CXTypeKind K) {
     TKIND(FunctionNoProto);
     TKIND(FunctionProto);
     TKIND(ConstantArray);
+    TKIND(IncompleteArray);
+    TKIND(Vector);
   }
 #undef TKIND
   return cxstring::createCXString(s);
@@ -375,7 +381,7 @@ unsigned clang_isPODType(CXType X) {
   return T.isPODType(AU->getASTContext()) ? 1 : 0;
 }
 
-CXType clang_getArrayElementType(CXType CT) {
+CXType clang_getElementType(CXType CT) {
   QualType ET = QualType();
   QualType T = GetQualType(CT);
   const Type *TP = T.getTypePtrOrNull();
@@ -385,6 +391,15 @@ CXType clang_getArrayElementType(CXType CT) {
     case Type::ConstantArray:
       ET = cast<ConstantArrayType> (TP)->getElementType();
       break;
+    case Type::IncompleteArray:
+      ET = cast<IncompleteArrayType> (TP)->getElementType();
+      break;
+    case Type::Vector:
+      ET = cast<VectorType> (TP)->getElementType();
+      break;
+    case Type::Complex:
+      ET = cast<ComplexType> (TP)->getElementType();
+      break;
     default:
       break;
     }
@@ -402,6 +417,26 @@ long long clang_getArraySize(CXType CT) {
     case Type::ConstantArray:
       result = cast<ConstantArrayType> (TP)->getSize().getSExtValue();
       break;
+    case Type::Vector:
+      result = cast<VectorType> (TP)->getNumElements();
+      break;
     default:
       break;
     }
diff --git a/tools/libclang/libclang.exports b/tools/libclang/libclang.exports
index 89d4131..c043e28 100644
--- a/tools/libclang/libclang.exports
+++ b/tools/libclang/libclang.exports
@@ -43,7 +41,7 @@ clang_equalRanges
 clang_equalTypes
 clang_executeOnThread
 clang_formatDiagnostic
-clang_getArrayElementType
+clang_getElementType
 clang_getArraySize
 clang_getCString
 clang_getCXTUResourceUsage

