Server IP : 2a02:4780:11:1359:0:1d43:a566:2 / Your IP : 216.73.216.161 Web Server : LiteSpeed System : Linux in-mum-web1259.main-hosting.eu 4.18.0-553.37.1.lve.el8.x86_64 #1 SMP Mon Feb 10 22:45:17 UTC 2025 x86_64 User : u490972518 ( 490972518) PHP Version : 5.6.40 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail MySQL : ON | cURL : ON | WGET : ON | Perl : OFF | Python : OFF Directory (0755) : /home/../opt/golang/1.19.4/test/ |
[ Home ] | [ C0mmand ] | [ Upload File ] |
---|
// run // Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import "unsafe" type T struct { X int } var t T func isUintptr(uintptr) {} type T2 struct { A int32 U2 } type U2 struct { B int32 C int32 } var t2 T2 var p2 *T2 func main() { // Test unsafe.Sizeof, unsafe.Alignof, and unsafe.Offsetof all return uintptr. isUintptr(unsafe.Sizeof(t)) isUintptr(unsafe.Alignof(t)) isUintptr(unsafe.Offsetof(t.X)) // Test correctness of Offsetof with respect to embedded fields (issue 4909). if unsafe.Offsetof(t2.C) != 8 { println(unsafe.Offsetof(t2.C), "!= 8") panic("unsafe.Offsetof(t2.C) != 8") } if unsafe.Offsetof(p2.C) != 8 { println(unsafe.Offsetof(p2.C), "!= 8") panic("unsafe.Offsetof(p2.C) != 8") } if unsafe.Offsetof(t2.U2.C) != 4 { println(unsafe.Offsetof(t2.U2.C), "!= 4") panic("unsafe.Offsetof(t2.U2.C) != 4") } if unsafe.Offsetof(p2.U2.C) != 4 { println(unsafe.Offsetof(p2.U2.C), "!= 4") panic("unsafe.Offsetof(p2.U2.C) != 4") } testDeep() testNotEmbedded() } type ( S1 struct { A int64 S2 } S2 struct { B int64 S3 } S3 struct { C int64 S4 } S4 struct { D int64 S5 } S5 struct { E int64 S6 } S6 struct { F int64 S7 } S7 struct { G int64 S8 } S8 struct { H int64 *S1 } ) func testDeep() { var s1 S1 switch { case unsafe.Offsetof(s1.A) != 0: panic("unsafe.Offsetof(s1.A) != 0") case unsafe.Offsetof(s1.B) != 8: panic("unsafe.Offsetof(s1.B) != 8") case unsafe.Offsetof(s1.C) != 16: panic("unsafe.Offsetof(s1.C) != 16") case unsafe.Offsetof(s1.D) != 24: panic("unsafe.Offsetof(s1.D) != 24") case unsafe.Offsetof(s1.E) != 32: panic("unsafe.Offsetof(s1.E) != 32") case unsafe.Offsetof(s1.F) != 40: panic("unsafe.Offsetof(s1.F) != 40") case unsafe.Offsetof(s1.G) != 48: panic("unsafe.Offsetof(s1.G) != 48") case unsafe.Offsetof(s1.H) != 56: panic("unsafe.Offsetof(s1.H) != 56") case unsafe.Offsetof(s1.S1) != 64: panic("unsafe.Offsetof(s1.S1) != 64") case unsafe.Offsetof(s1.S1.S2.S3.S4.S5.S6.S7.S8.S1.S2) != 8: panic("unsafe.Offsetof(s1.S1.S2.S3.S4.S5.S6.S7.S8.S1.S2) != 8") } } func testNotEmbedded() { type T2 struct { B int32 C int32 } type T1 struct { A int32 T2 } type T struct { Dummy int32 F T1 P *T1 } var t T var p *T switch { case unsafe.Offsetof(t.F.B) != 4: panic("unsafe.Offsetof(t.F.B) != 4") case unsafe.Offsetof(t.F.C) != 8: panic("unsafe.Offsetof(t.F.C) != 8") case unsafe.Offsetof(t.P.B) != 4: panic("unsafe.Offsetof(t.P.B) != 4") case unsafe.Offsetof(t.P.C) != 8: panic("unsafe.Offsetof(t.P.C) != 8") case unsafe.Offsetof(p.F.B) != 4: panic("unsafe.Offsetof(p.F.B) != 4") case unsafe.Offsetof(p.F.C) != 8: panic("unsafe.Offsetof(p.F.C) != 8") case unsafe.Offsetof(p.P.B) != 4: panic("unsafe.Offsetof(p.P.B) != 4") case unsafe.Offsetof(p.P.C) != 8: panic("unsafe.Offsetof(p.P.C) != 8") } }