summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Huston <shuston@riverace.com>2022-03-16 20:02:16 -0400
committerSteve Huston <shuston@riverace.com>2022-03-16 20:02:16 -0400
commit6397aab352c1f7758c28131edec921ece3f6819b (patch)
tree9259714ac343a6b59b39d5009d05b22b2686af16
parent26f1f548344a84cddff4e8f8a967a8704cfd2c10 (diff)
downloadATCD-6397aab352c1f7758c28131edec921ece3f6819b.tar.gz
Add ACE_FALLTHROUGH macro that adjusts to c++17 or earlier
-rw-r--r--ACE/ace/ACE.cpp6
-rw-r--r--ACE/ace/CDR_Base.cpp8
-rw-r--r--ACE/ace/Name_Proxy.cpp4
-rw-r--r--ACE/ace/OS_NS_unistd.cpp2
-rw-r--r--ACE/ace/config-g++-common.h9
-rw-r--r--ACE/ace/config-macros.h11
6 files changed, 30 insertions, 10 deletions
diff --git a/ACE/ace/ACE.cpp b/ACE/ace/ACE.cpp
index fc820891251..7d48c80ee69 100644
--- a/ACE/ace/ACE.cpp
+++ b/ACE/ace/ACE.cpp
@@ -2197,11 +2197,11 @@ ACE::handle_ready (ACE_HANDLE handle,
{
case 0: // Timer expired.
errno = ETIME;
- /* FALLTHRU */
+ ACE_FALLTHROUGH;
case -1: // we got here directly - select() returned -1.
return -1;
case 1: // Handle has data.
- /* FALLTHRU */
+ ACE_FALLTHROUGH;
default: // default is case result > 0; return a
// ACE_ASSERT (result == 1);
return result;
@@ -2767,7 +2767,7 @@ ACE::fork (const ACE_TCHAR *program_name,
return 0;
case -1: // assumes all errnos are < 256
ACE_OS::_exit (errno);
- [[fallthrough]]; // gcc sees this as a fallthrough
+ ACE_FALLTHROUGH; // gcc sees this as a fallthrough
default: // child terminates, orphaning grandchild
ACE_OS::_exit (0);
}
diff --git a/ACE/ace/CDR_Base.cpp b/ACE/ace/CDR_Base.cpp
index 0dda825809e..204bcc7ea30 100644
--- a/ACE/ace/CDR_Base.cpp
+++ b/ACE/ace/CDR_Base.cpp
@@ -239,12 +239,12 @@ ACE_CDR::swap_2_array (char const * orig, char* target, size_t n)
ACE_CDR::swap_2 (orig, target);
orig += 2;
target += 2;
- [[fallthrough]];
+ ACE_FALLTHROUGH;
case 2:
ACE_CDR::swap_2 (orig, target);
orig += 2;
target += 2;
- [[fallthrough]];
+ ACE_FALLTHROUGH;
case 1:
ACE_CDR::swap_2 (orig, target);
}
@@ -445,12 +445,12 @@ ACE_CDR::swap_4_array (char const * orig, char* target, size_t n)
ACE_CDR::swap_4 (orig, target);
orig += 4;
target += 4;
- [[fallthrough]];
+ ACE_FALLTHROUGH;
case 2:
ACE_CDR::swap_4 (orig, target);
orig += 4;
target += 4;
- [[fallthrough]];
+ ACE_FALLTHROUGH;
case 1:
ACE_CDR::swap_4 (orig, target);
}
diff --git a/ACE/ace/Name_Proxy.cpp b/ACE/ace/Name_Proxy.cpp
index 94cd1c9b584..3e4a676e4b0 100644
--- a/ACE/ace/Name_Proxy.cpp
+++ b/ACE/ace/Name_Proxy.cpp
@@ -151,14 +151,14 @@ ACE_Name_Proxy::recv_reply (ACE_Name_Request &reply)
case -1:
ACELIB_DEBUG ((LM_DEBUG,
ACE_TEXT ("****************** recv_reply returned -1\n")));
- [[fallthrough]];
+ ACE_FALLTHROUGH;
default:
ACELIB_ERROR ((LM_ERROR,
ACE_TEXT ("%p got %d bytes, expected %d bytes\n"),
ACE_TEXT ("recv failed"),
n,
sizeof (ACE_UINT32)));
- [[fallthrough]];
+ ACE_FALLTHROUGH;
case 0:
// We've shutdown unexpectedly
return -1;
diff --git a/ACE/ace/OS_NS_unistd.cpp b/ACE/ace/OS_NS_unistd.cpp
index 4dc8ea1663d..b2ff267171a 100644
--- a/ACE/ace/OS_NS_unistd.cpp
+++ b/ACE/ace/OS_NS_unistd.cpp
@@ -350,7 +350,7 @@ ACE_OS::fork_exec (ACE_TCHAR *argv[])
// If the execv fails, this child needs to exit.
ACE_OS::exit (errno);
}
- [[ fallthrough ]];
+ ACE_FALLTHROUGH;
# endif /* ACE_HAS_WCHAR */
default:
diff --git a/ACE/ace/config-g++-common.h b/ACE/ace/config-g++-common.h
index c01b73f70c6..be8714daf15 100644
--- a/ACE/ace/config-g++-common.h
+++ b/ACE/ace/config-g++-common.h
@@ -38,6 +38,15 @@
# if __cplusplus > 199711L
# define ACE_HAS_CPP11
# endif
+# if __cplusplus >= 201402L
+# define ACE_HAS_CPP14
+# endif
+# if __cplusplus >= 201703L
+# define ACE_HAS_CPP17
+# endif
+# if __cplusplus >= 202002L
+# define ACE_HAS_CPP20
+# endif
#endif
#if (defined (i386) || defined (__i386__)) && !defined (ACE_SIZEOF_LONG_DOUBLE)
diff --git a/ACE/ace/config-macros.h b/ACE/ace/config-macros.h
index 22b544286ca..5f948b679ed 100644
--- a/ACE/ace/config-macros.h
+++ b/ACE/ace/config-macros.h
@@ -246,6 +246,17 @@
# define ACE_NOTREACHED(a) a
#endif /* ghs || ..... */
+
+// Compiler-specific configs can define ACE_FALLTHROUGH but if not,
+// and it's a C++17 or hgher compiler, use the defined mechanism.
+#if !defined ACE_FALLTHROUGH
+# if defined ACE_HAS_CPP17
+# define ACE_FALLTHROUGH [[fallthrough]]
+# else
+# define ACE_FALLTHROUGH
+# endif /* ACE_HAS_CPP17 */
+#endif /* ACE_FALLTHROUGH */
+
// ============================================================================
// ACE_ALLOC_HOOK* macros
//