From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19459 invoked by alias); 23 Aug 2012 00:22:40 -0000 Received: (qmail 19439 invoked by uid 22791); 23 Aug 2012 00:22:38 -0000 X-SWARE-Spam-Status: No, hits=-4.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,TW_CC,T_TVD_MIME_NO_HEADERS X-Spam-Check-By: sourceware.org Received: from mail-pz0-f47.google.com (HELO mail-pz0-f47.google.com) (209.85.210.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 23 Aug 2012 00:22:11 +0000 Received: by daks35 with SMTP id s35so103920dak.20 for ; Wed, 22 Aug 2012 17:22:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:subject:date:message-id:user-agent:mime-version :content-type:x-gm-message-state; bh=tbOsJ6ptKcpdRKzrTp9vQoWY7qIYknGQCiU0rMIVL6c=; b=Mfg7fstU67swyyCvqCHX3csf9ZBjS5ty2JGgUL/VCNXM6feH1bP7JLFBKDPl4lobOZ WVjnu61T0V6X/sndD3iZjpJv6BoO6hX1jj+qA4xELAJu2M+IIexm8zoDy80xSgsZAfG+ n1MeqCDw8p0uJ9DJtBSu8MqDzIyUdhBgVMxhZkWVoTqk9zYByXJ/+8eFgjQK3MZBzWo5 FP7YjyG4iLt6j4mcjXDeNU783+Q/GFb5nM+oCQdk5IqZ9JSazBt3n8XtX7fN4/2Bd6RR wrhcu0fyWuEe3pJ5q6+fHf8DNiR+2qGMAy6cpUW5Lqbpi42rhRopNMSwAGeBdQ0cZRf/ s+lQ== Received: by 10.68.232.138 with SMTP id to10mr118910pbc.77.1345681330717; Wed, 22 Aug 2012 17:22:10 -0700 (PDT) Received: by 10.68.232.138 with SMTP id to10mr118896pbc.77.1345681330548; Wed, 22 Aug 2012 17:22:10 -0700 (PDT) Received: from coign.google.com ([67.218.110.117]) by mx.google.com with ESMTPS id ka4sm4699320pbc.61.2012.08.22.17.22.07 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 22 Aug 2012 17:22:09 -0700 (PDT) From: Ian Lance Taylor To: gcc-patches@gcc.gnu.org, gofrontend-dev@googlegroups.com Subject: Go patch committed: Remove unsafe.Pointer handling from type assertions Date: Thu, 23 Aug 2012 00:22:00 -0000 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Gm-Message-State: ALoCoQlzsCVPD8BcEzlMW+RQPTKJNF0KIhsBShLnOiAA7pj76WpWyH1q/RzPYRavP2M1k/IK/Dif7nfldTs6NolacdlYYtUXB3gHJb0J5HTjNHY4omR4MxWFCmlOLkTRkRLemDz2y699vq4ywFyJ6foIaSnM9QhxNIMjsfNpFNmyLldTMzEqyEbxEZK5roIEic7Sh9EEl6lx X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-08/txt/msg01535.txt.bz2 --=-=-= Content-length: 410 The Go frontend had some old code for special handling of unsafe.Pointer for type assertions. That is not part of the current language, and would actually break some otherwise valid programs. This patch removes the special handling, and fixes one piece of gccgo-specific code in libgo that used it. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline and 4.7 branch. Ian --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=foo.patch Content-Description: patch Content-length: 2597 diff -r 4cd85453373c go/expressions.cc --- a/go/expressions.cc Mon Aug 20 22:28:53 2012 -0700 +++ b/go/expressions.cc Wed Aug 22 17:08:07 2012 -0700 @@ -12914,26 +12914,8 @@ void Type_guard_expression::do_check_types(Gogo*) { - // 6g permits using a type guard with unsafe.pointer; we are - // compatible. Type* expr_type = this->expr_->type(); - if (expr_type->is_unsafe_pointer_type()) - { - if (this->type_->points_to() == NULL - && (this->type_->integer_type() == NULL - || (this->type_->forwarded() - != Type::lookup_integer_type("uintptr")))) - this->report_error(_("invalid unsafe.Pointer conversion")); - } - else if (this->type_->is_unsafe_pointer_type()) - { - if (expr_type->points_to() == NULL - && (expr_type->integer_type() == NULL - || (expr_type->forwarded() - != Type::lookup_integer_type("uintptr")))) - this->report_error(_("invalid unsafe.Pointer conversion")); - } - else if (expr_type->interface_type() == NULL) + if (expr_type->interface_type() == NULL) { if (!expr_type->is_error() && !this->type_->is_error()) this->report_error(_("type assertion only valid for interface types")); @@ -12966,23 +12948,10 @@ tree Type_guard_expression::do_get_tree(Translate_context* context) { - Gogo* gogo = context->gogo(); tree expr_tree = this->expr_->get_tree(context); if (expr_tree == error_mark_node) return error_mark_node; - Type* expr_type = this->expr_->type(); - if ((this->type_->is_unsafe_pointer_type() - && (expr_type->points_to() != NULL - || expr_type->integer_type() != NULL)) - || (expr_type->is_unsafe_pointer_type() - && this->type_->points_to() != NULL)) - return convert_to_pointer(type_to_tree(this->type_->get_backend(gogo)), - expr_tree); - else if (expr_type->is_unsafe_pointer_type() - && this->type_->integer_type() != NULL) - return convert_to_integer(type_to_tree(this->type_->get_backend(gogo)), - expr_tree); - else if (this->type_->interface_type() != NULL) + if (this->type_->interface_type() != NULL) return Expression::convert_interface_to_interface(context, this->type_, this->expr_->type(), expr_tree, true, diff -r 4cd85453373c libgo/go/os/dir.go --- a/libgo/go/os/dir.go Mon Aug 20 22:28:53 2012 -0700 +++ b/libgo/go/os/dir.go Wed Aug 22 17:08:07 2012 -0700 @@ -49,7 +49,7 @@ file.dirinfo.dir = r } - entry_dirent := unsafe.Pointer(&file.dirinfo.buf[0]).(*syscall.Dirent) + entry_dirent := (*syscall.Dirent)(unsafe.Pointer(&file.dirinfo.buf[0])) size := n if size < 0 { --=-=-=--