When trying to use extensions with a parent message, a build error happens with a message like "cannot convert nil to type bool."
In generator.go <https://github.com/golang/protobuf/blob/130e6b02ab059e7b717a096f397c5b60111cae74/protoc-gen-go/generator/generator.go#L1678>, I'm expecting the extension fields should reach needsStar() <https://github.com/golang/protobuf/blob/130e6b02ab059e7b717a096f397c5b60111cae74/protoc-gen-go/generator/generator.go#L1678>, but actually they won't because they have a parent and the parent's syntax is proto3 <https://github.com/golang/protobuf/blob/130e6b02ab059e7b717a096f397c5b60111cae74/protoc-gen-go/generator/generator.go#L1674> . Is this working as expected? Or, is this a bug? Versions protoc version: libprotoc 3.3.2 golang/protobuf: using the current master https://github.com/golang/protobuf/tree/130e6b02ab059e7b717a096f397c5b60111cae74 Commands for reproducing an issue ~/go/src/github.com/occho/protobuf-test/test$ pwd <home>/go/src/github.com/occho/protobuf-test/test ~/go/src/github.com/occho/protobuf-test/test$ ls test.proto ~/go/src/github.com/occho/protobuf-test/test$ protoc --go_out=${GOPATH}/src test.proto ~/go/src/github.com/occho/protobuf-test/test$ go build # github.com/occho/protobuf-test/test ./test.pb.go:41:23: cannot convert nil to type bool ./test.pb.go:50:25: cannot convert nil to type string ./test.pb.go:59:24: cannot convert nil to type int32 File: test.proto syntax = "proto3"; package test; import "google/protobuf/descriptor.proto"; option go_package = "github.com/occho/protobuf-test/test"; message Namespace { extend google.protobuf.FieldOptions { bool namespace_bool = 50001; string namespace_string = 50002; int32 namespace_int32 = 50003; } } extend google.protobuf.FieldOptions { bool my_bool = 51001; string my_string = 51002; int32 my_int32 = 51003; } Generated file: test.pb.go // Code generated by protoc-gen-go. DO NOT EDIT. // source: test.proto /* Package test is a generated protocol buffer package. It is generated from these files: test.proto It has these top-level messages: Namespace */ package test import proto "github.com/golang/protobuf/proto" import fmt "fmt" import math "math" import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type Namespace struct { } func (m *Namespace) Reset() { *m = Namespace{} } func (m *Namespace) String() string { return proto.CompactTextString(m) } func (*Namespace) ProtoMessage() {} func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } var E_Namespace_NamespaceBool = &proto.ExtensionDesc{ ExtendedType: (*google_protobuf.FieldOptions)(nil), ExtensionType: (bool)(nil), Field: 50001, Name: "test.Namespace.namespace_bool", Tag: "varint,50001,opt,name=namespace_bool,json=namespaceBool", Filename: "test.proto", } var E_Namespace_NamespaceString = &proto.ExtensionDesc{ ExtendedType: (*google_protobuf.FieldOptions)(nil), ExtensionType: (string)(nil), Field: 50002, Name: "test.Namespace.namespace_string", Tag: "bytes,50002,opt,name=namespace_string,json=namespaceString", Filename: "test.proto", } var E_Namespace_NamespaceInt32 = &proto.ExtensionDesc{ ExtendedType: (*google_protobuf.FieldOptions)(nil), ExtensionType: (int32)(nil), Field: 50003, Name: "test.Namespace.namespace_int32", Tag: "varint,50003,opt,name=namespace_int32,json=namespaceInt32", Filename: "test.proto", } var E_MyBool = &proto.ExtensionDesc{ ExtendedType: (*google_protobuf.FieldOptions)(nil), ExtensionType: (*bool)(nil), Field: 51001, Name: "test.my_bool", Tag: "varint,51001,opt,name=my_bool,json=myBool", Filename: "test.proto", } var E_MyString = &proto.ExtensionDesc{ ExtendedType: (*google_protobuf.FieldOptions)(nil), ExtensionType: (*string)(nil), Field: 51002, Name: "test.my_string", Tag: "bytes,51002,opt,name=my_string,json=myString", Filename: "test.proto", } var E_MyInt32 = &proto.ExtensionDesc{ ExtendedType: (*google_protobuf.FieldOptions)(nil), ExtensionType: (*int32)(nil), Field: 51003, Name: "test.my_int32", Tag: "varint,51003,opt,name=my_int32,json=myInt32", Filename: "test.proto", } func init() { proto.RegisterType((*Namespace)(nil), "test.Namespace") proto.RegisterExtension(E_Namespace_NamespaceBool) proto.RegisterExtension(E_Namespace_NamespaceString) proto.RegisterExtension(E_Namespace_NamespaceInt32) proto.RegisterExtension(E_MyBool) proto.RegisterExtension(E_MyString) proto.RegisterExtension(E_MyInt32) } func init() { proto.RegisterFile("test.proto", fileDescriptor0) } var fileDescriptor0 = []byte{ // 267 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x2a, 0x49, 0x2d, 0x2e, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x01, 0xb1, 0xa5, 0x14, 0xd2, 0xf3, 0xf3, 0xd3, 0x73, 0x52, 0xf5, 0xc1, 0x62, 0x49, 0xa5, 0x69, 0xfa, 0x29, 0xa9, 0xc5, 0xc9, 0x45, 0x99, 0x05, 0x25, 0xf9, 0x45, 0x10, 0x75, 0x4a, 0x2f, 0x19, 0xb9, 0x38, 0xfd, 0x12, 0x73, 0x53, 0x8b, 0x0b, 0x12, 0x93, 0x53, 0x8d, 0xdc, 0xb8, 0xf8, 0xf2, 0x60, 0x9c, 0xf8, 0xa4, 0xfc, 0xfc, 0x1c, 0x21, 0x59, 0x3d, 0x88, 0x11, 0x7a, 0x30, 0x23, 0xf4, 0xdc, 0x32, 0x53, 0x73, 0x52, 0xfc, 0x0b, 0x4a, 0x32, 0xf3, 0xf3, 0x8a, 0x25, 0x2e, 0xb6, 0x31, 0x2b, 0x30, 0x6a, 0x70, 0x04, 0xf1, 0xc2, 0xb5, 0x39, 0xe5, 0xe7, 0xe7, 0x18, 0x79, 0x71, 0x09, 0x20, 0xcc, 0x29, 0x2e, 0x29, 0xca, 0xcc, 0x4b, 0x27, 0x64, 0xd2, 0x25, 0xb0, 0x49, 0x9c, 0x41, 0xfc, 0x70, 0x8d, 0xc1, 0x60, 0x7d, 0x46, 0x1e, 0x5c, 0x08, 0xa1, 0xf8, 0xcc, 0xbc, 0x12, 0x63, 0x23, 0x42, 0x46, 0x5d, 0x06, 0x1b, 0xc5, 0x1a, 0x84, 0xf0, 0x8b, 0x27, 0x48, 0x9b, 0x95, 0x05, 0x17, 0x7b, 0x6e, 0x25, 0x51, 0xde, 0xda, 0xd9, 0x07, 0xf1, 0x16, 0x5b, 0x6e, 0x25, 0xc8, 0x3f, 0x56, 0x36, 0x5c, 0x9c, 0xb9, 0x95, 0x44, 0x7a, 0x64, 0x57, 0x1f, 0xc4, 0x23, 0x1c, 0xb9, 0x95, 0x10, 0x1f, 0x58, 0x59, 0x71, 0x71, 0xe4, 0x56, 0x12, 0xe7, 0xf4, 0xdd, 0x7d, 0x10, 0xa7, 0xb3, 0xe7, 0x56, 0x82, 0xdd, 0xec, 0xa4, 0x1a, 0xa5, 0x9c, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, 0x9f, 0x9c, 0x9c, 0x91, 0x0f, 0x8f, 0x4d, 0x5d, 0x50, 0x1c, 0xeb, 0x83, 0x88, 0x24, 0x36, 0xb0, 0x98, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xa5, 0xed, 0x4d, 0x03, 0x02, 0x00, 0x00, } -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
