Home | History | Annotate | Download | only in Analysis
      1 // RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-store region -verify %s
      2 // expected-no-diagnostics
      3 
      4 // Intra-procedural C++ tests.
      5 
      6 // Test relaxing function call arguments invalidation to be aware of const
      7 // arguments. radar://10595327
      8 struct InvalidateArgs {
      9   void ttt(const int &nptr);
     10   virtual void vttt(const int *nptr);
     11 };
     12 struct ChildOfInvalidateArgs: public InvalidateArgs {
     13   virtual void vttt(const int *nptr);
     14 };
     15 void declarationFun(int x) {
     16   InvalidateArgs t;
     17   x = 3;
     18   int y = x + 1;
     19   int *p = 0;
     20   t.ttt(y);
     21   if (x == y)
     22       y = *p; // no-warning
     23 }
     24 void virtualFun(int x) {
     25   ChildOfInvalidateArgs t;
     26   InvalidateArgs *pt = &t;
     27   x = 3;
     28   int y = x + 1;
     29   int *p = 0;
     30   pt->vttt(&y);
     31   if (x == y)
     32       y = *p; // no-warning
     33 }
     34