You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jens Geyer (JIRA)" <ji...@apache.org> on 2017/03/04 13:14:46 UTC
[jira] [Resolved] (THRIFT-4031) Go plugin generates invalid code
for lists of typedef'ed built-in types
[ https://issues.apache.org/jira/browse/THRIFT-4031?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jens Geyer resolved THRIFT-4031.
--------------------------------
Resolution: Fixed
Assignee: Can Celasun
Fix Version/s: 0.11.0
Committed.
> Go plugin generates invalid code for lists of typedef'ed built-in types
> -----------------------------------------------------------------------
>
> Key: THRIFT-4031
> URL: https://issues.apache.org/jira/browse/THRIFT-4031
> Project: Thrift
> Issue Type: Bug
> Components: Go - Compiler
> Affects Versions: 0.10.0
> Environment: Thrift version 0.10.0
> go version go1.7.4 linux/386
> Reporter: Benoit Sigoure
> Assignee: Can Celasun
> Priority: Critical
> Fix For: 0.11.0
>
>
> Reproduction:
> {code}
> mkdir /tmp/bug
> cd /tmp/bug
> cat >test.thrift <<EOF
> typedef i32 foo
> struct s {
> 1:list<foo> a
> }
> EOF
> mkdir _build
> thrift -out _build --gen go:package=pkg -r test.thrift
> {code}
> Then try to compile the resulting {{go build _build/pkg/test.go}} and you'll get:
> {code}
> _build/pkg/test.go:81: cannot use _elem0 (type int32) as type Foo in append
> {code}
> Here's the generated code with line numbers and a couple comments I added:
> {code}
> 67 func (p *S) ReadField1(iprot thrift.TProtocol) error {
> 68 _, size, err := iprot.ReadListBegin()
> 69 if err != nil {
> 70 return thrift.PrependError("error reading list begin: ", err)
> 71 }
> 72 tSlice := make([]Foo, 0, size) // The slice contain Foo values
> 73 p.A = tSlice
> 74 for i := 0; i < size; i ++ {
> 75 var _elem0 int32
> 76 if v, err := iprot.ReadI32(); err != nil {
> 77 return thrift.PrependError("error reading field 0: ", err)
> 78 } else {
> 79 _elem0 = v
> 80 }
> 81 p.A = append(p.A, _elem0) // Here the code should do append(p.A, Foo(_elem0))
> 82 }
> 83 if err := iprot.ReadListEnd(); err != nil {
> 84 return thrift.PrependError("error reading list end: ", err)
> 85 }
> 86 return nil
> 87 }
> {code}
> This was working fine with 0.9.3 so this is a regression in 0.10.0. With 0.9.3 the slice {{tSlice}} is a {{[]int32}}, as opposed to a {{[]Foo}}.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)