You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Yuxuan Wang (Jira)" <ji...@apache.org> on 2023/02/15 17:19:00 UTC

[jira] [Created] (THRIFT-5685) Compiler generates wrong go code for forward defined types in optional fields

Yuxuan Wang created THRIFT-5685:
-----------------------------------

             Summary: Compiler generates wrong go code for forward defined types in optional fields
                 Key: THRIFT-5685
                 URL: https://issues.apache.org/jira/browse/THRIFT-5685
             Project: Thrift
          Issue Type: Bug
          Components: Go - Compiler
    Affects Versions: 0.18.0
            Reporter: Yuxuan Wang
            Assignee: Yuxuan Wang


This is a bug introduced by the fix of THRIFT-5601.

Given this thrift file:

{code:java}
struct Bar {
  1: optional Foo bar
}

struct Foo {
  1: optional i64 foo
}
{code}

0.18.0 with b39370ec3bc96d2 reverted will generate the following go code (expected):

{code:go}
...
-var Bar_Bar_DEFAULT *Foo
-func (p *Bar) GetBar() *Foo {
  if !p.IsSetBar() {
    return Bar_Bar_DEFAULT
  }
return p.Bar
}
...
{code}

while 0.18.0 generates:

{code:go}
...
var Bar_Bar_DEFAULT Foo
func (p *Bar) GetBar() Foo {
  if !p.IsSetBar() {
    return Bar_Bar_DEFAULT
  }
return *p.Bar
}
...
{code}

This makes usages like bar.GetBar().GetFoo() no longer compiles because GetBar now returns non-pointer type.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)