Project

General

Profile

Actions

Feature #6546

open

GCC replaces boolean conjuction with bit precise analogue

Added by Ilja Zakharov almost 9 years ago. Updated almost 9 years ago.

Status:
Open
Priority:
High
Category:
C back-end
Start date:
01/28/2016
Due date:
% Done:

0%

Estimated time:
Published in build:

Description

GCC replaces expressions like

a == 0 && b == 0

by
(a | b) == 0

The latter expression cannot be processed properly by CPAchecker with default LDV configuration which brings more false positives in results.

Actions #1

Updated by Evgeny Novikov almost 9 years ago

  • Description updated (diff)
  • Status changed from New to Open
  • Priority changed from Normal to High
We can meet this in the following ways (ordered by preference and simplicity):
  1. Replace expressions back in C-backend. I would like to have some option to turn on this behaviour.
  2. Avoid such expressions as much as possible. For instance this issue appears due to a new environment model and actually can be quite easily fixed there. But we can not guarantee that, say, Linux kernel source code did/does/will not have similar expressions.
  3. Disable this conversion in GCC internals as well with some option.
  4. Teach CPAchecker to process such simple bit precise expressions but who will teach other verifiers.
Actions #2

Updated by Evgeny Novikov almost 9 years ago

  • Tracker changed from Bug to Feature
Actions #3

Updated by Evgeny Novikov almost 9 years ago

  • Category set to C back-end
Actions

Also available in: Atom PDF