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
8struct InvalidateArgs {
9  void ttt(const int &nptr);
10  virtual void vttt(const int *nptr);
11};
12struct ChildOfInvalidateArgs: public InvalidateArgs {
13  virtual void vttt(const int *nptr);
14};
15void 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}
24void 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