diff --git a/Makefile.am b/Makefile.am index 85b317f..8b822ab 100644 --- a/Makefile.am +++ b/Makefile.am @@ -178,6 +178,19 @@ t/test-full.pb.cc t/test-full.pb.h: @PROTOC@ $(top_srcdir)/t/test-full.proto t/generated-code2/test-full-cxx-output.inc: t/generated-code2/cxx-generate-packed-data$(EXEEXT) $(AM_V_GEN)$(top_builddir)/t/generated-code2/cxx-generate-packed-data$(EXEEXT) > $(top_builddir)/t/generated-code2/test-full-cxx-output.inc +BUILT_SOURCES += \ + t/test.pb-c.c t/test.pb-c.h \ + t/test-full.pb-c.c t/test-full.pb-c.h \ + t/test-optimized.pb-c.c t/test-optimized.pb-c.h \ + t/test-full.pb.cc t/test-full.pb.h \ + t/generated-code2/test-full-cxx-output.inc + +t_version_version_SOURCES = \ + t/version/version.c +t_version_version_LDADD = \ + protobuf-c/libprotobuf-c.la + +# Issue #220 check_PROGRAMS += \ t/issue220/issue220 TESTS += \ @@ -194,17 +207,23 @@ BUILT_SOURCES += \ EXTRA_DIST += \ t/issue220/issue220.proto -BUILT_SOURCES += \ - t/test.pb-c.c t/test.pb-c.h \ - t/test-full.pb-c.c t/test-full.pb-c.h \ - t/test-optimized.pb-c.c t/test-optimized.pb-c.h \ - t/test-full.pb.cc t/test-full.pb.h \ - t/generated-code2/test-full-cxx-output.inc - -t_version_version_SOURCES = \ - t/version/version.c -t_version_version_LDADD = \ +# Issue #251 +check_PROGRAMS += \ + t/issue251/issue251 +TESTS += \ + t/issue251/issue251 +t_issue251_issue251_SOURCES = \ + t/issue251/issue251.c \ + t/issue251/issue251.pb-c.c +t_issue251_issue251_LDADD = \ protobuf-c/libprotobuf-c.la +t/issue251/issue251.pb-c.c t/issue251/issue251.pb-c.h: $(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) $(top_srcdir)/t/issue251/issue251.proto + $(AM_V_GEN)@PROTOC@ --plugin=$(top_builddir)/protoc-c/protoc-gen-c$(EXEEXT) -I$(top_srcdir) --c_out=$(top_builddir) $(top_srcdir)/t/issue251/issue251.proto +BUILT_SOURCES += \ + t/issue251/issue251.pb-c.c t/issue251/issue251.pb-c.h +EXTRA_DIST += \ + t/issue251/issue251.proto + endif # CROSS_COMPILING endif # BUILD_COMPILER diff --git a/protoc-c/c_message.cc b/protoc-c/c_message.cc index 671b708..4c27cd1 100755 --- a/protoc-c/c_message.cc +++ b/protoc-c/c_message.cc @@ -148,9 +148,10 @@ GenerateStructDefinition(io::Printer* printer) { } // Generate the case enums for unions - vars["opt_comma"] = ","; for (int i = 0; i < descriptor_->oneof_decl_count(); i++) { const OneofDescriptor *oneof = descriptor_->oneof_decl(i); + vars["opt_comma"] = ","; + vars["oneofname"] = FullNameToUpper(oneof->name()); vars["foneofname"] = FullNameToC(oneof->full_name()); @@ -167,7 +168,7 @@ GenerateStructDefinition(io::Printer* printer) { } printer->Print(vars, "$ucclassname$__$oneofname$_$fieldname$ = $fieldnum$$opt_comma$\n"); } - printer->Print(vars, " PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE($ucclassname$)\n"); + printer->Print(vars, " PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE($ucclassname$__$oneofname$)\n"); printer->Outdent(); printer->Print(vars, "} $foneofname$Case;\n\n"); } diff --git a/t/issue220/issue220.c b/t/issue220/issue220.c index 803eb04..530f755 100644 --- a/t/issue220/issue220.c +++ b/t/issue220/issue220.c @@ -8,6 +8,6 @@ int main(void) { assert(_MESSAGE_TYPE1__FLAG_IS_INT_SIZE == INT_MAX); assert(_MESSAGE_TYPE2__ANOTHER_FLAG_IS_INT_SIZE == INT_MAX); - assert(_TOP_LEVEL_IS_INT_SIZE == INT_MAX); + assert(_TOP_LEVEL__SUBMESSAGES_IS_INT_SIZE == INT_MAX); return EXIT_SUCCESS; } diff --git a/t/issue251/.gitignore b/t/issue251/.gitignore new file mode 100644 index 0000000..9ac717d --- /dev/null +++ b/t/issue251/.gitignore @@ -0,0 +1 @@ +issue251 diff --git a/t/issue251/issue251.c b/t/issue251/issue251.c new file mode 100644 index 0000000..928da56 --- /dev/null +++ b/t/issue251/issue251.c @@ -0,0 +1,12 @@ +#include + +#include "t/issue251/issue251.pb-c.h" + +int main(void) +{ + /* + * The problem in #251 caused invalid code to be generated in the + * .pb-c.h file, so there's nothing for us to do here. + */ + return EXIT_SUCCESS; +} diff --git a/t/issue251/issue251.proto b/t/issue251/issue251.proto new file mode 100644 index 0000000..a451894 --- /dev/null +++ b/t/issue251/issue251.proto @@ -0,0 +1,11 @@ +message two_oneofs { + oneof first_oneof { + bool a = 10; + bool b = 11; + } + + oneof second_oneof { + bool c = 20; + bool d = 21; + } +}