app_voicemail: Add workaround for a gcc 10 issue with -Wrestrict
authorGeorge Joseph <gjoseph@digium.com>
Thu, 30 Apr 2020 15:56:03 +0000 (09:56 -0600)
committerGeorge Joseph <gjoseph@digium.com>
Thu, 30 Apr 2020 16:10:23 +0000 (11:10 -0500)
The gcc 10 -Wrestrict option was causing "overlap" errors when
snprintf was copying one char[256] structure member to another
char[256] member in the same structure.

Using ast_alloca instead of declaring the structure inline
solves the issue.

Here's a link to the "enhancement":
https://gcc.gnu.org/legacy-ml/gcc-patches/2019-10/msg00570.html

We may follow up with a gcc bug report.

Change-Id: Ie0099adcb0a9727bd9aa99e024dd912a67eaf534

apps/app_voicemail.c

index 7dbebdd..0b14934 100644 (file)
@@ -14534,6 +14534,12 @@ exit_vmsayname_test:
        return res ? AST_TEST_FAIL : AST_TEST_PASS;
 }
 
+struct test_files {
+       char dir[256];
+       char file[256];
+       char txtfile[256];
+};
+
 AST_TEST_DEFINE(test_voicemail_msgcount)
 {
        int i, j, res = AST_TEST_PASS, syserr;
@@ -14543,11 +14549,8 @@ AST_TEST_DEFINE(test_voicemail_msgcount)
 #ifdef IMAP_STORAGE
        struct ast_channel *chan = NULL;
 #endif
-       struct {
-               char dir[256];
-               char file[256];
-               char txtfile[256];
-       } tmp[3];
+       /* Using ast_alloca instead of just declaring tmp as an array is a workaround for a GCC 10 issue with -Wrestrict */
+       struct test_files *tmp = ast_alloca(sizeof(struct test_files) * 3);
        char syscmd[256];
        const char origweasels[] = "tt-weasels";
        const char testcontext[] = "test";