]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Test_cel: Fails when DONT_OPTIMIZE is off
authorChris-Savinovich <csavinovich@digium.com>
Tue, 22 Jan 2019 17:48:57 +0000 (11:48 -0600)
committerChris-Savinovich <csavinovich@digium.com>
Tue, 22 Jan 2019 21:54:12 +0000 (15:54 -0600)
A bug in GCC causes TEST_CEL to return
failure under the following conditions:
1. TEST_FRAMEWORK on
2. DONT_OPTIMIZE off
3. Fedora and Ubuntu
4. GCC 8.2.1
5. Test name: test_cel_dial_pickup
6. There must exist a certain combination of multithreading.
The bug affects arithmetic calculations when the optimization level
is bigger than O1 and the -fpartial-inline flag is on. Provided these
conditions, function ast_str_to_lower() fails to convert to lower case
due to said function being of type force_inline.  The solution is to
remove the "force_inline" type declaration from function ast_str_to_lower()
Change-Id: Ied32e0071f12ed9d5f3b4cdd878b2532a1c769d7

include/asterisk/strings.h
main/strings.c

index 85393b4f95995d07532dca839cd9218764ec9797..2d66716cd33dea2d77ad216ae3e8486200749d19 100644 (file)
@@ -1257,19 +1257,7 @@ static force_inline int attribute_pure ast_str_case_hash(const char *str)
  *
  * \retval str for convenience
  */
-static force_inline char *attribute_pure ast_str_to_lower(char *str)
-{
-       char *str_orig = str;
-       if (!str) {
-               return str;
-       }
-
-       for (; *str; ++str) {
-               *str = tolower(*str);
-       }
-
-       return str_orig;
-}
+char *attribute_pure ast_str_to_lower(char *str);
 
 /*!
  * \brief Convert a string to all upper-case
index 8102c3e9d0245d726de5fd9f9c22552d04fe4065..43fbca4aa935a23354a4849ef813704ca641d0b1 100644 (file)
@@ -391,3 +391,17 @@ char *ast_read_line_from_buffer(char **buffer)
 
        return start;
 }
+
+char *attribute_pure ast_str_to_lower(char *str)
+{
+       char *str_orig = str;
+       if (!str) {
+               return str;
+       }
+
+       for (; *str; ++str) {
+               *str = tolower(*str);
+       }
+
+       return str_orig;
+}