xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/modernize/use-override-with-macro.cpp (revision e8a3ddafe063c970df9c23e803812369abde4c82)
189a1d03eSRichard // RUN: %check_clang_tidy %s modernize-use-override %t -- \
2*e8a3ddafSNathan James // RUN:   -config="{CheckOptions: {modernize-use-override.OverrideSpelling: 'OVERRIDE',modernize-use-override.FinalSpelling: 'FINAL'}}"
389a1d03eSRichard 
489a1d03eSRichard #define ABSTRACT = 0
589a1d03eSRichard 
689a1d03eSRichard #define OVERRIDE override
789a1d03eSRichard #define FINAL final
889a1d03eSRichard #define VIRTUAL virtual
989a1d03eSRichard #define NOT_VIRTUAL
1089a1d03eSRichard #define NOT_OVERRIDE
1189a1d03eSRichard 
1289a1d03eSRichard #define MUST_USE_RESULT __attribute__((warn_unused_result))
1389a1d03eSRichard #define UNUSED __attribute__((unused))
1489a1d03eSRichard 
1589a1d03eSRichard struct Base {
~BaseBase1689a1d03eSRichard   virtual ~Base() {}
1789a1d03eSRichard   virtual void a();
1889a1d03eSRichard   virtual void b();
1989a1d03eSRichard   virtual void c();
2089a1d03eSRichard   virtual void e() = 0;
2189a1d03eSRichard   virtual void f2() const = 0;
2289a1d03eSRichard   virtual void g() = 0;
2389a1d03eSRichard   virtual void j() const;
2489a1d03eSRichard   virtual void k() = 0;
2589a1d03eSRichard   virtual void l() const;
2689a1d03eSRichard };
2789a1d03eSRichard 
2889a1d03eSRichard struct SimpleCases : public Base {
2989a1d03eSRichard public:
3089a1d03eSRichard   virtual ~SimpleCases();
3189a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: prefer using 'OVERRIDE' or (rarely) 'FINAL' instead of 'virtual' [modernize-use-override]
3289a1d03eSRichard   // CHECK-FIXES: {{^}}  ~SimpleCases() OVERRIDE;
3389a1d03eSRichard 
3489a1d03eSRichard   void a();
3589a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: annotate this function with 'OVERRIDE' or (rarely) 'FINAL' [modernize-use-override]
3689a1d03eSRichard   // CHECK-FIXES: {{^}}  void a() OVERRIDE;
3789a1d03eSRichard 
3889a1d03eSRichard   virtual void b();
3989a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using 'OVERRIDE' or (rarely) 'FINAL' instead of 'virtual' [modernize-use-override]
4089a1d03eSRichard   // CHECK-FIXES: {{^}}  void b() OVERRIDE;
4189a1d03eSRichard 
4289a1d03eSRichard   virtual void c();
4389a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using
4489a1d03eSRichard   // CHECK-FIXES: {{^}}  void c() OVERRIDE;
4589a1d03eSRichard 
4689a1d03eSRichard   virtual void e() = 0;
4789a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using
4889a1d03eSRichard   // CHECK-FIXES: {{^}}  void e() OVERRIDE = 0;
4989a1d03eSRichard 
5089a1d03eSRichard   virtual void f2() const = 0;
5189a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using
5289a1d03eSRichard   // CHECK-FIXES: {{^}}  void f2() const OVERRIDE = 0;
5389a1d03eSRichard 
5489a1d03eSRichard   virtual void g() ABSTRACT;
5589a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using
5689a1d03eSRichard   // CHECK-FIXES: {{^}}  void g() OVERRIDE ABSTRACT;
5789a1d03eSRichard 
5889a1d03eSRichard   virtual void j() const;
5989a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using
6089a1d03eSRichard   // CHECK-FIXES: {{^}}  void j() const OVERRIDE;
6189a1d03eSRichard 
6289a1d03eSRichard   virtual void k() OVERRIDE;
6389a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant since the function is already declared 'OVERRIDE' [modernize-use-override]
6489a1d03eSRichard   // CHECK-FIXES: {{^}}  void k() OVERRIDE;
6589a1d03eSRichard 
6689a1d03eSRichard   virtual void l() const OVERRIDE;
6789a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'virtual' is redundant since the function is already declared 'OVERRIDE' [modernize-use-override]
6889a1d03eSRichard   // CHECK-FIXES: {{^}}  void l() const OVERRIDE;
6989a1d03eSRichard };
70