compiler, libgo: unsafe.{Sizeof,Alignof,Offsetof} return uintptr.
From-SVN: r185946
This commit is contained in:
parent
917c1602aa
commit
a0c8ad3bdf
4 changed files with 15 additions and 11 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue