You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Zezeng Wang (Jira)" <ji...@apache.org> on 2020/04/20 11:51:00 UTC

[jira] [Created] (THRIFT-5179) Thrift compiler will generate wrong code if IDL struct's name is 'a' or 'b'

Zezeng Wang created THRIFT-5179:
-----------------------------------

             Summary: Thrift compiler will generate wrong code if IDL struct's name is 'a' or  'b'
                 Key: THRIFT-5179
                 URL: https://issues.apache.org/jira/browse/THRIFT-5179
             Project: Thrift
          Issue Type: Bug
          Components: C++ - Compiler
            Reporter: Zezeng Wang


test.thrift file is as below:
struct a {
 1: string name,
 2: double price
}

struct b {
 1: i8 size,
 2: i32 seq
}

struct a1 {
 1: i8 size,
 2: i32 seq
}

struct a2 {
 1: i8 size,
 2: i32 seq
}


When struct is named as 'a' or 'b' will throw compile errors as below:
In file included from test_constants.h:10:0,
 from test_constants.cpp:7:
test_types.h:76:17: error: ‘a’ is not a type
 void swap(a &a, a &b);
 ^
In file included from test_types.cpp:7:0:
test_types.h:76:17: error: ‘a’ is not a type
 void swap(a &a, a &b);
 ^
test_types.cpp:102:17: error: ‘a’ is not a type
 void swap(a &a, a &b) {
 ^
test_types.cpp: In function ‘void swap(a&, int&)’:
test_types.cpp:104:18: error: request for member ‘name’ in ‘b’, which is of non-class type ‘int’
 swap(a.name, b.name);
 ^~~~
test_types.cpp:105:19: error: request for member ‘price’ in ‘b’, which is of non-class type ‘int’
 swap(a.price, b.price);
 ^~~~~
test_types.cpp:106:21: error: request for member ‘__isset’ in ‘b’, which is of non-class type ‘int’
 swap(a.__isset, b.__isset);
 ^~~~~~~



--
This message was sent by Atlassian Jira
(v8.3.4#803005)