Просмотр исходного кода

Merge branch 'MattHuangGarmin-master' into leethomason/fallthrough

Lee Thomason 3 месяцев назад
Родитель
Сommit
888bbb912a
1 измененных файлов с 42 добавлено и 3 удалено
  1. 42 3
      tinyxml2.cpp

+ 42 - 3
tinyxml2.cpp

@@ -32,6 +32,45 @@ distribution.
 #   include <cstdarg>
 #endif
 
+// Handle fallthrough attribute for different compilers
+#ifndef __has_attribute
+#   define __has_attribute(x) 0
+#endif
+#ifdef __cplusplus
+#   ifndef __has_cpp_attribute
+#      define __has_cpp_attribute(x) 0
+#   endif
+#else
+#   ifndef __has_c_attribute
+#      define __has_c_attribute(x) 0
+#   endif
+#endif
+
+#ifdef __cplusplus
+#   if defined(_MSC_VER)
+#      define TIXML_FALLTHROUGH (void(0))
+#   elif (__cplusplus >= 201703L && __has_cpp_attribute(fallthrough))
+#      define TIXML_FALLTHROUGH [[fallthrough]]
+#   elif __has_cpp_attribute(clang::fallthrough)
+#      define TIXML_FALLTHROUGH [[clang::fallthrough]]
+#   elif __has_attribute(fallthrough)
+#      define TIXML_FALLTHROUGH __attribute__((fallthrough))
+#   else
+#      define TIXML_FALLTHROUGH (void(0))
+#   endif
+#else
+#   if defined(_MSC_VER)
+#      define TIXML_FALLTHROUGH (void(0))
+#   elif __has_c_attribute(fallthrough)
+#      define TIXML_FALLTHROUGH [[fallthrough]]
+#   elif __has_attribute(fallthrough)
+#      define TIXML_FALLTHROUGH __attribute__((fallthrough))
+#   else
+#      define TIXML_FALLTHROUGH (void(0))
+#   endif
+#endif
+
+
 #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) && (!defined WINCE)
 	// Microsoft Visual Studio, version 2005 and higher. Not WinCE.
 	/*int _snprintf_s(
@@ -446,17 +485,17 @@ void XMLUtil::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length
             --output;
             *output = static_cast<char>((input | BYTE_MARK) & BYTE_MASK);
             input >>= 6;
-            //fall through
+            TIXML_FALLTHROUGH;
         case 3:
             --output;
             *output = static_cast<char>((input | BYTE_MARK) & BYTE_MASK);
             input >>= 6;
-            //fall through
+            TIXML_FALLTHROUGH;
         case 2:
             --output;
             *output = static_cast<char>((input | BYTE_MARK) & BYTE_MASK);
             input >>= 6;
-            //fall through
+            TIXML_FALLTHROUGH;
         case 1:
             --output;
             *output = static_cast<char>(input | FIRST_BYTE_MARK[*length]);