From 261ec900dbcac91d8da354d93195bbd70a05b483 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 5 Sep 2019 17:12:17 -0400 Subject: [PATCH 1/2] Remove variable declarations from macros in test_addr_parse() Instead, put them in the function itself. This is an attempt to fix the gcc warning about the "variable tracking size limit exceeded". --- src/test/test_addr.c | 46 +++++++------------------------------------- 1 file changed, 7 insertions(+), 39 deletions(-) diff --git a/src/test/test_addr.c b/src/test/test_addr.c index 0f50a43615..1b53bf2739 100644 --- a/src/test/test_addr.c +++ b/src/test/test_addr.c @@ -731,10 +731,6 @@ test_addr_ip6_helpers(void *arg) #define TEST_ADDR_PARSE_FMT(addr_str, expect_family, fmt_decorated, \ expect_str) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ - char buf[TOR_ADDR_BUF_LEN]; \ - const char *sv; \ r = tor_addr_parse(&addr, addr_str); \ tt_int_op(r, OP_EQ, expect_family); \ sv = tor_addr_to_str(buf, &addr, sizeof(buf), fmt_decorated); \ @@ -747,8 +743,6 @@ test_addr_ip6_helpers(void *arg) */ #define TEST_ADDR_PARSE_XFAIL(addr_str) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ r = tor_addr_parse(&addr, addr_str); \ tt_int_op(r, OP_EQ, -1); \ tt_assert(tor_addr_is_null(&addr)); \ @@ -762,11 +756,6 @@ test_addr_ip6_helpers(void *arg) #define TEST_ADDR_PORT_PARSE_FMT(addr_port_str, default_port, expect_family, \ fmt_decorated, expect_str, expect_port) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ - uint16_t port; \ - char buf[TOR_ADDR_BUF_LEN]; \ - const char *sv; \ r = tor_addr_port_parse(LOG_DEBUG, addr_port_str, &addr, &port, \ default_port); \ tt_int_op(r, OP_EQ, 0); \ @@ -783,9 +772,6 @@ test_addr_ip6_helpers(void *arg) */ #define TEST_ADDR_PORT_PARSE_XFAIL(addr_port_str, default_port) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ - uint16_t port; \ r = tor_addr_port_parse(LOG_DEBUG, addr_port_str, &addr, &port, \ default_port); \ tt_int_op(r, OP_EQ, -1); \ @@ -799,8 +785,6 @@ test_addr_ip6_helpers(void *arg) */ #define TEST_ADDR_V4_LOOKUP_HOSTNAME(addr_str, expect_str) \ STMT_BEGIN \ - int r; \ - uint32_t addr32h; \ r = tor_lookup_hostname(addr_str, &addr32h); \ tt_int_op(r, OP_EQ, 0); \ tt_str_op(fmt_addr32(addr32h), OP_EQ, expect_str); \ @@ -812,8 +796,6 @@ test_addr_ip6_helpers(void *arg) */ #define TEST_ADDR_V4_LOOKUP_XFAIL(bad_str) \ STMT_BEGIN \ - int r; \ - uint32_t addr32h; \ r = tor_lookup_hostname(bad_str, &addr32h); \ tt_int_op(r, OP_EQ, -1); \ tt_int_op(addr32h, OP_EQ, 0); \ @@ -828,8 +810,6 @@ test_addr_ip6_helpers(void *arg) */ #define TEST_HOST_V4_LOOKUP(host_str) \ STMT_BEGIN \ - int r; \ - uint32_t addr32h; \ r = tor_lookup_hostname(host_str, &addr32h); \ tt_int_op(r, OP_GE, -1); \ tt_int_op(r, OP_LE, 1); \ @@ -845,10 +825,6 @@ test_addr_ip6_helpers(void *arg) #define TEST_ADDR_LOOKUP_FMT(addr_str, require_family, expect_family, \ fmt_decorated, expect_str) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ - char buf[TOR_ADDR_BUF_LEN]; \ - const char *sv; \ r = tor_addr_lookup(addr_str, require_family, &addr); \ tt_int_op(r, OP_EQ, 0); \ tt_int_op(tor_addr_family(&addr), OP_EQ, expect_family); \ @@ -863,8 +839,6 @@ test_addr_ip6_helpers(void *arg) */ #define TEST_ADDR_LOOKUP_XFAIL(bad_str, require_family) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ r = tor_addr_lookup(bad_str, require_family, &addr); \ tt_int_op(r, OP_EQ, -1); \ tt_assert(tor_addr_is_null(&addr)); \ @@ -879,8 +853,6 @@ test_addr_ip6_helpers(void *arg) */ #define TEST_HOST_LOOKUP(host_str, require_family) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ r = tor_addr_lookup(host_str, require_family, &addr); \ tt_int_op(r, OP_GE, -1); \ tt_int_op(r, OP_LE, 1); \ @@ -897,11 +869,6 @@ test_addr_ip6_helpers(void *arg) #define TEST_ADDR_PORT_LOOKUP_FMT(addr_port_str, expect_family, \ fmt_decorated, expect_str, expect_port) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ - uint16_t port; \ - char buf[TOR_ADDR_BUF_LEN]; \ - const char *sv; \ r = tor_addr_port_lookup(addr_port_str, &addr, &port); \ tt_int_op(r, OP_EQ, 0); \ tt_int_op(tor_addr_family(&addr), OP_EQ, expect_family); \ @@ -918,9 +885,6 @@ test_addr_ip6_helpers(void *arg) */ #define TEST_ADDR_PORT_LOOKUP_XFAIL(bad_str) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ - uint16_t port; \ r = tor_addr_port_lookup(bad_str, &addr, &port); \ tt_int_op(r, OP_EQ, -1); \ tt_assert(tor_addr_is_null(&addr)); \ @@ -939,9 +903,6 @@ test_addr_ip6_helpers(void *arg) */ #define TEST_HOST_PORT_LOOKUP(host_port_str, expect_success_port) \ STMT_BEGIN \ - int r; \ - tor_addr_t addr; \ - uint16_t port; \ r = tor_addr_port_lookup(host_port_str, &addr, &port); \ tt_int_op(r, OP_GE, -1); \ tt_int_op(r, OP_LE, 0); \ @@ -1166,6 +1127,13 @@ test_addr_ip6_helpers(void *arg) static void test_addr_parse(void *arg) { + int r; + tor_addr_t addr; + uint16_t port; + const char *sv; + uint32_t addr32h; + char buf[TOR_ADDR_BUF_LEN]; + (void)arg; /* Correct calls. */ From c3b1a25d46273a730529f6bfd2ee49cbdac5197a Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 5 Sep 2019 17:46:42 -0400 Subject: [PATCH 2/2] Workaround for GCC "note" about "variable tracking size limit" GCC complains that we are using too many variables here, probably because of the sheer number of locals used for our tinytest macros. Eventually we should fix that (see 30968), but this commit just makes the "note" go away by splitting the test function into two. --- src/test/test_addr.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/test/test_addr.c b/src/test/test_addr.c index 1b53bf2739..f99e3be8f5 100644 --- a/src/test/test_addr.c +++ b/src/test/test_addr.c @@ -1123,9 +1123,8 @@ test_addr_ip6_helpers(void *arg) TEST_ADDR_LOOKUP_XFAIL(host_port_str, AF_INET6); \ STMT_END -/** Test tor_addr_parse() and tor_addr_port_parse(). */ static void -test_addr_parse(void *arg) +test_addr_parse_canonical(void *arg) { int r; tor_addr_t addr; @@ -1153,6 +1152,22 @@ test_addr_parse(void *arg) TEST_ADDR_V6_PARSE_CANONICAL("::", 0); TEST_ADDR_V6_PARSE_CANONICAL("2::", 0); TEST_ADDR_V6_PARSE_CANONICAL("11:22:33:44:55:66:77:88", 0); + done: + ; +} + +/** Test tor_addr_parse() and tor_addr_port_parse(). */ +static void +test_addr_parse(void *arg) +{ + int r; + tor_addr_t addr; + uint16_t port; + const char *sv; + uint32_t addr32h; + char buf[TOR_ADDR_BUF_LEN]; + + (void)arg; /* IPv6-mapped IPv4 addresses. Tor doesn't really use these. */ TEST_ADDR_V6_PARSE("11:22:33:44:55:66:1.2.3.4", 0, @@ -1637,6 +1652,7 @@ struct testcase_t addr_tests[] = { ADDR_LEGACY(basic), ADDR_LEGACY(ip6_helpers), ADDR_LEGACY(parse), + ADDR_LEGACY(parse_canonical), { "virtaddr", test_virtaddrmap, 0, NULL, NULL }, { "virtaddr_persist", test_virtaddrmap_persist, TT_FORK, NULL, NULL }, { "localname", test_addr_localname, 0, NULL, NULL },