compiler, libgo: unsafe.{Sizeof,Alignof,Offsetof} return uintptr.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Mar 2012 03:53:13 +0000 (03:53 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 29 Mar 2012 03:53:13 +0000 (03:53 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185946 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/expressions.cc
gcc/go/gofrontend/unsafe.cc
libgo/go/os/dir.go
libgo/go/syscall/libcall_posix.go

index 13c7de3..06e85eb 100644 (file)
@@ -7091,7 +7091,8 @@ Builtin_call_expression::do_numeric_constant_value(Numeric_constant* nc) const
       else
        go_unreachable();
 
-      nc->set_unsigned_long(NULL, static_cast<unsigned long>(ret));
+      nc->set_unsigned_long(Type::lookup_integer_type("uintptr"),
+                           static_cast<unsigned long>(ret));
       return true;
     }
   else if (this->code_ == BUILTIN_OFFSETOF)
@@ -7113,7 +7114,8 @@ Builtin_call_expression::do_numeric_constant_value(Numeric_constant* nc) const
                                                   farg->field_index(),
                                                   &offset))
        return false;
-      nc->set_unsigned_long(NULL, static_cast<unsigned long>(offset));
+      nc->set_unsigned_long(Type::lookup_integer_type("uintptr"),
+                           static_cast<unsigned long>(offset));
       return true;
     }
   else if (this->code_ == BUILTIN_REAL || this->code_ == BUILTIN_IMAG)
@@ -7246,10 +7248,12 @@ Builtin_call_expression::do_type()
     case BUILTIN_CAP:
     case BUILTIN_COPY:
     case BUILTIN_LEN:
+      return Type::lookup_integer_type("int");
+
     case BUILTIN_ALIGNOF:
     case BUILTIN_OFFSETOF:
     case BUILTIN_SIZEOF:
-      return Type::lookup_integer_type("int");
+      return Type::lookup_integer_type("uintptr");
 
     case BUILTIN_CLOSE:
     case BUILTIN_DELETE:
@@ -8078,8 +8082,8 @@ Builtin_call_expression::do_get_tree(Translate_context* context)
            go_assert(saw_errors());
            return error_mark_node;
          }
-       Type* int_type = Type::lookup_integer_type("int");
-       tree type = type_to_tree(int_type->get_backend(gogo));
+       Type* uintptr_type = Type::lookup_integer_type("uintptr");
+       tree type = type_to_tree(uintptr_type->get_backend(gogo));
        return build_int_cst(type, val);
       }
 
index bc949c6..930723e 100644 (file)
@@ -57,11 +57,11 @@ Gogo::import_unsafe(const std::string& local_name, bool is_local_name_exported,
   if (add_to_globals)
     this->add_named_type(pointer_type);
 
-  Type* int_type = this->lookup_global("int")->type_value();
+  Type* uintptr_type = Type::lookup_integer_type("uintptr");
 
   // Sizeof.
   Typed_identifier_list* results = new Typed_identifier_list;
-  results->push_back(Typed_identifier("", int_type, bloc));
+  results->push_back(Typed_identifier("", uintptr_type, bloc));
   Function_type* fntype = Type::make_function_type(NULL, NULL, results, bloc);
   fntype->set_is_builtin();
   no = bindings->add_function_declaration("Sizeof", package, fntype, bloc);
@@ -70,7 +70,7 @@ Gogo::import_unsafe(const std::string& local_name, bool is_local_name_exported,
 
   // Offsetof.
   results = new Typed_identifier_list;
-  results->push_back(Typed_identifier("", int_type, bloc));
+  results->push_back(Typed_identifier("", uintptr_type, bloc));
   fntype = Type::make_function_type(NULL, NULL, results, bloc);
   fntype->set_is_varargs();
   fntype->set_is_builtin();
@@ -80,7 +80,7 @@ Gogo::import_unsafe(const std::string& local_name, bool is_local_name_exported,
 
   // Alignof.
   results = new Typed_identifier_list;
-  results->push_back(Typed_identifier("", int_type, bloc));
+  results->push_back(Typed_identifier("", uintptr_type, bloc));
   fntype = Type::make_function_type(NULL, NULL, results, bloc);
   fntype->set_is_varargs();
   fntype->set_is_builtin();
index f119a21..c693aeb 100644 (file)
@@ -34,7 +34,7 @@ var elen int
 func (file *File) readdirnames(n int) (names []string, err error) {
        if elen == 0 {
                var dummy syscall.Dirent
-               elen = (unsafe.Offsetof(dummy.Name) +
+               elen = (int(unsafe.Offsetof(dummy.Name)) +
                        libc_pathconf(syscall.StringBytePtr(file.name), syscall.PC_NAME_MAX) +
                        1)
        }
index 92feae0..9961ba8 100644 (file)
@@ -138,7 +138,7 @@ func (w WaitStatus) TrapCause() int
 //sys  Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)
 //select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) int
 
-const nfdbits = unsafe.Sizeof(fds_bits_type) * 8
+const nfdbits = int(unsafe.Sizeof(fds_bits_type) * 8)
 
 type FdSet struct {
        Bits [(FD_SETSIZE + nfdbits - 1) / nfdbits]fds_bits_type