THRIFT-4351: use travis build stages to optimize build,
avoiding duplicate rebuilds of the same image, and also
allow personal docker hub repositories for private fork
builds to be optimized. Move ubsan build to artful image
because it catches more stuff and fix what was found.
THRIFT-4345: solidify docker build strategy for maximum
coverage: trusty, xenial, artful as stock as they can be
THRIFT-4344: add top level language summary markdown and
update readme with a new image on the layered architecture
THRIFT-3847: remove VERSION macro from config.h which
was causing a conflict on artful builds.
THRIFT-4359: fix haxe map/set decode when key is binary,
as a missing break statement caused it to use an int
during decode
This closes #1389
diff --git a/compiler/cpp/Makefile.am b/compiler/cpp/Makefile.am
index 5082033..482a89a 100644
--- a/compiler/cpp/Makefile.am
+++ b/compiler/cpp/Makefile.am
@@ -111,7 +111,7 @@
src/thrift/generate/t_rs_generator.cc
thrift_CPPFLAGS = -I$(srcdir)/src
-thrift_CXXFLAGS = -Wall -Wextra -pedantic
+thrift_CXXFLAGS = -Wall -Wextra -pedantic -Werror
thrift_LDADD = @LEXLIB@ src/thrift/libparse.a
if !WITH_PLUGIN
diff --git a/compiler/cpp/src/thrift/generate/t_csharp_generator.cc b/compiler/cpp/src/thrift/generate/t_csharp_generator.cc
index 10d28b2..a6cb09d 100644
--- a/compiler/cpp/src/thrift/generate/t_csharp_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_csharp_generator.cc
@@ -2909,6 +2909,7 @@
const string& structname) {
// begin new scope
member_mapping_scope dummy;
+ dummy.scope_member = 0;
member_mapping_scopes.push_back(dummy);
member_mapping_scope& active = member_mapping_scopes.back();
active.scope_member = scope;
diff --git a/compiler/cpp/src/thrift/generate/t_haxe_generator.cc b/compiler/cpp/src/thrift/generate/t_haxe_generator.cc
index 4de4307..97c7d19 100644
--- a/compiler/cpp/src/thrift/generate/t_haxe_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_haxe_generator.cc
@@ -2556,6 +2556,7 @@
if (!(tkey->is_binary())) {
return "StringMap< " + type_name(tval) + ">";
}
+ break; // default to ObjectMap<>
case t_base_type::TYPE_I8:
case t_base_type::TYPE_I16:
case t_base_type::TYPE_I32:
@@ -2581,6 +2582,7 @@
if (!(tkey->is_binary())) {
return "StringSet";
}
+ break; // default to ObjectSet
case t_base_type::TYPE_I8:
case t_base_type::TYPE_I16:
case t_base_type::TYPE_I32:
diff --git a/compiler/cpp/src/thrift/generate/t_hs_generator.cc b/compiler/cpp/src/thrift/generate/t_hs_generator.cc
index 29c0816..30eb8fa 100644
--- a/compiler/cpp/src/thrift/generate/t_hs_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_hs_generator.cc
@@ -1415,12 +1415,12 @@
} else if (ttype->is_set()) {
out << "(Set.fromList $ P.map (\\" << val << " -> ";
- generate_deserialize_type(out, ((t_map*)ttype)->get_key_type(), val);
+ generate_deserialize_type(out, ((t_set*)ttype)->get_elem_type(), val);
out << ") " << arg << ")";
} else if (ttype->is_list()) {
out << "(Vector.fromList $ P.map (\\" << val << " -> ";
- generate_deserialize_type(out, ((t_map*)ttype)->get_key_type(), val);
+ generate_deserialize_type(out, ((t_list*)ttype)->get_elem_type(), val);
out << ") " << arg << ")";
}
}
@@ -1488,9 +1488,9 @@
out << ")) $ Map.toList " << prefix;
} else if (ttype->is_set()) {
- out << "T.TSet " << type_to_enum(((t_list*)ttype)->get_elem_type());
+ out << "T.TSet " << type_to_enum(((t_set*)ttype)->get_elem_type());
out << " $ P.map (\\" << v << " -> ";
- generate_serialize_type(out, ((t_list*)ttype)->get_elem_type(), v);
+ generate_serialize_type(out, ((t_set*)ttype)->get_elem_type(), v);
out << ") $ Set.toList " << prefix;
} else if (ttype->is_list()) {
@@ -1577,7 +1577,7 @@
return "(T.T_MAP " + ktype + " " + vtype + ")";
} else if (type->is_set()) {
- return "(T.T_SET " + type_to_enum(((t_list*)type)->get_elem_type()) + ")";
+ return "(T.T_SET " + type_to_enum(((t_set*)type)->get_elem_type()) + ")";
} else if (type->is_list()) {
return "(T.T_LIST " + type_to_enum(((t_list*)type)->get_elem_type()) + ")";
diff --git a/compiler/cpp/src/thrift/generate/t_netcore_generator.cc b/compiler/cpp/src/thrift/generate/t_netcore_generator.cc
index 71e4236..8d157a9 100644
--- a/compiler/cpp/src/thrift/generate/t_netcore_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_netcore_generator.cc
@@ -2789,6 +2789,7 @@
{
// begin new scope
member_mapping_scope dummy;
+ dummy.scope_member = 0;
member_mapping_scopes.push_back(dummy);
member_mapping_scope& active = member_mapping_scopes.back();
active.scope_member = scope;
diff --git a/compiler/cpp/src/thrift/parse/t_typedef.h b/compiler/cpp/src/thrift/parse/t_typedef.h
index 0cccc26..aad3a50 100644
--- a/compiler/cpp/src/thrift/parse/t_typedef.h
+++ b/compiler/cpp/src/thrift/parse/t_typedef.h
@@ -33,7 +33,7 @@
class t_typedef : public t_type {
public:
t_typedef(t_program* program, t_type* type, const std::string& symbolic)
- : t_type(program, symbolic), type_(type), symbolic_(symbolic), forward_(false), seen_(false) {}
+ : t_type(program, symbolic), type_(type), symbolic_(symbolic), forward_(false) {}
/**
* This constructor is used to refer to a type that is lazily
@@ -44,8 +44,8 @@
: t_type(program, symbolic),
type_(NULL),
symbolic_(symbolic),
- forward_(forward),
- seen_(false) {}
+ forward_(forward)
+ {}
~t_typedef() {}
@@ -61,7 +61,6 @@
t_type* type_;
std::string symbolic_;
bool forward_;
- mutable bool seen_;
};
#endif