You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Silas Snider (JIRA)" <ji...@apache.org> on 2015/03/26 18:52:53 UTC
[jira] [Created] (THRIFT-3051) Go Thrift generator creates bad go
code
Silas Snider created THRIFT-3051:
------------------------------------
Summary: Go Thrift generator creates bad go code
Key: THRIFT-3051
URL: https://issues.apache.org/jira/browse/THRIFT-3051
Project: Thrift
Issue Type: Bug
Components: Go - Compiler
Affects Versions: 0.9.2, 1.0
Environment: Mac OS X 10.10.2
Thrift 0.9.2 installed via homebrew, and Thrift HEAD (identifies as 1.0.0-dev) installed via homebrew
Reporter: Silas Snider
h2. Motivation
I was attempting to build a go tool that used the Apache Aurora thrift interface, only to be stymied because thrift generates invalid code for the current api.thrift interface. (found under api/src/main/thrift/org/apache/aurora/gen/api.thrift)
h2. Steps to replicate
# Create a thrift file called test.thrift containing the text:
{code:title=test.thrift|borderStyle=solid}
struct Option1 {
}
struct Option2 {
1: optional string name
}
union Descendant {
1: Option1 option1
2: Option2 option2
}
struct TestStruct {
1: optional Descendant descendant = { "option1": {}}
}
{code}
# Run {{thrift -o somedir -r --gen go test.thrift}}
h2. Expected Result
The command indicates success, and the {{somedir}} directory contains a tree of go code that successfully compiles.
h2. Actual Result
The above command outputs
{code}
/somedir/gen-go//test/ttypes.go:317:6: expected '}', found ':='
/somedir/gen-go//test/ttypes.go:318:3: expected declaration, found 'IDENT' descendant
WARNING - Running 'gofmt -w /somedir/gen-go//test/ttypes.go' failed.
{code}
The code fails to compile with similar errors. On inspection, it appears that the go compiler outputs
{code:title=ttypes.go|borderStyle=solid}
var TestStruct_Descendant_DEFAULT *Descendant = &Descendant{
v1 := &Option1{}
descendant.Option1 = v1}
{code}
which is entirely incorrect. This code should instead be
{code:title=ttypes.go|borderStyle=solid}
var TestStruct_Descendant_DEFAULT *Descendant = &Descendant{
Option1: &Option1{}}
{code}
When this change is made, the compilation succeeds.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)