OSDN Git Service

PR target/52079
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Feb 2012 18:58:44 +0000 (18:58 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Feb 2012 18:58:44 +0000 (18:58 +0000)
* go-lang.c (go_langhook_type_for_mode): For TImode and 64-bit HWI
return build_nonstandard_integer_type result if possible.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183806 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/ChangeLog
gcc/go/go-lang.c

index 5be8975..04ac6ac 100644 (file)
@@ -1,3 +1,9 @@
+2012-02-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/52079
+       * go-lang.c (go_langhook_type_for_mode): For TImode and 64-bit HWI
+       return build_nonstandard_integer_type result if possible.
+
 2012-01-21  Ian Lance Taylor  <iant@google.com>
 
        * go-gcc.cc (Gcc_backend::type_size): Check for error_mark_node.
index 9fa5c45..1d4c18b 100644 (file)
@@ -1,5 +1,5 @@
 /* go-lang.c -- Go frontend gcc interface.
-   Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -277,6 +277,7 @@ go_langhook_type_for_size (unsigned int bits, int unsignedp)
 static tree
 go_langhook_type_for_mode (enum machine_mode mode, int unsignedp)
 {
+  tree type;
   /* 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
@@ -291,7 +292,22 @@ go_langhook_type_for_mode (enum machine_mode mode, int unsignedp)
       return NULL_TREE;
     }
 
-  return go_type_for_mode (mode, unsignedp);
+  type = go_type_for_mode (mode, unsignedp);
+  if (type)
+    return type;
+
+#if HOST_BITS_PER_WIDE_INT >= 64
+  /* The middle-end and some backends rely on TImode being supported
+     for 64-bit HWI.  */
+  if (mode == TImode)
+    {
+      type = build_nonstandard_integer_type (GET_MODE_BITSIZE (TImode),
+                                            unsignedp);
+      if (type && TYPE_MODE (type) == TImode)
+       return type;
+    }
+#endif
+  return NULL_TREE;
 }
 
 /* Record a builtin function.  We just ignore builtin functions.  */