Ice-3.6.2 slice2java parsing bug

Hello ZeroC -
I have come across the following slice2java
bug. But first things first, my environment:
Linux: Red Hat Enterprise Linux Server release 6.3 (Santiago) with kernel 2.6.32-279.el6.x86_64
Ice: 3.6.2 locally built
slice2java: 3.6.2 locally built
C++ toolchain: gcc6.1.0
What happens is that lines in the ice definition files that have a trailing comment seem to be considered a comment in their entirety. This causes:
structs
orclasses
member variables to disappear silentlyenum
values to disappear silently- member functions of
interfaces
to disappear silently syntax errors
when comments are appended to opening or closing scopes (modules
,enums
,structs
orclasses
)
I have attached Here is the test file I used to illustrate the bug:SliceBug.ice
:
#pragma once module test_module { struct TestStruct { long member; long disappearing_member; // This comment will make this line disappear }; }; // This comment generates a syntax error
This is what happens when I run slice2java
against that Ice file:
[11:14:49 [email protected]:~/tmp/slice2java_test] $ slice2java -Iice_def -Igcc6.1.0/x86_64/Ice-3.6.2/slice --underscore --tie --stream --output-dir=ice_lib ice_def/SliceBug.ice /home/epic/tmp/slice2java_test/ice_def/SliceBug.ice:9: syntax error
If I remove the comment that generates the syntax error
, slice2java
completes. It generates ice_lib/test_module/TestStruct.java
, but the code is incomplete. It is missing the long disappearing_member
:
[11:16:18 [email protected]:~/tmp/slice2java_test] $ cat ice_lib/test_module/TestStruct.java // ********************************************************************** // // Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** // // Ice version 3.6.2 // // <auto-generated> // // Generated from file `SliceBug.ice' // // Warning: do not edit this file. // // </auto-generated> // package test_module; public class TestStruct implements java.lang.Cloneable, java.io.Serializable { public long member; public TestStruct() { } public TestStruct(long member) { this.member = member; } [...]
If I remove the comment trailing long disappearing_member;
, then slice2java
finally generates the proper java
file:
[11:37:27 [email protected]:~/tmp/slice2java_test] $ cat ice_lib/test_module/TestStruct.java // ********************************************************************** // // Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** // // Ice version 3.6.2 // // <auto-generated> // // Generated from file `SliceBug.ice' // // Warning: do not edit this file. // // </auto-generated> // package test_module; public class TestStruct implements java.lang.Cloneable, java.io.Serializable { public long member; public long disappearing_member; public TestStruct() { } public TestStruct(long member, long disappearing_member) { this.member = member; this.disappearing_member = disappearing_member; } [...]
Feel free to contact me if you need further details.
Emmanuel
Comments
Hi,
This seems like and old mcpp (the c++ pre-processor used by Slice compilers) bug, did you also build MCPP your self?
The simpler is to use our mcpp fork that include all required patches.
It could be related to that indeed. I was using the box's libmcpp. I am going to build mcpp using your fork. I will let you know.
Thanks for the quick answer!
Using the ZeroC mcpp fork fixed it. Thanks again