[PATCH] D45491: [analyzer] Do not invalidate the `this` pointer.

Henry Wong via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 11 06:33:49 PDT 2018


MTC added a comment.

In https://reviews.llvm.org/D45491#1063364, @george.karpenkov wrote:

> @MTC what happens for
>
>   this.j = 0;
>   for (int i=0; i<100; i++)
>      this.j++;
>
>
> ?


@george.karpenkov  `this`'s value will remain unchanged, `j` will be invalidated.

   1   void clang_analyzer_printState();
   2   struct A {
   3       int j;
   4       void foo() {
   5           this->j = 0;
   6           clang_analyzer_printState();
   7           for (int i = 0; i < 100; ++i)
   8               this->j++;
   9           clang_analyzer_printState();
  10     }
  11   };
  12
  13   void func() {
  14       A a;
  15       a.foo();
  16   }

For the above code, given the command `clang -cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-config widen-loops=true test.cpp`. The output about `Store` is as follows.

  Store (direct and default bindings), 0x7fb7d008c068 :
   (a,0,direct) : 0 S32b
  
   (this,0,direct) : &a
  
  ----------------------------------------------------------------------------
  Store (direct and default bindings), 0x7fb7d080a618 :
   (a,0,default) : conj_$1{int}
  
   (this,0,direct) : &a


Repository:
  rC Clang

https://reviews.llvm.org/D45491





More information about the cfe-commits mailing list