1 // RUN: %clang_analyze_cc1 -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 };
declarationFun(int x)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 }
virtualFun(int x)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