Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package vectorscan for openSUSE:Factory 
checked in at 2023-04-07 18:17:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/vectorscan (Old)
 and      /work/SRC/openSUSE:Factory/.vectorscan.new.19717 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "vectorscan"

Fri Apr  7 18:17:07 2023 rev:5 rq:1077845 version:5.4.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/vectorscan/vectorscan.changes    2022-11-04 
17:36:27.965280994 +0100
+++ /work/SRC/openSUSE:Factory/.vectorscan.new.19717/vectorscan.changes 
2023-04-07 18:17:16.256871913 +0200
@@ -1,0 +2,14 @@
+Thu Apr  6 10:18:17 UTC 2023 - Guillaume GARDET <guillaume.gar...@opensuse.org>
+
+- Update to 5.4.9:
+  * Major change: Enable SVE & SVE2 builds and make it a
+    supported architecture! (thanks to @abondarev84)
+  * Fix various clang-related bugs
+  * Fix Aarch64 bug in Parser.rl because of char signedness.
+    Make unsigned char the default in the Parser for all architectures.
+  * Fix Power bug, multiple tests were failing.
+  * C++20 related change, use prefixed assume_aligned to avoid
+    conflict with C++20 std::assume_aligned.
+
+
+-------------------------------------------------------------------

Old:
----
  vectorscan-5.4.8.tar.gz

New:
----
  vectorscan-5.4.9.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ vectorscan.spec ++++++
--- /var/tmp/diff_new_pack.oOOwsQ/_old  2023-04-07 18:17:16.780874931 +0200
+++ /var/tmp/diff_new_pack.oOOwsQ/_new  2023-04-07 18:17:16.784874954 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package vectorscan
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -21,7 +21,7 @@
 %define so_suffix -vectorscan
 
 Name:           vectorscan
-Version:        5.4.8
+Version:        5.4.9
 Release:        0
 Summary:        Regular expression matching library
 License:        BSD-3-Clause

++++++ vectorscan-5.4.8.tar.gz -> vectorscan-5.4.9.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vectorscan-vectorscan-5.4.8/CMakeLists.txt 
new/vectorscan-vectorscan-5.4.9/CMakeLists.txt
--- old/vectorscan-vectorscan-5.4.8/CMakeLists.txt      2022-09-13 
14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/CMakeLists.txt      2023-03-23 
15:11:37.000000000 +0100
@@ -1,9 +1,10 @@
-cmake_minimum_required (VERSION 2.8.11)
+cmake_minimum_required (VERSION 2.8.12)
+
 project (vectorscan C CXX)
 
 set (HS_MAJOR_VERSION 5)
 set (HS_MINOR_VERSION 4)
-set (HS_PATCH_VERSION 8)
+set (HS_PATCH_VERSION 9)
 set (HS_VERSION ${HS_MAJOR_VERSION}.${HS_MINOR_VERSION}.${HS_PATCH_VERSION})
 
 set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
@@ -165,27 +166,49 @@
     # cpuid info and then chooses the best microarch it can (and replaces
     # the flag), so use that for tune.
 
