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)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 } virtualFun(int x)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