public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug sanitizer/83382] UBSAN tiggers false-positive warning [-Werror=uninitialized]
       [not found] <bug-83382-4@http.gcc.gnu.org/bugzilla/>
@ 2021-04-06 23:38 ` msebor at gcc dot gnu.org
  0 siblings, 0 replies; only message in thread
From: msebor at gcc dot gnu.org @ 2021-04-06 23:38 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83382

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |msebor at gcc dot gnu.org
     Ever confirmed|0                           |1
      Known to fail|                            |10.2.0, 11.0, 8.3.0, 9.3.0
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2021-04-06

--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> ---
Reconfirmed with GCC 11.  The warning sees the IL below and triggers for the
call to .UBSAN_NULL() after the CFG pass has removed the initialization of p.1.
 A simple way to avoid it is to suppress warnings for calls to the sanitizer
internal functions.

Interestingly, this bug is only reproducible with C++, not when the same code
is compiled as C.

$ gcc -O0 -S -Wall -fsanitize=undefined -fdump-tree-cfg-details=/dev/stdout
-xc++ pr83382.c
pr83382.c: In function ‘void f()’:
pr83382.c:6:5: warning: value computed is not used [-Wunused-value]
    6 |   i >> ((!0 || c) && (0 ? j : *p));
      |   ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

;; Function f (_Z1fv, funcdef_no=0, decl_uid=2788, cgraph_uid=1,
symbol_order=5)

Scope blocks:

{ Scope block #0 

}
Removing basic block 3
;; basic block 3, loop depth 0
;;  pred:      
p.1 = p;                      <<< initialization removed
.UBSAN_NULL (p.1, 2B, 4);
_1 = MEM[(const int &)p.1];
_2 = _1 != 0;
_3 = (int) _2;
_4 = (unsigned long) _3;
_5 = (unsigned long) i.0;
__builtin___ubsan_handle_shift_out_of_bounds (&*.Lubsan_data0, _5, _4);
;;  succ:       4


;; 1 loops found
;;
;; Loop 0
;;  header 0, latch 1
;;  depth 0, outer -1
;;  nodes: 0 1 2 3
;; 2 succs { 3 }
;; 3 succs { 1 }
void f ()
{
  int * p.1;                  <<< not initialized
  int i.0;

  <bb 2> :
  i.0 = i;

  <bb 3> :
  .UBSAN_NULL (p.1, 2B, 4);   <<< -Wuninitialized
  _6 = MEM[(const int &)p.1];
  _7 = _6 != 0;
  _8 = (int) _7;
  return;

}


pr83382.c:6:25: warning: ‘p.1’ is used uninitialized [-Wuninitialized]
    6 |   i >> ((!0 || c) && (0 ? j : *p));
      |                      ~~~^~~~~~~~~
pr83382.c:6:25: note: ‘p.1’ was declared here
    6 |   i >> ((!0 || c) && (0 ? j : *p));
      |                      ~~~^~~~~~~~~

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-04-06 23:38 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <bug-83382-4@http.gcc.gnu.org/bugzilla/>
2021-04-06 23:38 ` [Bug sanitizer/83382] UBSAN tiggers false-positive warning [-Werror=uninitialized] msebor at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).