[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [tor-dev] [PATCH] fix GCC 7 implicit fallthroug warnings
Hello,
On 05/28/2017 11:01 PM, Andreas Stieger wrote:
> __attribute__ ((fallthrough));
It turns out that this may not be as portable as I thought. Instead, the
attached patch adds magic comments recognized by default
-Wimplicit-fallthrough=3 or break, as required.
Andreas
--
Andreas Stieger <astieger@xxxxxxxx>
Project Manager Security
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton,
HRB 21284 (AG Nürnberg)
From 845ff6dbb4fcaff7fc5f5422f33d8d3a99a2a108 Mon Sep 17 00:00:00 2001
From: Andreas Stieger <astieger@xxxxxxxx>
Date: Sun, 28 May 2017 23:49:31 +0200
Subject: [PATCH] Fix GCC 7 -Wimplicit-fallthrough warnings
Add magic comments recognized by default -Wimplicit-fallthrough=3
or break, as required.
---
src/ext/csiphash.c | 14 +++++++-------
src/ext/ed25519/donna/modm-donna-64bit.h | 24 ++++++++++++------------
src/or/buffers.c | 1 +
src/or/connection_edge.c | 1 +
src/or/dns.c | 1 +
src/or/relay.c | 1 +
6 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/src/ext/csiphash.c b/src/ext/csiphash.c
index 1029bbbad..508e4f6ce 100644
--- a/src/ext/csiphash.c
+++ b/src/ext/csiphash.c
@@ -88,13 +88,13 @@ uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *k
}
switch (src_sz - blocks) {
- case 7: last7 |= (uint64_t)m[i + 6] << 48;
- case 6: last7 |= (uint64_t)m[i + 5] << 40;
- case 5: last7 |= (uint64_t)m[i + 4] << 32;
- case 4: last7 |= (uint64_t)m[i + 3] << 24;
- case 3: last7 |= (uint64_t)m[i + 2] << 16;
- case 2: last7 |= (uint64_t)m[i + 1] << 8;
- case 1: last7 |= (uint64_t)m[i + 0] ;
+ case 7: last7 |= (uint64_t)m[i + 6] << 48; /* Falls through. */
+ case 6: last7 |= (uint64_t)m[i + 5] << 40; /* Falls through. */
+ case 5: last7 |= (uint64_t)m[i + 4] << 32; /* Falls through. */
+ case 4: last7 |= (uint64_t)m[i + 3] << 24; /* Falls through. */
+ case 3: last7 |= (uint64_t)m[i + 2] << 16; /* Falls through. */
+ case 2: last7 |= (uint64_t)m[i + 1] << 8; /* Falls through. */
+ case 1: last7 |= (uint64_t)m[i + 0] ; /* Falls through. */
case 0:
default:;
}
diff --git a/src/ext/ed25519/donna/modm-donna-64bit.h b/src/ext/ed25519/donna/modm-donna-64bit.h
index 012ea9ea0..06c98e303 100644
--- a/src/ext/ed25519/donna/modm-donna-64bit.h
+++ b/src/ext/ed25519/donna/modm-donna-64bit.h
@@ -294,10 +294,10 @@ sub256_modm_batch(bignum256modm out, const bignum256modm a, const bignum256modm
size_t i = 0;
bignum256modm_element_t carry = 0;
switch (limbsize) {
- case 4: out[i] = (a[i] - b[i]) ; carry = (out[i] >> 63); out[i] &= 0xffffffffffffff; i++;
- case 3: out[i] = (a[i] - b[i]) - carry; carry = (out[i] >> 63); out[i] &= 0xffffffffffffff; i++;
- case 2: out[i] = (a[i] - b[i]) - carry; carry = (out[i] >> 63); out[i] &= 0xffffffffffffff; i++;
- case 1: out[i] = (a[i] - b[i]) - carry; carry = (out[i] >> 63); out[i] &= 0xffffffffffffff; i++;
+ case 4: out[i] = (a[i] - b[i]) ; carry = (out[i] >> 63); out[i] &= 0xffffffffffffff; i++; /* Falls through. */
+ case 3: out[i] = (a[i] - b[i]) - carry; carry = (out[i] >> 63); out[i] &= 0xffffffffffffff; i++; /* Falls through. */
+ case 2: out[i] = (a[i] - b[i]) - carry; carry = (out[i] >> 63); out[i] &= 0xffffffffffffff; i++; /* Falls through. */
+ case 1: out[i] = (a[i] - b[i]) - carry; carry = (out[i] >> 63); out[i] &= 0xffffffffffffff; i++; /* Falls through. */
case 0:
default: out[i] = (a[i] - b[i]) - carry;
}
@@ -310,10 +310,10 @@ lt256_modm_batch(const bignum256modm a, const bignum256modm b, size_t limbsize)
size_t i = 0;
bignum256modm_element_t t, carry = 0;
switch (limbsize) {
- case 4: t = (a[i] - b[i]) ; carry = (t >> 63); i++;
- case 3: t = (a[i] - b[i]) - carry; carry = (t >> 63); i++;
- case 2: t = (a[i] - b[i]) - carry; carry = (t >> 63); i++;
- case 1: t = (a[i] - b[i]) - carry; carry = (t >> 63); i++;
+ case 4: t = (a[i] - b[i]) ; carry = (t >> 63); i++; /* Falls through. */
+ case 3: t = (a[i] - b[i]) - carry; carry = (t >> 63); i++; /* Falls through. */
+ case 2: t = (a[i] - b[i]) - carry; carry = (t >> 63); i++; /* Falls through. */
+ case 1: t = (a[i] - b[i]) - carry; carry = (t >> 63); i++; /* Falls through. */
case 0: t = (a[i] - b[i]) - carry; carry = (t >> 63);
}
return (int)carry;
@@ -325,10 +325,10 @@ lte256_modm_batch(const bignum256modm a, const bignum256modm b, size_t limbsize)
size_t i = 0;
bignum256modm_element_t t, carry = 0;
switch (limbsize) {
- case 4: t = (b[i] - a[i]) ; carry = (t >> 63); i++;
- case 3: t = (b[i] - a[i]) - carry; carry = (t >> 63); i++;
- case 2: t = (b[i] - a[i]) - carry; carry = (t >> 63); i++;
- case 1: t = (b[i] - a[i]) - carry; carry = (t >> 63); i++;
+ case 4: t = (b[i] - a[i]) ; carry = (t >> 63); i++; /* Falls through. */
+ case 3: t = (b[i] - a[i]) - carry; carry = (t >> 63); i++; /* Falls through. */
+ case 2: t = (b[i] - a[i]) - carry; carry = (t >> 63); i++; /* Falls through. */
+ case 1: t = (b[i] - a[i]) - carry; carry = (t >> 63); i++; /* Falls through. */
case 0: t = (b[i] - a[i]) - carry; carry = (t >> 63);
}
return (int)!carry;
diff --git a/src/or/buffers.c b/src/or/buffers.c
index 58cfdeee8..3692ed4d0 100644
--- a/src/or/buffers.c
+++ b/src/or/buffers.c
@@ -1715,6 +1715,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
return -1;
}
tor_assert(0);
+ break;
case 4: { /* socks4 */
enum {socks4, socks4a} socks4_prot = socks4a;
const char *authstart, *authend;
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index fd9c97bd3..fc1b2c3bb 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -261,6 +261,7 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
}
/* Fall through if the connection is on a circuit without optimistic
* data support. */
+ /* Falls through. */
case EXIT_CONN_STATE_CONNECTING:
case AP_CONN_STATE_RENDDESC_WAIT:
case AP_CONN_STATE_CIRCUIT_WAIT:
diff --git a/src/or/dns.c b/src/or/dns.c
index 8a40a70d7..98b684c90 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -523,6 +523,7 @@ send_resolved_cell,(edge_connection_t *conn, uint8_t answer_type,
answer_type = RESOLVED_TYPE_ERROR;
/* fall through. */
}
+ /* Falls through. */
case RESOLVED_TYPE_ERROR_TRANSIENT:
case RESOLVED_TYPE_ERROR:
{
diff --git a/src/or/relay.c b/src/or/relay.c
index 7082002f8..c119c3df1 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -994,6 +994,7 @@ connection_ap_process_end_not_open(
break; /* break means it'll close, below */
/* Else fall through: expire this circuit, clear the
* chosen_exit_name field, and try again. */
+ /* Falls through. */
case END_STREAM_REASON_RESOLVEFAILED:
case END_STREAM_REASON_TIMEOUT:
case END_STREAM_REASON_MISC:
--
2.13.0
_______________________________________________
tor-dev mailing list
tor-dev@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-dev