Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 72 additions & 1 deletion cfg/gnu.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<alloc init="false" buffer-size="malloc">pvalloc</alloc>
<dealloc>free</dealloc>
</memory>
<!-- https://gcc.gnu.org/onlinedocs/gcc/Byte-Swapping-Builtins.html -->
<function name="bswap_16">
<noreturn>false</noreturn>
<use-retval/>
Expand Down Expand Up @@ -64,10 +65,80 @@
<not-bool/>
</arg>
</function>
<define name="__builtin_bit_cast(type,value)" value="std::bit_cast&lt;type&gt;(value)"/>
<define name="__bswap_constant_64(x)" value="bswap_64(x)"/>
<define name="__builtin_bswap64(x)" value="bswap_64(x)"/>
<define name="__bswap_64(x)" value="bswap_64(x)"/>
<function name="__builtin_bitreverse8">
<noreturn>false</noreturn>
<use-retval/>
<returnValue type="uint8_t">(arg1 = ((arg1 &amp; 0x55555555) &lt;&lt; 1) | ((arg1 &amp; 0xAAAAAAAA) &gt;&gt; 1),
arg1 = ((arg1 &amp; 0x33333333) &lt;&lt; 2) | ((arg1 &amp; 0xCCCCCCCC) &gt;&gt; 2),
arg1 = ((arg1 &amp; 0x0F0F0F0F) &lt;&lt; 4) | ((arg1 &amp; 0xF0F0F0F0) &gt;&gt; 4),
arg1)
</returnValue>
<leak-ignore/>
<const/>
<arg nr="1" direction="in">
<not-uninit/>
<not-bool/>
<valid>0:</valid>
</arg>
</function>
<function name="__builtin_bitreverse16">
<noreturn>false</noreturn>
<use-retval/>
<returnValue type="uint16_t">(arg1 = ((arg1 &amp; 0x55555555u) &lt;&lt; 1) | ((arg1 &amp; 0xAAAAAAAAu) &gt;&gt; 1),
arg1 = ((arg1 &amp; 0x33333333u) &lt;&lt; 2) | ((arg1 &amp; 0xCCCCCCCCu) &gt;&gt; 2),
arg1 = ((arg1 &amp; 0x0F0F0F0Fu) &lt;&lt; 4) | ((arg1 &amp; 0xF0F0F0F0u) &gt;&gt; 4),
arg1 = ((arg1 &amp; 0x00FF00FFu) &lt;&lt; 8) | ((arg1 &amp; 0xFF00FF00u) &gt;&gt; 8),
arg1)
</returnValue>
<leak-ignore/>
<const/>
<arg nr="1" direction="in">
<not-uninit/>
<not-bool/>
<valid>0:</valid>
</arg>
</function>
<function name="__builtin_bitreverse32">
<noreturn>false</noreturn>
<use-retval/>
<returnValue type="uint32_t">(arg1 = ((arg1 &amp; 0x55555555ul) &lt;&lt; 1) | ((arg1 &amp; 0xAAAAAAAAul) &gt;&gt; 1),
arg1 = ((arg1 &amp; 0x33333333ul) &lt;&lt; 2) | ((arg1 &amp; 0xCCCCCCCCul) &gt;&gt; 2),
arg1 = ((arg1 &amp; 0x0F0F0F0Ful) &lt;&lt; 4) | ((arg1 &amp; 0xF0F0F0F0ul) &gt;&gt; 4),
arg1 = ((arg1 &amp; 0x00FF00FFul) &lt;&lt; 8) | ((arg1 &amp; 0xFF00FF00ul) &gt;&gt; 8),
arg1 = ((arg1 &amp; 0x0000FFFFul) &lt;&lt; 16) | ((arg1 &amp; 0xFFFF0000ul) &gt;&gt; 16),
arg1)
</returnValue>
<leak-ignore/>
<const/>
<arg nr="1" direction="in">
<not-uninit/>
<not-bool/>
<valid>0:</valid>
</arg>
</function>
<function name="__builtin_bitreverse64">
<noreturn>false</noreturn>
<use-retval/>
<returnValue type="uint64_t">(arg1 = ((arg1 &amp; 0x55555555ull) &lt;&lt; 1) | ((arg1 &amp; 0xAAAAAAAAull) &gt;&gt; 1),
arg1 = ((arg1 &amp; 0x33333333ull) &lt;&lt; 2) | ((arg1 &amp; 0xCCCCCCCCull) &gt;&gt; 2),
arg1 = ((arg1 &amp; 0x0F0F0F0Full) &lt;&lt; 4) | ((arg1 &amp; 0xF0F0F0F0ull) &gt;&gt; 4),
arg1 = ((arg1 &amp; 0x00FF00FFull) &lt;&lt; 8) | ((arg1 &amp; 0xFF00FF00ull) &gt;&gt; 8),
arg1 = ((arg1 &amp; 0x0000FFFFull) &lt;&lt; 16) | ((arg1 &amp; 0xFFFF0000ull) &gt;&gt; 16),
arg1 = ((arg1 &amp; 0x00000000FFFFFFFFull) &lt;&lt; 32) | ((arg1 &amp; 0xFFFFFFFF00000000ull) &gt;&gt; 32),
arg1)
</returnValue>
<leak-ignore/>
<const/>
<arg nr="1" direction="in">
<not-uninit/>
<not-bool/>
<valid>0:</valid>
</arg>
</function>
<define name="__builtin_bit_cast(type,value)" value="std::bit_cast&lt;type&gt;(value)"/>
<!-- https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html -->
<define name="__builtin_alloca(size)" value="alloca(size)"/>
<define name="__builtin_memcpy(dest, source, size)" value="memcpy(dest, source, size)"/>
Expand Down
17 changes: 17 additions & 0 deletions test/cfg/gnu.c
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,23 @@ void valid_code(int argInt1, va_list valist_arg, const int * parg)
// cppcheck-suppress zerodiv
// cppcheck-suppress unreadVariable
i64_1 /= bswap_64(0x023456789abcde0f) - 0x0fdebc9a78563402;

#if __GNUC__ > 16
uint8_t i8_1 = 0;
// cppcheck-suppress zerodiv
// cppcheck-suppress unreadVariable
i8_1 /= __builtin_bitreverse8(1) - 128;
// cppcheck-suppress zerodiv
// cppcheck-suppress unreadVariable
i16_1 /= __builtin_bitreverse16(5) - 40960;
// cppcheck-suppress zerodiv
// cppcheck-suppress unreadVariable
i32_1 /= __builtin_bitreverse32(4294967295) - 4294967295;
// cppcheck-suppress zerodiv
// cppcheck-suppress unreadVariable
i64_1 /= __builtin_bitreverse64(8) - 1152921504606846976;
#endif

#endif
}

Expand Down
Loading