diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog
index d70dc40c4c6ccb4645d5abe0d844b282d6afca33..380c70955f1c0ee01e16d335abccebf536d2d8ea 100644
--- a/gcc/go/ChangeLog
+++ b/gcc/go/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-07  Ian Lance Taylor  <iant@google.com>
+
+	PR tree-optimization/46805
+	PR tree-optimization/46833
+	* go-lang.c (go_langhook_type_for_mode): Handle vector modes.
+
 2010-12-06  Ian Lance Taylor  <iant@google.com>
 
 	PR other/46789
diff --git a/gcc/go/go-lang.c b/gcc/go/go-lang.c
index 0f3c1838f4b743226d520a774349648a814fc91c..323f8c5331c923ec8d68355bfe6d7610dcf75c14 100644
--- a/gcc/go/go-lang.c
+++ b/gcc/go/go-lang.c
@@ -285,6 +285,20 @@ go_langhook_type_for_size (unsigned int bits, int unsignedp)
 static tree
 go_langhook_type_for_mode (enum machine_mode mode, int unsignedp)
 {
+  /* Go has no vector types.  Build them here.  FIXME: It does not
+     make sense for the middle-end to ask the frontend for a type
+     which the frontend does not support.  However, at least for now
+     it is required.  See PR 46805.  */
+  if (VECTOR_MODE_P (mode))
+    {
+      tree inner;
+
+      inner = go_langhook_type_for_mode (GET_MODE_INNER (mode), unsignedp);
+      if (inner != NULL_TREE)
+	return build_vector_type_for_mode (inner, mode);
+      return NULL_TREE;
+    }
+
   return go_type_for_mode (mode, unsignedp);
 }