[clang] a2f83d5 - [clang][NFC] Add tests for the use of NamedDecl::getDeclName in the unused/unneeded diagnostics.

Bruno Ricci via cfe-commits cfe-commits at lists.llvm.org
Sun Jul 26 09:27:04 PDT 2020


Author: Bruno Ricci
Date: 2020-07-26T17:20:56+01:00
New Revision: a2f83d5a07daf7a9b717fff8916c44cd7cc1c678

URL: https://github.com/llvm/llvm-project/commit/a2f83d5a07daf7a9b717fff8916c44cd7cc1c678
DIFF: https://github.com/llvm/llvm-project/commit/a2f83d5a07daf7a9b717fff8916c44cd7cc1c678.diff

LOG: [clang][NFC] Add tests for the use of NamedDecl::getDeclName in the unused/unneeded diagnostics.

Added: 
    

Modified: 
    clang/test/SemaCXX/warn-func-not-needed.cpp
    clang/test/SemaCXX/warn-member-not-needed.cpp
    clang/test/SemaCXX/warn-unused-filescoped.cpp
    clang/test/SemaCXX/warn-variable-not-needed.cpp

Removed: 
    


################################################################################
diff  --git a/clang/test/SemaCXX/warn-func-not-needed.cpp b/clang/test/SemaCXX/warn-func-not-needed.cpp
index 65721f44f570..5040aaad9460 100644
--- a/clang/test/SemaCXX/warn-func-not-needed.cpp
+++ b/clang/test/SemaCXX/warn-func-not-needed.cpp
@@ -1,13 +1,23 @@
 // RUN: %clang_cc1 -fsyntax-only -verify -Wall %s
 
 namespace test1 {
-  static void f() {} // expected-warning {{is not needed and will not be emitted}}
-  static void f();
-  template <typename T>
-  void foo() {
-    f();
-  }
+static void f() {} // expected-warning {{function 'f' is not needed and will not be emitted}}
+static void f();
+template <typename T>
+void foo() {
+  f();
+}
+}
+
+namespace test1_template {
+template <typename T> static void f() {}
+template <> void f<int>() {} // expected-warning {{function 'f' is not needed and will not be emitted}}
+template <typename T>
+void foo() {
+  f<int>();
+  f<long>();
 }
+} // namespace test1_template
 
 namespace test2 {
   static void f() {}

diff  --git a/clang/test/SemaCXX/warn-member-not-needed.cpp b/clang/test/SemaCXX/warn-member-not-needed.cpp
index 61bb3488c611..95241f4f7fee 100644
--- a/clang/test/SemaCXX/warn-member-not-needed.cpp
+++ b/clang/test/SemaCXX/warn-member-not-needed.cpp
@@ -1,11 +1,19 @@
-// RUN: %clang_cc1 -fsyntax-only -verify -Wunneeded-member-function %s
+// RUN: %clang_cc1 -fsyntax-only -verify -Wunneeded-member-function -Wno-unused-template %s
 
 namespace {
   class A {
-    void g() {} // expected-warning {{is not needed and will not be emitted}}
+    void g() {} // expected-warning {{member function 'g' is not needed and will not be emitted}}
+    template <typename T> void gt(T) {}
+    template <> void gt<int>(int) {} // expected-warning {{member function 'gt' is not needed and will not be emitted}}
+    template <> void gt(float) {}    // expected-warning {{member function 'gt' is not needed and will not be emitted}}
+
     template <typename T>
     void foo() {
       g();
+      gt(0);
+      gt(0.0f);
+      gt(0.0);
     }
   };
+  template void A::gt(double); // no-warning
 }

diff  --git a/clang/test/SemaCXX/warn-unused-filescoped.cpp b/clang/test/SemaCXX/warn-unused-filescoped.cpp
index 7ea398feb2b1..056543d5eeb0 100644
--- a/clang/test/SemaCXX/warn-unused-filescoped.cpp
+++ b/clang/test/SemaCXX/warn-unused-filescoped.cpp
@@ -1,14 +1,15 @@
-// RUN: %clang_cc1 -fsyntax-only -verify -Wunused -Wunused-template -Wunused-member-function -Wno-unused-local-typedefs -Wno-c++11-extensions -std=c++98 %s
+// RUN: %clang_cc1 -fsyntax-only -verify -Wunused -Wunused-template -Wunused-member-function -Wno-unused-local-typedefs \
+// RUN:            -Wno-c++11-extensions -Wno-c++14-extensions -std=c++98 %s
 // RUN: %clang_cc1 -fsyntax-only -verify -Wunused -Wunused-template -Wunused-member-function -Wno-unused-local-typedefs -std=c++14 %s
 
 #ifdef HEADER
 
-static void headerstatic() {}  // expected-warning{{unused}}
+static void headerstatic() {} // expected-warning{{unused function 'headerstatic'}}
 static inline void headerstaticinline() {}
 
 namespace {
-  void headeranon() {}  // expected-warning{{unused}}
-  inline void headerinlineanon() {}
+void headeranon() {} // expected-warning{{unused function 'headeranon'}}
+inline void headerinlineanon() {}
 }
 
 namespace test7
@@ -43,31 +44,31 @@ namespace pr19713 {
 #define HEADER
 #include "warn-unused-filescoped.cpp"
 
-static void f1(); // expected-warning{{unused}}
+static void f1(); // expected-warning{{unused function 'f1'}}
 
 namespace {
-  void f2();  // expected-warning{{unused}}
+void f2(); // expected-warning{{unused function 'f2'}}
 
-  void f3() { }  // expected-warning{{unused}}
+void f3() {} // expected-warning{{unused function 'f3'}}
 
-  struct S {
-    void m1() { }  // expected-warning{{unused}}
-    void m2();  // expected-warning{{unused}}
-    void m3();
-    S(const S&);
-    void operator=(const S&);
-  };
+struct S {
+  void m1() {} // expected-warning{{unused member function 'm1'}}
+  void m2();   // expected-warning{{unused member function 'm2'}}
+  void m3();
+  S(const S &);
+  void operator=(const S &);
+};
 
   template <typename T>
   struct TS {
     void m();
   };
-  template <> void TS<int>::m() { }  // expected-warning{{unused}}
+  template <> void TS<int>::m() {} // expected-warning{{unused member function 'm'}}
 
   template <typename T>
-  void tf() { }  // expected-warning{{unused}}
-  template <> void tf<int>() { }  // expected-warning{{unused}}
-  
+  void tf() {}                  // expected-warning{{unused function template 'tf'}}
+  template <> void tf<int>() {} // expected-warning{{unused function 'tf'}}
+
   struct VS {
     virtual void vm() { }
   };
@@ -77,27 +78,31 @@ namespace {
   };
 }
 
-void S::m3() { }  // expected-warning{{unused}}
+void S::m3() {} // expected-warning{{unused member function 'm3'}}
 
-static inline void f4() { }  // expected-warning{{unused}}
-const unsigned int cx = 0; // expected-warning{{unused}}
+static inline void f4() {} // expected-warning{{unused function 'f4'}}
+const unsigned int cx = 0; // expected-warning{{unused variable 'cx'}}
 const unsigned int cy = 0;
 int f5() { return cy; }
 
-static int x1;  // expected-warning{{unused}}
+static int x1; // expected-warning{{unused variable 'x1'}}
 
 namespace {
-  int x2;  // expected-warning{{unused}}
-  
-  struct S2 {
-    static int x;  // expected-warning{{unused}}
-  };
+int x2; // expected-warning{{unused variable 'x2'}}
+
+struct S2 {
+  static int x; // expected-warning{{unused variable 'x'}}
+};
 
   template <typename T>
   struct TS2 {
     static int x;
   };
-  template <> int TS2<int>::x;  // expected-warning{{unused}}
+  template <> int TS2<int>::x; // expected-warning{{unused variable 'x'}}
+
+  template <typename T, typename U> int vt = 0; // expected-warning {{unused variable template 'vt'}}
+  template <typename T> int vt<T, void> = 0;
+  template <> int vt<void, void> = 0; // expected-warning {{unused variable 'vt'}}
 }
 
 namespace PR8841 {
@@ -120,17 +125,21 @@ namespace PR8841 {
 namespace test4 {
   namespace { struct A {}; }
 
-  void test(A a); // expected-warning {{unused function}}
+  void test(A a); // expected-warning {{unused function 'test'}}
   extern "C" void test4(A a);
 }
 
 namespace rdar8733476 {
-  static void foo() { } // expected-warning {{not needed and will not be emitted}}
+static void foo() {}                         // expected-warning {{function 'foo' is not needed and will not be emitted}}
+template <typename T> static void foo_t() {} // expected-warning {{unused function template 'foo_t'}}
+template <> void foo_t<int>() {}             // expected-warning {{function 'foo_t' is not needed and will not be emitted}}
 
-  template <int>
-  void bar() {
-    foo();
-  }
+template <int>
+void bar() {
+  foo();
+  foo_t<int>();
+  foo_t<void>();
+}
 }
 
 namespace test5 {
@@ -142,8 +151,15 @@ namespace test5 {
   // FIXME: We should produce warnings for both of these.
   static const int m = n;
   int x = sizeof(m);
-  static const double d = 0.0; // expected-warning{{not needed and will not be emitted}}
+  static const double d = 0.0; // expected-warning{{variable 'd' is not needed and will not be emitted}}
   int y = sizeof(d);
+
+  namespace {
+  // FIXME: Should be "unused variable template 'var_t'" instead.
+  template <typename T> const double var_t = 0; // expected-warning {{unused variable 'var_t'}}
+  template <> const double var_t<int> = 0;      // expected-warning {{variable 'var_t' is not needed and will not be emitted}}
+  int z = sizeof(var_t<int>);                   // expected-warning {{unused variable 'z'}}
+  }                                             // namespace
 }
 
 namespace unused_nested {
@@ -158,9 +174,9 @@ namespace unused_nested {
 
 namespace unused {
   struct {
-    void func() { // expected-warning {{unused member function}}
+    void func() { // expected-warning {{unused member function 'func'}}
     }
-  } x; // expected-warning {{unused variable}}
+  } x; // expected-warning {{unused variable 'x'}}
 }
 
 namespace test6 {
@@ -201,8 +217,8 @@ static void func() {}
 }
 
 namespace test9 {
-template<typename T>
-static void completeRedeclChainForTemplateSpecialization() { } // expected-warning {{unused}}
+template <typename T>
+static void completeRedeclChainForTemplateSpecialization() {} // expected-warning {{unused function template 'completeRedeclChainForTemplateSpecialization'}}
 }
 
 namespace test10 {
@@ -216,8 +232,8 @@ constexpr T pi = T(3.14);
 namespace pr19713 {
 #if __cplusplus >= 201103L
   // FIXME: We should warn on both of these.
-  static constexpr int constexpr3() { return 1; } // expected-warning {{unused}}
-  constexpr int constexpr4() { return 2; }
+static constexpr int constexpr3() { return 1; } // expected-warning {{unused function 'constexpr3'}}
+constexpr int constexpr4() { return 2; }
 #endif
 }
 

diff  --git a/clang/test/SemaCXX/warn-variable-not-needed.cpp b/clang/test/SemaCXX/warn-variable-not-needed.cpp
index 0fb0f8151b44..139c2923f4ba 100644
--- a/clang/test/SemaCXX/warn-variable-not-needed.cpp
+++ b/clang/test/SemaCXX/warn-variable-not-needed.cpp
@@ -2,9 +2,14 @@
 
 namespace test1 {
   static int abc = 42; // expected-warning {{variable 'abc' is not needed and will not be emitted}}
+
+  namespace {
+  template <typename T> int abc_template = 0;
+  template <> int abc_template<int> = 0; // expected-warning {{variable 'abc_template' is not needed and will not be emitted}}
+  }                                      // namespace
   template <typename T>
   int foo(void) {
-    return abc;
+    return abc + abc_template<int> + abc_template<long>;
   }
 }
 


        


More information about the cfe-commits mailing list