From a0c8ad3bdfe2b84c35388bf9937fa9296fe50278 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 29 Mar 2012 03:53:13 +0000 Subject: [PATCH] compiler, libgo: unsafe.{Sizeof,Alignof,Offsetof} return uintptr. From-SVN: r185946 --- gcc/go/gofrontend/expressions.cc | 14 +++++++++----- gcc/go/gofrontend/unsafe.cc | 8 ++++---- libgo/go/os/dir.go | 2 +- libgo/go/syscall/libcall_posix.go | 2 +- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 13c7de3..06e85eb 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -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(ret)); + nc->set_unsigned_long(Type::lookup_integer_type("uintptr"), + static_cast(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(offset)); + nc->set_unsigned_long(Type::lookup_integer_type("uintptr"), + static_cast(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); } diff --git a/gcc/go/gofrontend/unsafe.cc b/gcc/go/gofrontend/unsafe.cc index bc949c6..930723e 100644 --- a/gcc/go/gofrontend/unsafe.cc +++ b/gcc/go/gofrontend/unsafe.cc @@ -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(); diff --git a/libgo/go/os/dir.go b/libgo/go/os/dir.go index f119a21..c693aeb 100644 --- a/libgo/go/os/dir.go +++ b/libgo/go/os/dir.go @@ -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) } diff --git a/libgo/go/syscall/libcall_posix.go b/libgo/go/syscall/libcall_posix.go index 92feae0..9961ba8 100644 --- a/libgo/go/syscall/libcall_posix.go +++ b/libgo/go/syscall/libcall_posix.go @@ -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 -- 2.7.4