+    set(TUNE_FLAG "mtune")
+    set(GNUCC_TUNE "")
+    message(STATUS "ARCH_FLAG '${ARCH_FLAG}' '${GNUCC_ARCH}', TUNE_FLAG 
'${TUNE_FLAG}' '${GNUCC_TUNE}' ")
+
     # arg1 might exist if using ccache
     string (STRIP "${CMAKE_C_COMPILER_ARG1}" CC_ARG1)
-    set (EXEC_ARGS ${CC_ARG1} -c -Q --help=target -${ARCH_FLAG}=native 
-mtune=native)
+    set (EXEC_ARGS ${CC_ARG1} -c -Q --help=target -${ARCH_FLAG}=native 
-${TUNE_FLAG}=native)
     execute_process(COMMAND ${CMAKE_C_COMPILER} ${EXEC_ARGS}
         OUTPUT_VARIABLE _GCC_OUTPUT)
-    string(FIND "${_GCC_OUTPUT}" "${ARCH_FLAG}" POS)
+    set(_GCC_OUTPUT_TUNE ${_GCC_OUTPUT})
+    string(FIND "${_GCC_OUTPUT}" "${ARCH_FLAG}=" POS)
     string(SUBSTRING "${_GCC_OUTPUT}" ${POS} -1 _GCC_OUTPUT)
     string(REGEX REPLACE "${ARCH_FLAG}=[ \t]*([^ \n]*)[ \n].*" "\\1" 
GNUCC_ARCH "${_GCC_OUTPUT}")
 
+    string(FIND "${_GCC_OUTPUT_TUNE}" "${TUNE_FLAG}=" POS_TUNE)
+    string(SUBSTRING "${_GCC_OUTPUT_TUNE}" ${POS_TUNE} -1 _GCC_OUTPUT_TUNE)
+    string(REGEX REPLACE "${TUNE_FLAG}=[ \t]*([^ \n]*)[ \n].*" "\\1" 
GNUCC_TUNE "${_GCC_OUTPUT_TUNE}")
+
+    string(FIND "${GNUCC_ARCH}" "sve" POS_SVE)
+    string(FIND "${GNUCC_ARCH}" "sve2" POS_SVE2)
+    string(FIND "${GNUCC_ARCH}" "sve2-bitperm" POS_SVE2_BITPERM)
+    if (NOT POS_SVE EQUAL 0)
+        set(SVE_FOUND 1)
+    elseif(NOT POS_SVE2 EQUAL 0)
+        set(SVE2_FOUND 1)
+    elseif(NOT POS_SVE2_BITPERM EQUAL 0)
+        set(SVE2_BITPERM_FOUND 1)
+    endif()
+
+    message(STATUS "ARCH_FLAG '${ARCH_FLAG}' '${GNUCC_ARCH}', TUNE_FLAG 
'${TUNE_FLAG}' '${GNUCC_TUNE}' ")
+
     # test the parsed flag
-    set (EXEC_ARGS ${CC_ARG1} -E - -mtune=${GNUCC_ARCH})
+    set (EXEC_ARGS ${CC_ARG1} -E - -${ARCH_FLAG}=${GNUCC_ARCH} 
-${TUNE_FLAG}=${GNUCC_TUNE})
     execute_process(COMMAND ${CMAKE_C_COMPILER} ${EXEC_ARGS}
         OUTPUT_QUIET ERROR_QUIET
         INPUT_FILE /dev/null
         RESULT_VARIABLE GNUCC_TUNE_TEST)
     if (NOT GNUCC_TUNE_TEST EQUAL 0)
-        message(WARNING "Something went wrong determining gcc tune: 
-mtune=${GNUCC_ARCH} not valid, falling back to -mtune=native")
-        set(TUNE_FLAG native)
+        message(WARNING "Something went wrong determining gcc tune: 
-mtune=${GNUCC_TUNE} not valid, falling back to -mtune=native")
+        set(GNUCC_TUNE native)
     else()
-        set(TUNE_FLAG ${GNUCC_ARCH})
-        message(STATUS "gcc will tune for ${GNUCC_ARCH}, ${TUNE_FLAG}")
+        set(GNUCC_TUNE ${GNUCC_TUNE})
+        message(STATUS "gcc will tune for ${GNUCC_ARCH}, ${GNUCC_TUNE}")
     endif()
 elseif (CMAKE_COMPILER_IS_CLANG AND NOT CROSS_COMPILE)
     if (ARCH_IA32 OR ARCH_X86_64)
@@ -226,22 +249,26 @@
 endif()
 
 if (ARCH_AARCH64)
-    if (BUILD_SVE2_BITPERM)
+    if (BUILD_SVE2_BITPERM AND NOT SVE2_BITPERM_FOUND)
         set(GNUCC_ARCH "${GNUCC_ARCH}+sve2-bitperm")
-    elseif (BUILD_SVE2)
+    elseif (BUILD_SVE2 AND NOT SVE2_FOUND)
         set(GNUCC_ARCH "${GNUCC_ARCH}+sve2")
-    elseif (BUILD_SVE)
+    elseif (BUILD_SVE AND NOT SVE_FOUND)
         set(GNUCC_ARCH "${GNUCC_ARCH}+sve")
     endif ()
 endif(ARCH_AARCH64)
 
-
 message(STATUS "ARCH_C_FLAGS   : ${ARCH_C_FLAGS}")
 message(STATUS "ARCH_CXX_FLAGS : ${ARCH_CXX_FLAGS}")
 
 if (NOT FAT_RUNTIME)
-    set(ARCH_C_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -mtune=${TUNE_FLAG} 
${ARCH_C_FLAGS}")
-    set(ARCH_CXX_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -mtune=${TUNE_FLAG} 
${ARCH_CXX_FLAGS}")
+    if (GNUCC_TUNE)
+        set(ARCH_C_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} 
-${TUNE_FLAG}=${GNUCC_TUNE}")
+        set(ARCH_CXX_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} 
-${TUNE_FLAG}=${GNUCC_TUNE}")
+    else()
+        set(ARCH_C_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -mtune=${TUNE_FLAG} 
${ARCH_C_FLAGS}")
+        set(ARCH_CXX_FLAGS "-${ARCH_FLAG}=${GNUCC_ARCH} -mtune=${TUNE_FLAG} 
${ARCH_CXX_FLAGS}")
+    endif()
 endif()
 
 #if (ARCH_IA32 OR ARCH_X86_64 OR ARCH_ARM32 OR ARCH_AARCH64)
@@ -296,6 +323,12 @@
     # release builds
     set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Werror")
     set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -Werror")
+    if (CMAKE_COMPILER_IS_CLANG)
+       if (CMAKE_C_COMPILER_VERSION VERSION_GREATER "13.0")
+           set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -Wno-unused-but-set-variable")
+           set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} 
-Wno-unused-but-set-variable")
+        endif()
+    endif()
 endif()
 
 if (DISABLE_ASSERTS)
@@ -332,6 +365,7 @@
 elseif (ARCH_ARM32 OR ARCH_AARCH64)
   CHECK_INCLUDE_FILE_CXX(arm_neon.h HAVE_C_ARM_NEON_H)
   if (BUILD_SVE OR BUILD_SVE2 OR BUILD_SVE2_BITPERM)
+    set(CMAKE_REQUIRED_FLAGS ${ARCH_CXX_FLAGS})
     CHECK_INCLUDE_FILE_CXX(arm_sve.h HAVE_C_ARM_SVE_H)
     if (NOT HAVE_C_ARM_SVE_H)
       message(FATAL_ERROR "arm_sve.h is required to build for SVE.")
@@ -510,7 +544,6 @@
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ARCH_C_FLAGS}")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_CXX_FLAGS}")
 
-add_subdirectory(util)
 add_subdirectory(doc/dev-reference)
 
 # PCRE check, we have a fixed requirement for PCRE to use Chimera
@@ -554,7 +587,7 @@
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}")
 endif()
 
-set(RAGEL_C_FLAGS "-Wno-unused")
+set(RAGEL_C_FLAGS "-Wno-unused -funsigned-char")
 
 set_source_files_properties(
     ${CMAKE_BINARY_DIR}/src/parser/Parser.cpp
@@ -570,6 +603,8 @@
 
 ragelmaker(src/parser/control_verbs.rl)
 
+add_subdirectory(util)
+
 SET(hs_HEADERS
     src/hs.h
     src/hs_common.h
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vectorscan-vectorscan-5.4.8/Jenkinsfile 
new/vectorscan-vectorscan-5.4.9/Jenkinsfile
--- old/vectorscan-vectorscan-5.4.8/Jenkinsfile 2022-09-13 14:57:08.000000000 
+0200
+++ new/vectorscan-vectorscan-5.4.9/Jenkinsfile 2023-03-23 15:11:37.000000000 
+0100
@@ -303,8 +303,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 
'build-clang-release-SSE', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'-DBUILD_AVX2=no -DBUILD_AVX512=no -DFAT_RUNTIME=no', installation: 
'InSearchPath', steps: [[envVars: 'CC=clang CXX=clang++', args: '--parallel 4', 
withCmake: true]]
+                                cmakeBuild buildDir: 
'build-clang-release-SSE', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'-DBUILD_AVX2=no -DBUILD_AVX512=no -DFAT_RUNTIME=no', installation: 
'InSearchPath', steps: [[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Unit Test") {
@@ -328,8 +332,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 
'build-clang-release-AVX2', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'-DBUILD_AVX2=yes -DBUILD_AVX512=no -DFAT_RUNTIME=no', installation: 
'InSearchPath', steps: [[envVars: 'CC=clang CXX=clang++', args: '--parallel 4', 
withCmake: true]]
+                                cmakeBuild buildDir: 
'build-clang-release-AVX2', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'-DBUILD_AVX2=yes -DBUILD_AVX512=no -DFAT_RUNTIME=no', installation: 
'InSearchPath', steps: [[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Unit Test") {
@@ -353,8 +361,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 
'build-clang-release-AVX512', buildType: 'Release', cleanBuild: true, 
cmakeArgs: '-DBUILD_AVX2=yes -DBUILD_AVX512=yes -DFAT_RUNTIME=no', 
installation: 'InSearchPath', steps: [[envVars: 'CC=clang CXX=clang++', args: 
'--parallel 4', withCmake: true]]
+                                cmakeBuild buildDir: 
'build-clang-release-AVX512', buildType: 'Release', cleanBuild: true, 
cmakeArgs: '-DBUILD_AVX2=yes -DBUILD_AVX512=yes -DFAT_RUNTIME=no', 
installation: 'InSearchPath', steps: [[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Unit Test") {
@@ -378,8 +390,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 
'build-clang-release-fat', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'-DBUILD_AVX2=yes -DBUILD_AVX512=yes -DFAT_RUNTIME=yes', installation: 
'InSearchPath', steps: [[envVars: 'CC=clang CXX=clang++', args: '--parallel 4', 
withCmake: true]]
+                                cmakeBuild buildDir: 
'build-clang-release-fat', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'-DBUILD_AVX2=yes -DBUILD_AVX512=yes -DFAT_RUNTIME=yes', installation: 
'InSearchPath', steps: [[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Test") {
@@ -398,8 +414,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 'build-clang-debug-SSE', 
buildType: 'Debug', cleanBuild: true, cmakeArgs: '-DBUILD_AVX2=no 
-DBUILD_AVX512=no -DFAT_RUNTIME=no', installation: 'InSearchPath', steps: 
[[envVars: 'CC=clang CXX=clang++', args: '--parallel 4', withCmake: true]]
+                                cmakeBuild buildDir: 'build-clang-debug-SSE', 
buildType: 'Debug', cleanBuild: true, cmakeArgs: '-DBUILD_AVX2=no 
-DBUILD_AVX512=no -DFAT_RUNTIME=no', installation: 'InSearchPath', steps: 
[[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Unit Test") {
@@ -423,8 +443,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 'build-clang-debug-AVX2', 
buildType: 'Debug', cleanBuild: true, cmakeArgs: '-DBUILD_AVX2=yes 
-DBUILD_AVX512=no -DFAT_RUNTIME=no', installation: 'InSearchPath', steps: 
[[envVars: 'CC=clang CXX=clang++', args: '--parallel 4', withCmake: true]]
+                                cmakeBuild buildDir: 'build-clang-debug-AVX2', 
buildType: 'Debug', cleanBuild: true, cmakeArgs: '-DBUILD_AVX2=yes 
-DBUILD_AVX512=no -DFAT_RUNTIME=no', installation: 'InSearchPath', steps: 
[[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Unit Test") {
@@ -448,8 +472,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 
'build-clang-debug-AVX512', buildType: 'Debug', cleanBuild: true, cmakeArgs: 
'-DBUILD_AVX2=yes -DBUILD_AVX512=yes -DFAT_RUNTIME=no', installation: 
'InSearchPath', steps: [[envVars: 'CC=clang CXX=clang++', args: '--parallel 4', 
withCmake: true]]
+                                cmakeBuild buildDir: 
'build-clang-debug-AVX512', buildType: 'Debug', cleanBuild: true, cmakeArgs: 
'-DBUILD_AVX2=yes -DBUILD_AVX512=yes -DFAT_RUNTIME=no', installation: 
'InSearchPath', steps: [[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Unit Test") {
@@ -473,8 +501,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 'build-clang-debug-fat', 
buildType: 'Debug', cleanBuild: true, cmakeArgs: '-DBUILD_AVX2=yes 
-DBUILD_AVX512=yes -DFAT_RUNTIME=yes', installation: 'InSearchPath', steps: 
[[envVars: 'CC=clang CXX=clang++', args: '--parallel 4', withCmake: true]]
+                                cmakeBuild buildDir: 'build-clang-debug-fat', 
buildType: 'Debug', cleanBuild: true, cmakeArgs: '-DBUILD_AVX2=yes 
-DBUILD_AVX512=yes -DFAT_RUNTIME=yes', installation: 'InSearchPath', steps: 
[[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Test") {
@@ -493,8 +525,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 
'build-clang-release-arm', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'', installation: 'InSearchPath', steps: [[envVars: 'CC=clang CXX=clang++', 
args: '--parallel 4', withCmake: true]]
+                                cmakeBuild buildDir: 
'build-clang-release-arm', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'', installation: 'InSearchPath', steps: [[args: '--parallel 4', withCmake: 
true]]
                             }
                         }
                         stage("Unit Test") {
@@ -518,8 +554,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 'build-clang-debug-arm', 
buildType: 'Debug', cleanBuild: true, cmakeArgs: '', installation: 
'InSearchPath', steps: [[envVars: 'CC=clang CXX=clang++', args: '--parallel 4', 
withCmake: true]]
+                                cmakeBuild buildDir: 'build-clang-debug-arm', 
buildType: 'Debug', cleanBuild: true, cmakeArgs: '', installation: 
'InSearchPath', steps: [[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Unit Test") {
@@ -543,8 +583,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 
'build-clang-release-power', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'', installation: 'InSearchPath', steps: [[envVars: 'CC=clang CXX=clang++', 
args: '--parallel 4', withCmake: true]]
+                                cmakeBuild buildDir: 
'build-clang-release-power', buildType: 'Release', cleanBuild: true, cmakeArgs: 
'', installation: 'InSearchPath', steps: [[args: '--parallel 4', withCmake: 
true]]
                             }
                         }
                         stage("Unit Test") {
@@ -568,8 +612,12 @@
                             }
                         } 
                         stage("Build") {
+                            environment {
+                                CC="clang"
+                                CXX="clang++"
+                            }
                             steps {
-                                cmakeBuild buildDir: 
'build-clang-debug-power', buildType: 'Debug', cleanBuild: true, cmakeArgs: '', 
installation: 'InSearchPath', steps: [[envVars: 'CC=clang CXX=clang++', args: 
'--parallel 4', withCmake: true]]
+                                cmakeBuild buildDir: 
'build-clang-debug-power', buildType: 'Debug', cleanBuild: true, cmakeArgs: '', 
installation: 'InSearchPath', steps: [[args: '--parallel 4', withCmake: true]]
                             }
                         }
                         stage("Unit Test") {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vectorscan-vectorscan-5.4.8/cmake/ragel.cmake 
new/vectorscan-vectorscan-5.4.9/cmake/ragel.cmake
--- old/vectorscan-vectorscan-5.4.8/cmake/ragel.cmake   2022-09-13 
14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/cmake/ragel.cmake   2023-03-23 
15:11:37.000000000 +0100
@@ -7,7 +7,7 @@
     add_custom_command(
         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${src_dir}/${src_file}.cpp
         COMMAND ${CMAKE_COMMAND} -E make_directory 
${CMAKE_CURRENT_BINARY_DIR}/${src_dir}
-        COMMAND ${RAGEL} ${CMAKE_CURRENT_SOURCE_DIR}/${src_rl} -o ${rl_out}
+        COMMAND ${RAGEL} ${CMAKE_CURRENT_SOURCE_DIR}/${src_rl} -o ${rl_out} -G0
         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${src_rl}
         )
     add_custom_target(ragel_${src_file} DEPENDS ${rl_out})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/fdr/teddy_runtime_common.h 
new/vectorscan-vectorscan-5.4.9/src/fdr/teddy_runtime_common.h
--- old/vectorscan-vectorscan-5.4.8/src/fdr/teddy_runtime_common.h      
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/fdr/teddy_runtime_common.h      
2023-03-23 15:11:37.000000000 +0100
@@ -348,7 +348,7 @@
 m512 vectoredLoad512(m512 *p_mask, const u8 *ptr, const size_t start_offset,
                      const u8 *lo, const u8 *hi, const u8 *hbuf, size_t hlen,
                      const u32 nMasks) {
-    m512 val;
+    m512 val = zeroes512();
 
     uintptr_t copy_start;
     uintptr_t copy_len;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vectorscan-vectorscan-5.4.8/src/hs.h 
new/vectorscan-vectorscan-5.4.9/src/hs.h
--- old/vectorscan-vectorscan-5.4.8/src/hs.h    2022-09-13 14:57:08.000000000 
+0200
+++ new/vectorscan-vectorscan-5.4.9/src/hs.h    2023-03-23 15:11:37.000000000 
+0100
@@ -43,7 +43,7 @@
 
 #define HS_MAJOR      5
 #define HS_MINOR      4
-#define HS_PATCH      0
+#define HS_PATCH      9
 
 #include "hs_compile.h"
 #include "hs_runtime.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/nfa/mcclellancompile.cpp 
new/vectorscan-vectorscan-5.4.9/src/nfa/mcclellancompile.cpp
--- old/vectorscan-vectorscan-5.4.8/src/nfa/mcclellancompile.cpp        
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/nfa/mcclellancompile.cpp        
2023-03-23 15:11:37.000000000 +0100
@@ -1484,12 +1484,12 @@
             find_wide_state(info);
         }
 
-        u16 total_daddy = 0;
         bool any_cyclic_near_anchored_state
             = is_cyclic_near(raw, raw.start_anchored);
 
         // Sherman optimization
         if (info.impl_alpha_size > 16) {
+            u16 total_daddy = 0;
             for (u32 i = 0; i < info.size(); i++) {
                 if (info.is_widestate(i)) {
                     continue;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/nfagraph/ng_misc_opt.cpp 
new/vectorscan-vectorscan-5.4.9/src/nfagraph/ng_misc_opt.cpp
--- old/vectorscan-vectorscan-5.4.8/src/nfagraph/ng_misc_opt.cpp        
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/nfagraph/ng_misc_opt.cpp        
2023-03-23 15:11:37.000000000 +0100
@@ -385,8 +385,7 @@
 
     const vector<NFAVertex> ordering = getTopoOrdering(g);
 
-    return enlargeCyclicCR(g, som, ordering)
-        | enlargeCyclicCR_rev(g, ordering);
+    return enlargeCyclicCR(g, som, ordering) || enlargeCyclicCR_rev(g, 
ordering);
 }
 
 /** finds a smaller reachability for a state by the reverse transformation of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vectorscan-vectorscan-5.4.8/src/parser/Parser.rl 
new/vectorscan-vectorscan-5.4.9/src/parser/Parser.rl
--- old/vectorscan-vectorscan-5.4.8/src/parser/Parser.rl        2022-09-13 
14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/parser/Parser.rl        2023-03-23 
15:11:37.000000000 +0100
@@ -272,6 +272,7 @@
 
 %%{
     machine regex;
+    alphtype unsigned char;
 
     action throwUnsupportedEscape {
         ostringstream str;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/parser/control_verbs.rl 
new/vectorscan-vectorscan-5.4.9/src/parser/control_verbs.rl
--- old/vectorscan-vectorscan-5.4.8/src/parser/control_verbs.rl 2022-09-13 
14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/parser/control_verbs.rl 2023-03-23 
15:11:37.000000000 +0100
@@ -54,6 +54,7 @@
 
     %%{
         machine ControlVerbs;
+        alphtype unsigned char;
 
         # Verbs that we recognise but do not support.
         unhandledVerbs = '(*' (
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/rose/rose_build_add.cpp 
new/vectorscan-vectorscan-5.4.9/src/rose/rose_build_add.cpp
--- old/vectorscan-vectorscan-5.4.8/src/rose/rose_build_add.cpp 2022-09-13 
14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/rose/rose_build_add.cpp 2023-03-23 
15:11:37.000000000 +0100
@@ -216,9 +216,9 @@
     const bool fixed_offset_src = g[u].fixedOffset();
     const bool has_bounds = g[e].minBound || (g[e].maxBound != ROSE_BOUND_INF);
 
-    DEBUG_PRINTF("edge %zu->%zu, bounds=[%u,%u], fixed_u=%d, prefix=%d\n",
+    /*DEBUG_PRINTF("edge %zu->%zu, bounds=[%u,%u], fixed_u=%d, prefix=%d\n",
                  g[u].index, g[v].index, g[e].minBound, g[e].maxBound,
-                 (int)g[u].fixedOffset(), (int)g[v].left);
+                 (int)g[u].fixedOffset(), (int)g[v].left);*/
 
     if (g[v].left) {
         // Roles with prefix engines have their history handled by that prefix.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/util/arch/common/simd_utils.h 
new/vectorscan-vectorscan-5.4.9/src/util/arch/common/simd_utils.h
--- old/vectorscan-vectorscan-5.4.8/src/util/arch/common/simd_utils.h   
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/util/arch/common/simd_utils.h   
2023-03-23 15:11:37.000000000 +0100
@@ -254,7 +254,7 @@
 // aligned store
 static really_inline void store256(void *ptr, m256 a) {
     assert(ISALIGNED_N(ptr, alignof(m256)));
-    ptr = assume_aligned(ptr, 16);
+    ptr = vectorscan_assume_aligned(ptr, 16);
     *(m256 *)ptr = a;
 }
 
@@ -486,7 +486,7 @@
 // aligned store
 static really_inline void store384(void *ptr, m384 a) {
     assert(ISALIGNED_16(ptr));
-    ptr = assume_aligned(ptr, 16);
+    ptr = vectorscan_assume_aligned(ptr, 16);
     *(m384 *)ptr = a;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/util/arch/ppc64el/simd_utils.h 
new/vectorscan-vectorscan-5.4.9/src/util/arch/ppc64el/simd_utils.h
--- old/vectorscan-vectorscan-5.4.8/src/util/arch/ppc64el/simd_utils.h  
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/util/arch/ppc64el/simd_utils.h  
2023-03-23 15:11:37.000000000 +0100
@@ -152,7 +152,7 @@
    static uint8x16_t perm = { 16, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 
};
    uint8x16_t bitmask = vec_gb((uint8x16_t) a);
    bitmask = (uint8x16_t) vec_perm(vec_splat_u8(0), bitmask, perm);
-   u32 movemask;
+   u32 ALIGN_ATTR(16) movemask;
    vec_ste((uint32x4_t) bitmask, 0, &movemask);
    return movemask;
 }
@@ -285,27 +285,27 @@
     return a;
 }
 
-#define CASE_ALIGN_VECTORS(a, b, offset)  case offset: return 
(m128)vec_sld((int8x16_t)(b), (int8x16_t)(a), (16 - offset)); break;
+#define CASE_ALIGN_VECTORS(a, b, offset)  case offset: return 
(m128)vec_sld((int8x16_t)(a), (int8x16_t)(b), (16 - offset)); break;
 
 static really_really_inline
 m128 palignr_imm(m128 r, m128 l, int offset) {
     switch (offset) {
     case 0: return l; break;
-    CASE_ALIGN_VECTORS(l, r, 1);
-    CASE_ALIGN_VECTORS(l, r, 2);
-    CASE_ALIGN_VECTORS(l, r, 3);
-    CASE_ALIGN_VECTORS(l, r, 4);
-    CASE_ALIGN_VECTORS(l, r, 5);
-    CASE_ALIGN_VECTORS(l, r, 6);
-    CASE_ALIGN_VECTORS(l, r, 7);
-    CASE_ALIGN_VECTORS(l, r, 8);
-    CASE_ALIGN_VECTORS(l, r, 9);
-    CASE_ALIGN_VECTORS(l, r, 10);
-    CASE_ALIGN_VECTORS(l, r, 11);
-    CASE_ALIGN_VECTORS(l, r, 12);
-    CASE_ALIGN_VECTORS(l, r, 13);
-    CASE_ALIGN_VECTORS(l, r, 14);
-    CASE_ALIGN_VECTORS(l, r, 15);
+    CASE_ALIGN_VECTORS(r, l, 1);
+    CASE_ALIGN_VECTORS(r, l, 2);
+    CASE_ALIGN_VECTORS(r, l, 3);
+    CASE_ALIGN_VECTORS(r, l, 4);
+    CASE_ALIGN_VECTORS(r, l, 5);
+    CASE_ALIGN_VECTORS(r, l, 6);
+    CASE_ALIGN_VECTORS(r, l, 7);
+    CASE_ALIGN_VECTORS(r, l, 8);
+    CASE_ALIGN_VECTORS(r, l, 9);
+    CASE_ALIGN_VECTORS(r, l, 10);
+    CASE_ALIGN_VECTORS(r, l, 11);
+    CASE_ALIGN_VECTORS(r, l, 12);
+    CASE_ALIGN_VECTORS(r, l, 13);
+    CASE_ALIGN_VECTORS(r, l, 14);
+    CASE_ALIGN_VECTORS(r, l, 15);
     case 16: return r; break;
     default: return zeroes128(); break;
     } 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/util/arch/x86/simd_utils.h 
new/vectorscan-vectorscan-5.4.9/src/util/arch/x86/simd_utils.h
--- old/vectorscan-vectorscan-5.4.8/src/util/arch/x86/simd_utils.h      
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/util/arch/x86/simd_utils.h      
2023-03-23 15:11:37.000000000 +0100
@@ -278,14 +278,14 @@
 // aligned load
 static really_inline m128 load128(const void *ptr) {
     assert(ISALIGNED_N(ptr, alignof(m128)));
-    ptr = assume_aligned(ptr, 16);
+    ptr = vectorscan_assume_aligned(ptr, 16);
     return _mm_load_si128((const m128 *)ptr);
 }
 
 // aligned store
 static really_inline void store128(void *ptr, m128 a) {
     assert(ISALIGNED_N(ptr, alignof(m128)));
-    ptr = assume_aligned(ptr, 16);
+    ptr = vectorscan_assume_aligned(ptr, 16);
     *(m128 *)ptr = a;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vectorscan-vectorscan-5.4.8/src/util/simd_utils.h 
new/vectorscan-vectorscan-5.4.9/src/util/simd_utils.h
--- old/vectorscan-vectorscan-5.4.8/src/util/simd_utils.h       2022-09-13 
14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/util/simd_utils.h       2023-03-23 
15:11:37.000000000 +0100
@@ -40,17 +40,17 @@
 // it's available. Note that we need to handle C or C++ compilation.
 #ifdef __cplusplus
 #  ifdef HAVE_CXX_BUILTIN_ASSUME_ALIGNED
-#    define assume_aligned(x, y) __builtin_assume_aligned((x), (y))
+#    define vectorscan_assume_aligned(x, y) __builtin_assume_aligned((x), (y))
 #  endif
 #else
 #  ifdef HAVE_CC_BUILTIN_ASSUME_ALIGNED
-#    define assume_aligned(x, y) __builtin_assume_aligned((x), (y))
+#    define vectorscan_assume_aligned(x, y) __builtin_assume_aligned((x), (y))
 #  endif
 #endif
 
 // Fallback to identity case.
-#ifndef assume_aligned
-#define assume_aligned(x, y) (x)
+#ifndef vectorscan_assume_aligned
+#define vectorscan_assume_aligned(x, y) (x)
 #endif
 
 #ifdef __cplusplus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/util/supervector/arch/arm/impl.cpp 
new/vectorscan-vectorscan-5.4.9/src/util/supervector/arch/arm/impl.cpp
--- old/vectorscan-vectorscan-5.4.8/src/util/supervector/arch/arm/impl.cpp      
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/util/supervector/arch/arm/impl.cpp      
2023-03-23 15:11:37.000000000 +0100
@@ -518,7 +518,7 @@
 really_inline SuperVector<16> SuperVector<16>::load(void const *ptr)
 {
     assert(ISALIGNED_N(ptr, alignof(SuperVector::size)));
-    ptr = assume_aligned(ptr, SuperVector::size);
+    ptr = vectorscan_assume_aligned(ptr, SuperVector::size);
     return {vld1q_s32((const int32_t *)ptr)};
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/util/supervector/arch/ppc64el/impl.cpp 
new/vectorscan-vectorscan-5.4.9/src/util/supervector/arch/ppc64el/impl.cpp
--- old/vectorscan-vectorscan-5.4.8/src/util/supervector/arch/ppc64el/impl.cpp  
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/util/supervector/arch/ppc64el/impl.cpp  
2023-03-23 15:11:37.000000000 +0100
@@ -49,7 +49,7 @@
 
 template<>
 template<>
-really_inline SuperVector<16>::SuperVector(char __bool __vector v)
+really_inline SuperVector<16>::SuperVector(__vector __bool char v)
 {
     u.u8x16[0] = (uint8x16_t) v;
 };
@@ -269,10 +269,10 @@
 template <>
 really_inline typename SuperVector<16>::comparemask_type
 SuperVector<16>::comparemask(void) const {
-    uint8x16_t bitmask = vec_gb( u.u8x16[0]);
     static uint8x16_t perm = { 16, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0 };
+    uint8x16_t bitmask = vec_gb(u.u8x16[0]);
     bitmask = (uint8x16_t) vec_perm(vec_splat_u8(0), bitmask, perm);
-    u32 movemask;
+    u32 ALIGN_ATTR(16) movemask;
     vec_ste((uint32x4_t) bitmask, 0, &movemask);
     return movemask;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/util/supervector/arch/x86/impl.cpp 
new/vectorscan-vectorscan-5.4.9/src/util/supervector/arch/x86/impl.cpp
--- old/vectorscan-vectorscan-5.4.8/src/util/supervector/arch/x86/impl.cpp      
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/util/supervector/arch/x86/impl.cpp      
2023-03-23 15:11:37.000000000 +0100
@@ -515,7 +515,7 @@
 really_inline SuperVector<16> SuperVector<16>::load(void const *ptr)
 {
     assert(ISALIGNED_N(ptr, alignof(SuperVector::size)));
-    ptr = assume_aligned(ptr, SuperVector::size);
+    ptr = vectorscan_assume_aligned(ptr, SuperVector::size);
     return _mm_load_si128((const m128 *)ptr);
 }
 
@@ -523,9 +523,7 @@
 really_inline SuperVector<16> SuperVector<16>::loadu_maskz(void const *ptr, 
uint8_t const len)
 {
     SuperVector mask = Ones_vshr(16 -len);
-    mask.print8("mask");
     SuperVector v = _mm_loadu_si128((const m128 *)ptr);
-    v.print8("v");
     return mask & v;
 }
 
@@ -1121,7 +1119,7 @@
 really_inline SuperVector<32> SuperVector<32>::load(void const *ptr)
 {
     assert(ISALIGNED_N(ptr, alignof(SuperVector::size)));
-    ptr = assume_aligned(ptr, SuperVector::size);
+    ptr = vectorscan_assume_aligned(ptr, SuperVector::size);
     return {_mm256_load_si256((const m256 *)ptr)};
 }
 
@@ -1771,7 +1769,7 @@
 really_inline SuperVector<64> SuperVector<64>::load(void const *ptr)
 {
     assert(ISALIGNED_N(ptr, alignof(SuperVector::size)));
-    ptr = assume_aligned(ptr, SuperVector::size);
+    ptr = vectorscan_assume_aligned(ptr, SuperVector::size);
     return {_mm512_load_si512((const m512 *)ptr)};
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/src/util/supervector/supervector.hpp 
new/vectorscan-vectorscan-5.4.9/src/util/supervector/supervector.hpp
--- old/vectorscan-vectorscan-5.4.8/src/util/supervector/supervector.hpp        
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/src/util/supervector/supervector.hpp        
2023-03-23 15:11:37.000000000 +0100
@@ -76,17 +76,17 @@
 // it's available. Note that we need to handle C or C++ compilation.
 #ifdef __cplusplus
 #  ifdef HAVE_CXX_BUILTIN_ASSUME_ALIGNED
-#    define assume_aligned(x, y) __builtin_assume_aligned((x), (y))
+#    define vectorscan_assume_aligned(x, y) __builtin_assume_aligned((x), (y))
 #  endif
 #else
 #  ifdef HAVE_CC_BUILTIN_ASSUME_ALIGNED
-#    define assume_aligned(x, y) __builtin_assume_aligned((x), (y))
+#    define vectorscan_assume_aligned(x, y) __builtin_assume_aligned((x), (y))
 #  endif
 #endif
 
 // Fallback to identity case.
-#ifndef assume_aligned
-#define assume_aligned(x, y) (x)
+#ifndef vectorscan_assume_aligned
+#define vectorscan_assume_aligned(x, y) (x)
 #endif
 
 template <uint16_t SIZE>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/vectorscan-vectorscan-5.4.8/tools/hscollider/ColliderCorporaParser.rl 
new/vectorscan-vectorscan-5.4.9/tools/hscollider/ColliderCorporaParser.rl
--- old/vectorscan-vectorscan-5.4.8/tools/hscollider/ColliderCorporaParser.rl   
2022-09-13 14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/tools/hscollider/ColliderCorporaParser.rl   
2023-03-23 15:11:37.000000000 +0100
@@ -57,6 +57,7 @@
 
 %%{
     machine FileCorporaParser;
+    alphtype unsigned char;
 
     action accumulateNum {
         num = (num * 10) + (fc - '0');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vectorscan-vectorscan-5.4.8/util/CMakeLists.txt 
new/vectorscan-vectorscan-5.4.9/util/CMakeLists.txt
--- old/vectorscan-vectorscan-5.4.8/util/CMakeLists.txt 2022-09-13 
14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/util/CMakeLists.txt 2023-03-23 
15:11:37.000000000 +0100
@@ -6,8 +6,10 @@
 include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
     ${PROJECT_SOURCE_DIR})
 
+message("RAGEL_C_FLAGS" ${RAGEL_C_FLAGS})
+
 set_source_files_properties(
-    ${CMAKE_BINARY_DIR}/tools/ExpressionParser.cpp
+    ${CMAKE_BINARY_DIR}/util/ExpressionParser.cpp
     PROPERTIES
     COMPILE_FLAGS "${RAGEL_C_FLAGS}")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vectorscan-vectorscan-5.4.8/util/ExpressionParser.rl 
new/vectorscan-vectorscan-5.4.9/util/ExpressionParser.rl
--- old/vectorscan-vectorscan-5.4.8/util/ExpressionParser.rl    2022-09-13 
14:57:08.000000000 +0200
+++ new/vectorscan-vectorscan-5.4.9/util/ExpressionParser.rl    2023-03-23 
15:11:37.000000000 +0100
@@ -55,6 +55,7 @@
 
 %%{
     machine ExpressionParser;
+    alphtype unsigned char;
 
     action accumulateNum {
         num = (num * 10) + (fc - '0');

Reply via email to