xref: /llvm-project/clang/test/Analysis/Checkers/WebKit/member-function-pointer-crash.cpp (revision 93a2a8cb7f6ab815849e8320bff54c965edd09e7)
1*93a2a8cbSRyosuke Niwa // RUN: %clang_analyze_cc1 -analyzer-checker=alpha.webkit.UncountedLocalVarsChecker -verify %s
2*93a2a8cbSRyosuke Niwa 
3*93a2a8cbSRyosuke Niwa #include "mock-types.h"
4*93a2a8cbSRyosuke Niwa 
5*93a2a8cbSRyosuke Niwa class RenderStyle;
6*93a2a8cbSRyosuke Niwa 
7*93a2a8cbSRyosuke Niwa class FillLayer {
8*93a2a8cbSRyosuke Niwa public:
9*93a2a8cbSRyosuke Niwa     void ref() const;
10*93a2a8cbSRyosuke Niwa     void deref() const;
11*93a2a8cbSRyosuke Niwa };
12*93a2a8cbSRyosuke Niwa 
13*93a2a8cbSRyosuke Niwa class FillLayersPropertyWrapper {
14*93a2a8cbSRyosuke Niwa public:
15*93a2a8cbSRyosuke Niwa     typedef const FillLayer& (RenderStyle::*LayersGetter)() const;
16*93a2a8cbSRyosuke Niwa 
17*93a2a8cbSRyosuke Niwa private:
canInterpolate(const RenderStyle & from) const18*93a2a8cbSRyosuke Niwa     bool canInterpolate(const RenderStyle& from) const
19*93a2a8cbSRyosuke Niwa     {
20*93a2a8cbSRyosuke Niwa         auto* fromLayer = &(from.*m_layersGetter)();
21*93a2a8cbSRyosuke Niwa         // expected-warning@-1{{Local variable 'fromLayer' is uncounted and unsafe}}
22*93a2a8cbSRyosuke Niwa         return true;
23*93a2a8cbSRyosuke Niwa     }
24*93a2a8cbSRyosuke Niwa 
25*93a2a8cbSRyosuke Niwa     LayersGetter m_layersGetter;
26*93a2a8cbSRyosuke Niwa };
27