THRIFT-423. -strict should turn omitted field ids into compile error
Issue name says it all.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@761736 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/globals.h b/compiler/cpp/src/globals.h
index 3b9e4a4..b204143 100644
--- a/compiler/cpp/src/globals.h
+++ b/compiler/cpp/src/globals.h
@@ -54,6 +54,11 @@
};
/**
+ * Strictness level
+ */
+extern int g_strict;
+
+/**
* The master program parse tree. This is accessed from within the parser code
* to build up the program elements.
*/
diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc
index 8a0bd68..7a5d2d4 100644
--- a/compiler/cpp/src/main.cc
+++ b/compiler/cpp/src/main.cc
@@ -121,6 +121,11 @@
int g_debug = 0;
/**
+ * Strictness level
+ */
+int g_strict = 127;
+
+/**
* Warning level
*/
int g_warn = 1;
@@ -928,6 +933,7 @@
} else if (strcmp(arg, "-nowarn") == 0) {
g_warn = 0;
} else if (strcmp(arg, "-strict") == 0) {
+ g_strict = 255;
g_warn = 2;
} else if (strcmp(arg, "-v") == 0 || strcmp(arg, "-verbose") == 0 ) {
g_verbose = 1;
diff --git a/compiler/cpp/src/thrifty.yy b/compiler/cpp/src/thrifty.yy
index c050590..bf5408e 100644
--- a/compiler/cpp/src/thrifty.yy
+++ b/compiler/cpp/src/thrifty.yy
@@ -848,6 +848,10 @@
pdebug("tok_int_constant : Field -> FieldType tok_identifier");
if ($2 < 0) {
pwarning(1, "No field key specified for %s, resulting protocol may have conflicts or not be backwards compatible!\n", $5);
+ if (g_strict >= 192) {
+ yyerror("Implicit field keys are deprecated and not allowed with -strict");
+ exit(1);
+ }
}
$$ = new t_field($4, $5, $2);
$$->set_req($3);