Regression test for proto3 incorrectly considered empty (#504)
diff --git a/tests/regression/issue_504/SConscript b/tests/regression/issue_504/SConscript
new file mode 100644
index 0000000..c303171
--- /dev/null
+++ b/tests/regression/issue_504/SConscript
@@ -0,0 +1,12 @@
+# Regression test for #504:
+# Non empty submessage considered empty on FT_POINTER fields with address aligned on 0x100
+
+Import('env', 'malloc_env')
+
+env.NanopbProto(["test.proto"])
+test = malloc_env.Program(["test.c",
+                 "test.pb.c",
+                 "$COMMON/pb_encode.o",
+                 "$COMMON/pb_common.o"])
+
+env.RunTest(test)
diff --git a/tests/regression/issue_504/test.c b/tests/regression/issue_504/test.c
new file mode 100644
index 0000000..1ca86db
--- /dev/null
+++ b/tests/regression/issue_504/test.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pb_encode.h>
+#include "test.pb.h"
+#include "unittests.h"
+
+const char STR[] = "test str";
+#define ALIGN 0x100
+
+int main(int argc, char **argv)
+{
+    int status = 0;
+    uint8_t buffer[512] = {0};
+    int i;
+    pb_ostream_t ostream;
+    MyMessage msg = MyMessage_init_zero;
+    char *pStr, *pStrAligned;
+    ostream = pb_ostream_from_buffer(buffer, sizeof(buffer));
+
+    /* copy STR to a malloced 0x100 aligned address */
+    pStr = malloc(sizeof(STR) + ALIGN);
+    pStrAligned = (char*)((uintptr_t)(pStr + ALIGN) & ~(ALIGN - 1));
+    memcpy(pStrAligned, STR, sizeof(STR));
+
+    msg.submessage.somestring = pStrAligned;
+    printf("%p: '%s'\n", msg.submessage.somestring, msg.submessage.somestring);
+
+    if (!pb_encode(&ostream, MyMessage_fields, &msg)) {
+        fprintf(stderr, "Encode failed: %s\n", PB_GET_ERROR(&ostream));
+        return 1;
+    }
+
+    free(pStr);
+    msg.submessage.somestring = NULL;
+
+    printf("response payload (%d):", (int)ostream.bytes_written);
+    for (i = 0; i < ostream.bytes_written; i++) {
+        printf("%02X", buffer[i]);
+    }
+    printf("\n");
+
+    TEST(ostream.bytes_written != 0);
+
+    return status;
+}
+
diff --git a/tests/regression/issue_504/test.proto b/tests/regression/issue_504/test.proto
new file mode 100644
index 0000000..bdafd3c
--- /dev/null
+++ b/tests/regression/issue_504/test.proto
@@ -0,0 +1,13 @@
+syntax = "proto3";
+
+import "nanopb.proto";
+
+message MyMessage
+{
+    SubMessage submessage = 1 [(nanopb).proto3_singular_msgs = true];
+}
+
+message SubMessage
+{
+    string somestring = 1 [(nanopb).type = FT_POINTER];
+}