gdb/testsuite: Fix FAILs in gdb.linespec/cpcompletion.exp when using clang
authorBruno Larsen <blarsen@redhat.com>
Tue, 3 Jan 2023 14:07:47 +0000 (15:07 +0100)
committerBruno Larsen <blarsen@redhat.com>
Fri, 6 Jan 2023 09:50:43 +0000 (10:50 +0100)
When using clang 16.0.0 to test gdb.linespec/cpcompletion.exp, I get 99
unexpected failures.  They all fail to produce a complete list of
completion options for a function, either overload2_function,
overload3_function or anon_ns_function.  This happens because clang is
optimizing them away, since they are never used.

Fix this by adding __attribute__((used)) to all declarations to the
aforementioned functions.

gdb/testsuite/gdb.linespec/cpls.cc

index 037b5c283258ac653f0a217b49fb4e1b37cf6d3e..d63ed892564dbb682b2d0042e540478f5cf3aa25 100644 (file)
@@ -56,16 +56,17 @@ struct overload2_arg9 {};
 struct overload2_arga {};
 
 #define GEN_OVERLOAD2_FUNCTIONS(ARG1, ARG2)            \
-  void                                                 \
+  void __attribute__ ((used))                          \
   overload2_function (ARG1)                            \
   {}                                                   \
                                                        \
   struct struct_overload2_test                         \
   {                                                    \
-    void overload2_function (ARG2);                    \
+    void __attribute__ ((used))                                \
+      overload2_function (ARG2);                       \
   };                                                   \
                                                        \
-  void                                                 \
+  void __attribute__ ((used))                          \
   struct_overload2_test::overload2_function (ARG2)     \
   {}
 
@@ -99,23 +100,25 @@ namespace ns_overload2_test
 /* Code for the overload-3 test.  */
 
 #define GEN_OVERLOAD3_FUNCTIONS(ARG1, ARG2)            \
-  void                                                 \
+  void __attribute__ ((used))                          \
   overload3_function (ARG1)                            \
   {}                                                   \
-  void                                                 \
+  void __attribute__ ((used))                          \
   overload3_function (ARG2)                            \
   {}                                                   \
                                                        \
   struct struct_overload3_test                         \
   {                                                    \
-    void overload3_function (ARG1);                    \
-    void overload3_function (ARG2);                    \
+    void __attribute__ ((used))                                \
+      overload3_function (ARG1);                       \
+    void __attribute__ ((used))                                \
+      overload3_function (ARG2);                       \
   };                                                   \
                                                        \
-  void                                                 \
+  void __attribute__ ((used))                          \
   struct_overload3_test::overload3_function (ARG1)     \
   {}                                                   \
-  void                                                 \
+  void __attribute__ ((used))                          \
   struct_overload3_test::overload3_function (ARG2)     \
   {}
 
@@ -343,15 +346,15 @@ namespace ns2_incomplete_scope_colon_test
 
 namespace
 {
-  void anon_ns_function ()
+  void __attribute__ ((used)) anon_ns_function ()
   {}
 
   struct anon_ns_struct
   {
-    void anon_ns_function ();
+    void __attribute__ ((used)) anon_ns_function ();
   };
 
-  void
+  void __attribute__ ((used))
   anon_ns_struct::anon_ns_function ()
   {}
 }
@@ -361,15 +364,15 @@ namespace the_anon_ns_wrapper_ns
 
 namespace
 {
-  void anon_ns_function ()
+  void __attribute__ ((used)) anon_ns_function ()
   {}
 
   struct anon_ns_struct
   {
-    void anon_ns_function ();
+    void __attribute__ ((used)) anon_ns_function ();
   };
 
-  void
+  void __attribute__ ((used))
   anon_ns_struct::anon_ns_function ()
   {}
 }