Revert patchset for c++/16253: it causes a large performance regression.
authorKeith Seitz <keiths@redhat.com>
Sat, 7 Jun 2014 17:40:39 +0000 (10:40 -0700)
committerKeith Seitz <keiths@redhat.com>
Sat, 7 Jun 2014 17:40:39 +0000 (10:40 -0700)
See the bug for further information.

14 files changed:
gdb/ChangeLog
gdb/ada-lang.c
gdb/cp-namespace.c
gdb/cp-support.c
gdb/psymtab.c
gdb/symtab.c
gdb/symtab.h
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/var-tag.cc [deleted file]
gdb/testsuite/gdb.cp/var-tag.exp [deleted file]
gdb/testsuite/gdb.dwarf2/dw2-ada-ffffffff.exp
gdb/testsuite/gdb.dwarf2/dw2-anon-mptr.exp
gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp
gdb/testsuite/gdb.dwarf2/dw2-inheritance.exp

index e6d9040d0eb572443f3dfe22faa421d0fcf35922..dc638635522abdb8fb3dd57fb77b83c46114791d 100644 (file)
@@ -1,3 +1,40 @@
+2014-06-07  Keith Seitz  <keiths@redhat.com>
+
+       Revert:
+       PR c++/16253
+       * ada-lang.c (ada_symbol_matches_domain): Moved here and renamed
+       from symbol_matches_domain in symtab.c. All local callers
+       of symbol_matches_domain updated.
+       (standard_lookup): If DOMAIN is VAR_DOMAIN and no symbol is found,
+       search STRUCT_DOMAIN.
+       (ada_find_any_type_symbol): Do not search STRUCT_DOMAIN
+       independently.  standard_lookup will do that automatically.
+       * cp-namespace.c (cp_lookup_symbol_nonlocal): Explain when/why
+       VAR_DOMAIN searches may return a STRUCT_DOMAIN match.
+       (cp_lookup_symbol_in_namespace): Likewise.
+       If no VAR_DOMAIN symbol is found, search STRUCT_DOMAIN.
+       (cp_lookup_symbol_exports): Explain when/why VAR_DOMAIN searches
+       may return a STRUCT_DOMAIN match.
+       (lookup_symbol_file): Search for the class name in STRUCT_DOMAIN.
+       * cp-support.c: Include language.h.
+       (inspect_type): Explicitly search STRUCT_DOMAIN before searching
+       VAR_DOMAIN.
+       * psymtab.c (match_partial_symbol): Compare the requested
+       domain with the symbol's domain directly.
+       (lookup_partial_symbol): Likewise.
+       * symtab.c (lookup_symbol_in_language): Explain when/why
+       VAR_DOMAIN searches may return a STRUCT_DOMAIN match.
+       If no VAR_DOMAIN symbol is found, search STRUCT_DOMAIN for
+       appropriate languages.
+       (symbol_matches_domain): Renamed `ada_symbol_matches_domain'
+       and moved to ada-lang.c
+       (lookup_block_symbol): Explain that this function only returns
+       symbol matching the requested DOMAIN.
+       Compare the requested domain with the symbol's domain directly.
+       (iterate_over_symbols): Compare the requested domain with the
+       symbol's domain directly.
+       * symtab.h (symbol_matches_domain): Remove.
+
 2014-06-06  Doug Evans  <xdje42@gmail.com>
 
        * guile/guile-internal.h (gdbscm_guile_major_version): Declare.
index c12fbb8b6871eae58bf2050b86e5816d93a3aaa2..d7c7e2406a695f2480fe0111a70722183e38ba43 100644 (file)
@@ -4393,20 +4393,6 @@ ada_clear_symbol_cache (void)
   ada_init_symbol_cache (sym_cache);
 }
 
-/* STRUCT_DOMAIN symbols are also typedefs for the type.  This function tests
-   the equivalency of two Ada symbol domain types.  */
-
-static int
-ada_symbol_matches_domain (domain_enum symbol_domain, domain_enum domain)
-{
-  if (symbol_domain == domain
-      || ((domain == VAR_DOMAIN || domain == STRUCT_DOMAIN)
-         && symbol_domain == STRUCT_DOMAIN))
-    return 1;
-
-  return 0;
-}
-
 /* Search our cache for an entry matching NAME and NAMESPACE.
    Return it if found, or NULL otherwise.  */
 
@@ -4508,13 +4494,6 @@ standard_lookup (const char *name, const struct block *block,
   if (lookup_cached_symbol (name, domain, &sym, NULL))
     return sym;
   sym = lookup_symbol_in_language (name, block, domain, language_c, 0);
-
-  /* STRUCT_DOMAIN symbols also define a typedef for the type.  Lookup
-     a STRUCT_DOMAIN symbol if one is requested for VAR_DOMAIN and not
-     found.  */
-  if (sym == NULL && domain == VAR_DOMAIN)
-    sym = lookup_symbol_in_language (name, block, STRUCT_DOMAIN, language_c, 0);
-
   cache_symbol (name, domain, sym, block_found);
   return sym;
 }
@@ -5340,29 +5319,13 @@ add_nonlocal_symbols (struct obstack *obstackp, const char *name,
       data.objfile = objfile;
 
       if (is_wild_match)
-       {
-         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
-                                                aux_add_nonlocal_symbols,
-                                                &data, wild_match, NULL);
-         if (domain == VAR_DOMAIN)
-           objfile->sf->qf->map_matching_symbols (objfile, name,
-                                                  STRUCT_DOMAIN, global,
-                                                  aux_add_nonlocal_symbols,
-                                                  &data, wild_match, NULL);
-       }
+       objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
+                                              aux_add_nonlocal_symbols, &data,
+                                              wild_match, NULL);
       else
-       {
-         objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
-                                                aux_add_nonlocal_symbols,
-                                                &data, full_match,
-                                                compare_names);
-         if (domain == VAR_DOMAIN)
-           objfile->sf->qf->map_matching_symbols (objfile, name,
-                                                  STRUCT_DOMAIN, global,
-                                                  aux_add_nonlocal_symbols,
-                                                  &data, full_match,
-                                                  compare_names);
-       }
+       objfile->sf->qf->map_matching_symbols (objfile, name, domain, global,
+                                              aux_add_nonlocal_symbols, &data,
+                                              full_match, compare_names);
     }
 
   if (num_defns_collected (obstackp) == 0 && global && !is_wild_match)
@@ -5886,7 +5849,8 @@ ada_add_block_symbols (struct obstack *obstackp,
       for (sym = block_iter_match_first (block, name, wild_match, &iter);
           sym != NULL; sym = block_iter_match_next (name, wild_match, &iter))
       {
-        if (ada_symbol_matches_domain (SYMBOL_DOMAIN (sym), domain)
+        if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
+                                   SYMBOL_DOMAIN (sym), domain)
             && wild_match (SYMBOL_LINKAGE_NAME (sym), name) == 0)
           {
            if (SYMBOL_CLASS (sym) == LOC_UNRESOLVED)
@@ -5908,7 +5872,8 @@ ada_add_block_symbols (struct obstack *obstackp,
      for (sym = block_iter_match_first (block, name, full_match, &iter);
          sym != NULL; sym = block_iter_match_next (name, full_match, &iter))
       {
-        if (ada_symbol_matches_domain (SYMBOL_DOMAIN (sym), domain))
+        if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
+                                   SYMBOL_DOMAIN (sym), domain))
           {
            if (SYMBOL_CLASS (sym) != LOC_UNRESOLVED)
              {
@@ -5940,7 +5905,8 @@ ada_add_block_symbols (struct obstack *obstackp,
 
       ALL_BLOCK_SYMBOLS (block, iter, sym)
       {
-        if (ada_symbol_matches_domain (SYMBOL_DOMAIN (sym), domain))
+        if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
+                                   SYMBOL_DOMAIN (sym), domain))
           {
             int cmp;
 
@@ -7528,12 +7494,11 @@ ada_find_any_type_symbol (const char *name)
   struct symbol *sym;
 
   sym = standard_lookup (name, get_selected_block (NULL), VAR_DOMAIN);
-  if (sym != NULL
-      && (SYMBOL_DOMAIN (sym) != VAR_DOMAIN
-         || SYMBOL_CLASS (sym) == LOC_TYPEDEF))
+  if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
     return sym;
 
-  return NULL;
+  sym = standard_lookup (name, NULL, STRUCT_DOMAIN);
+  return sym;
 }
 
 /* Find a type named NAME.  Ignores ambiguity.  This routine will look
index ae7c8527df50e039e9f7d8fe6cbc3a31e9f1e48a..cd57399229149fab22dc1f6c854d0a4f614a6fdc 100644 (file)
@@ -221,12 +221,7 @@ cp_is_anonymous (const char *namespace)
    we're looking for, BLOCK is the block that we're searching within,
    DOMAIN says what kind of symbols we're looking for, and if SYMTAB
    is non-NULL, we should store the symtab where we found the symbol
-   in it.
-
-   Class, union, and enum tag names may be used in C++ without specifying
-   class-key or enum.  If searching for a VAR_DOMAIN symbol fails,
-   this function will search STRUCT_DOMAIN.  [This is actually done in
-   cp_lookup_symbol_in_namespace.]  */
+   in it.  */
 
 struct symbol *
 cp_lookup_symbol_nonlocal (const char *name,
@@ -247,10 +242,7 @@ cp_lookup_symbol_nonlocal (const char *name,
 
 /* Look up NAME in the C++ namespace NAMESPACE.  Other arguments are
    as in cp_lookup_symbol_nonlocal.  If SEARCH is non-zero, search
-   through base classes for a matching symbol.
-
-   If DOMAIN is VAR_DOMAIN and no matching symbol exists in that domain,
-   this function will search STRUCT_DOMAIN for a match.  */
+   through base classes for a matching symbol.  */
 
 static struct symbol *
 cp_lookup_symbol_in_namespace (const char *namespace,
@@ -260,30 +252,18 @@ cp_lookup_symbol_in_namespace (const char *namespace,
 {
   if (namespace[0] == '\0')
     {
-      struct symbol *sym = lookup_symbol_file (name, block, domain, 0, search);
-
-      if (sym == NULL && domain == VAR_DOMAIN)
-       sym = lookup_symbol_file (name, block, STRUCT_DOMAIN, 0, search);
-
-      return sym;
+      return lookup_symbol_file (name, block, domain, 0, search);
     }
   else
     {
-      struct symbol *sym;
       char *concatenated_name = alloca (strlen (namespace) + 2
                                        + strlen (name) + 1);
 
       strcpy (concatenated_name, namespace);
       strcat (concatenated_name, "::");
       strcat (concatenated_name, name);
-      sym = lookup_symbol_file (concatenated_name, block, domain,
-                               cp_is_anonymous (namespace), search);
-
-      if (sym == NULL && domain == VAR_DOMAIN)
-       sym = lookup_symbol_file (concatenated_name, block, STRUCT_DOMAIN,
-                                 cp_is_anonymous (namespace), search);
-
-      return sym;
+      return lookup_symbol_file (concatenated_name, block, domain,
+                                cp_is_anonymous (namespace), search);
     }
 }
 
@@ -536,12 +516,7 @@ cp_lookup_symbol_imports_or_template (const char *scope,
  /* Searches for NAME in the current namespace, and by applying
     relevant import statements belonging to BLOCK and its parents.
     SCOPE is the namespace scope of the context in which the search is
-    being evaluated.
-
-    Class, union, and enum tag names may be used in C++ without specifying
-    class-key or enum.  If searching for a VAR_DOMAIN symbol fails,
-    this function will search STRUCT_DOMAIN.  [This is done in
-    cp_lookup_symbol_in_namespace.]  */
+    being evaluated.  */
 
 struct symbol*
 cp_lookup_symbol_namespace (const char *scope,
@@ -718,7 +693,7 @@ lookup_symbol_file (const char *name,
 
       /* Lookup a class named KLASS.  If none is found, there is nothing
         more that can be done.  */
-      klass_sym = lookup_symbol_global (klass, block, STRUCT_DOMAIN);
+      klass_sym = lookup_symbol_global (klass, block, domain);
       if (klass_sym == NULL)
        {
          do_cleanups (cleanup);
index 91533e8e4ece62353232e610686e27c8dcf26f26..2379b54c2b0251764c5ddb137b0c80a68b20bc26 100644 (file)
@@ -35,7 +35,6 @@
 #include "expression.h"
 #include "value.h"
 #include "cp-abi.h"
-#include "language.h"
 
 #include "safe-ctype.h"
 
@@ -178,29 +177,7 @@ inspect_type (struct demangle_parse_info *info,
   sym = NULL;
   TRY_CATCH (except, RETURN_MASK_ALL)
   {
-    /* It is not legal to have a typedef and tag name of the same
-       name in C++.  However, anonymous composite types that are defined
-       with a typedef ["typedef struct {...} anonymous_struct;"] WILL
-       have symbols for a TYPE_CODE_TYPEDEF (in VAR_DOMAIN) and a
-       TYPE_CODE_STRUCT (in STRUCT_DOMAIN).
-
-       If VAR_DOMAIN is searched first, it will return the TYPEDEF symbol,
-       and this function will never output the definition of the typedef,
-       since type_print is called below with SHOW = -1. [The typedef hash
-       is never initialized/used when SHOW <= 0 -- and the finder
-       (find_typedef_for_canonicalize) will always return NULL as a result.]
-
-       Consequently, type_print will eventually keep calling this function
-       to replace the typedef (via
-       print_name_maybe_canonical/cp_canonicalize_full).  This leads to
-       infinite recursion.
-
-       This can all be safely avoid by explicitly searching STRUCT_DOMAIN
-       first to find the structure definition.  */
-    if (current_language->la_language == language_cplus)
-      sym = lookup_symbol (name, 0, STRUCT_DOMAIN, 0);
-    if (sym == NULL)
-      sym = lookup_symbol (name, 0, VAR_DOMAIN, NULL);
+    sym = lookup_symbol (name, 0, VAR_DOMAIN, 0);
   }
 
   if (except.reason >= 0 && sym != NULL)
index 8f2de2ae729909ecef2e1fad86cf33d36b4572fc..2787f4cf8d3a4f1e630c1d7dbef6673b189e187e 100644 (file)
@@ -594,7 +594,8 @@ match_partial_symbol (struct objfile *objfile,
       while (top <= real_top
             && match (SYMBOL_SEARCH_NAME (*top), name) == 0)
        {
-         if (SYMBOL_DOMAIN (*top) == domain)
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (*top),
+                                    SYMBOL_DOMAIN (*top), domain))
            return *top;
          top++;
        }
@@ -607,7 +608,8 @@ match_partial_symbol (struct objfile *objfile,
     {
       for (psym = start; psym < start + length; psym++)
        {
-         if (SYMBOL_DOMAIN (*psym) == domain
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (*psym),
+                                    SYMBOL_DOMAIN (*psym), domain)
              && match (SYMBOL_SEARCH_NAME (*psym), name) == 0)
            return *psym;
        }
@@ -723,7 +725,8 @@ lookup_partial_symbol (struct objfile *objfile,
 
       while (top <= real_top && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name))
        {
-         if (SYMBOL_DOMAIN (*top) == domain)
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (*top),
+                                    SYMBOL_DOMAIN (*top), domain))
            {
              do_cleanups (cleanup);
              return (*top);
@@ -739,7 +742,8 @@ lookup_partial_symbol (struct objfile *objfile,
     {
       for (psym = start; psym < start + length; psym++)
        {
-         if (SYMBOL_DOMAIN (*psym) == domain
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (*psym),
+                                    SYMBOL_DOMAIN (*psym), domain)
              && SYMBOL_MATCHES_SEARCH_NAME (*psym, search_name))
            {
              do_cleanups (cleanup);
@@ -1219,7 +1223,8 @@ map_block (const char *name, domain_enum namespace, struct objfile *objfile,
   for (sym = block_iter_match_first (block, name, match, &iter);
        sym != NULL; sym = block_iter_match_next (name, match, &iter))
     {
-      if (SYMBOL_DOMAIN (sym) == namespace)
+      if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), 
+                                SYMBOL_DOMAIN (sym), namespace))
        {
          if (callback (block, sym, data))
            return 1;
index 15ac3d1dceab07838f9db4a69fe1947bb84f4806..66d16247ee262fadb1b2aeb37af85c2218eb60e5 100644 (file)
@@ -1310,11 +1310,7 @@ demangle_for_lookup (const char *name, enum language lang,
    NAME is a field of the current implied argument `this'.  If so set
    *IS_A_FIELD_OF_THIS to 1, otherwise set it to zero.
    BLOCK_FOUND is set to the block in which NAME is found (in the case of
-   a field of `this', value_of_this sets BLOCK_FOUND to the proper value.)
-
-   If DOMAIN is VAR_DOMAIN and the language permits using tag names for
-   elaborated types, such as classes in C++, this function will search
-   STRUCT_DOMAIN if no matching is found.  */
+   a field of `this', value_of_this sets BLOCK_FOUND to the proper value.)  */
 
 /* This function (or rather its subordinates) have a bunch of loops and
    it would seem to be attractive to put in some QUIT's (though I'm not really
@@ -1337,23 +1333,6 @@ lookup_symbol_in_language (const char *name, const struct block *block,
 
   returnval = lookup_symbol_aux (modified_name, block, domain, lang,
                                 is_a_field_of_this);
-  if (returnval == NULL)
-    {
-      if (is_a_field_of_this != NULL
-         && is_a_field_of_this->type != NULL)
-       return NULL;
-
-      /* Some languages define typedefs of a type equal to its tag name,
-        e.g., in C++, "struct foo { ... }" also defines a typedef for
-        "foo".  */
-      if (domain == VAR_DOMAIN
-         && (lang == language_cplus || lang == language_java
-             || lang == language_ada || lang == language_d))
-       {
-         returnval = lookup_symbol_aux (modified_name, block, STRUCT_DOMAIN,
-                                        lang, is_a_field_of_this);
-       }
-    }
   do_cleanups (cleanup);
 
   return returnval;
@@ -1928,6 +1907,27 @@ lookup_symbol_global (const char *name,
   return lookup_data.result;
 }
 
+int
+symbol_matches_domain (enum language symbol_language,
+                      domain_enum symbol_domain,
+                      domain_enum domain)
+{
+  /* For C++ "struct foo { ... }" also defines a typedef for "foo".
+     A Java class declaration also defines a typedef for the class.
+     Similarly, any Ada type declaration implicitly defines a typedef.  */
+  if (symbol_language == language_cplus
+      || symbol_language == language_d
+      || symbol_language == language_java
+      || symbol_language == language_ada)
+    {
+      if ((domain == VAR_DOMAIN || domain == STRUCT_DOMAIN)
+         && symbol_domain == STRUCT_DOMAIN)
+       return 1;
+    }
+  /* For all other languages, strict match is required.  */
+  return (symbol_domain == domain);
+}
+
 /* Look up a type named NAME in the struct_domain.  The type returned
    must not be opaque -- i.e., must have at least one field
    defined.  */
@@ -2050,12 +2050,7 @@ basic_lookup_transparent_type (const char *name)
    binary search terminates, we drop through and do a straight linear
    search on the symbols.  Each symbol which is marked as being a ObjC/C++
    symbol (language_cplus or language_objc set) has both the encoded and
-   non-encoded names tested for a match.
-
-   This function specifically disallows domain mismatches.  If a language
-   defines a typedef for an elaborated type, such as classes in C++,
-   then this function will need to be called twice, once to search
-   VAR_DOMAIN and once to search STRUCT_DOMAIN.  */
+   non-encoded names tested for a match.  */
 
 struct symbol *
 lookup_block_symbol (const struct block *block, const char *name,
@@ -2070,7 +2065,8 @@ lookup_block_symbol (const struct block *block, const char *name,
           sym != NULL;
           sym = block_iter_name_next (name, &iter))
        {
-         if (SYMBOL_DOMAIN (sym) == domain)
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
+                                    SYMBOL_DOMAIN (sym), domain))
            return sym;
        }
       return NULL;
@@ -2089,7 +2085,8 @@ lookup_block_symbol (const struct block *block, const char *name,
           sym != NULL;
           sym = block_iter_name_next (name, &iter))
        {
-         if (SYMBOL_DOMAIN (sym) == domain)
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
+                                    SYMBOL_DOMAIN (sym), domain))
            {
              sym_found = sym;
              if (!SYMBOL_IS_ARGUMENT (sym))
@@ -2123,7 +2120,8 @@ iterate_over_symbols (const struct block *block, const char *name,
        sym != NULL;
        sym = block_iter_name_next (name, &iter))
     {
-      if (SYMBOL_DOMAIN (sym) == domain)
+      if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
+                                SYMBOL_DOMAIN (sym), domain))
        {
          if (!callback (sym, data))
            return;
index efc3643b3ec7b6d65dbadcca112828a6df02f0af..fbe58689c12d7c7db6225f79791c54edfcf3e3e7 100644 (file)
@@ -1019,6 +1019,10 @@ extern const char multiple_symbols_cancel[];
 
 const char *multiple_symbols_select_mode (void);
 
+int symbol_matches_domain (enum language symbol_language, 
+                          domain_enum symbol_domain,
+                          domain_enum domain);
+
 /* lookup a symbol table by source file name.  */
 
 extern struct symtab *lookup_symtab (const char *);
index 9c8da4a203f0b90156fbf55b4449986f8e2c4324..35ff0b2a4708531cad67b6ac65003e5e015d1e17 100644 (file)
@@ -1,3 +1,14 @@
+2014-06-07  Keith Seitz  <keiths@redhat.com>
+
+       Revert:
+       PR c++/16253
+       * gdb.cp/var-tag.cc: New file.
+       * gdb.cp/var-tag.exp: New file.
+       * gdb.dwarf2/dw2-ada-ffffffff.exp: Set the language to C++.
+       * gdb.dwarf2/dw2-anon-mptr.exp: Likewise.
+       * gdb.dwarf2/dw2-double-set-die-type.exp: Likewise.
+       * gdb.dwarf2/dw2-inheritance.exp: Likewise.
+
 2014-06-06  Doug Evans  <xdje42@gmail.com>
 
        * gdb.guile/scm-frame-args.c (foo): Tweak to work with gcc 4.6.3.
diff --git a/gdb/testsuite/gdb.cp/var-tag.cc b/gdb/testsuite/gdb.cp/var-tag.cc
deleted file mode 100644 (file)
index 93b9caf..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* This testcase is part of GDB, the GNU debugger.
-
-   Copyright 2014 Free Software Foundation, Inc.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-int global = 3;
-
-class C {
-public:
-  struct C1 {} C1;
-  enum E1 {a1, b1, c1} E1;
-  union U1 {int a1; char b1;} U1;
-
-  C () : E1 (b1) {}
-  void global (void) const {}
-  int f (void) const { global (); return 0; }
-} C;
-
-struct S {} S;
-enum E {a, b, c} E;
-union U {int a; char b;} U;
-
-class CC {} cc;
-struct SS {} ss;
-enum EE {ea, eb, ec} ee;
-union UU {int aa; char bb;} uu;
-
-int
-main (void)
-{
-  return C.f ();
-}
diff --git a/gdb/testsuite/gdb.cp/var-tag.exp b/gdb/testsuite/gdb.cp/var-tag.exp
deleted file mode 100644 (file)
index 9e46282..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-# Copyright 2014 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# This file is part of the gdb testsuite
-
-# Test expressions in which variable names shadow tag names.
-
-if {[skip_cplus_tests]} { continue }
-
-standard_testfile .cc
-
-if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
-    return -1
-}
-
-proc do_global_tests {lang} {
-    if {$lang == "c++"} {
-       set opt_underlying "(: unsigned int )?"
-    } else {
-       set opt_underlying ""
-    }
-
-    if {$lang == "c"} {
-       set invalid_print "No symbol \"%s\" in current context."
-       set ptypefmt $invalid_print
-    } else {
-       set invalid_print "Attempt to use a type name as an expression"
-       set ptypefmt "type = (class|enum|union|struct) %s $opt_underlying{.*}"
-    }
-
-    with_test_prefix $lang {
-       gdb_test_no_output "set language $lang"
-       gdb_test "ptype C" "type = class C {.*}"
-       gdb_test "print E" "= a"
-       gdb_test "ptype E" "type = enum E $opt_underlying{.*}"
-       gdb_test "print S" "= {<No data fields>}"
-       gdb_test "ptype S" "type = struct S {.*}"
-       gdb_test "print U" "= {.*}"
-       gdb_test "ptype U" "type = union U {.*}"
-       gdb_test "print cc" "= {.*}"
-       gdb_test "ptype cc" "type = class CC {.*}"
-       gdb_test "print CC" [format $invalid_print "CC"]
-       gdb_test "ptype CC" [format $ptypefmt "CC"]
-       gdb_test "print ss" "= {<No data fields>}"
-       gdb_test "ptype ss" "type = struct SS {.*}"
-       gdb_test "print SS" [format $invalid_print "SS"]
-       gdb_test "ptype SS" [format $ptypefmt "SS"]
-       gdb_test "print ee" "= .*"
-       gdb_test "ptype ee" "type = enum EE $opt_underlying{.*}"
-       gdb_test "print EE" [format $invalid_print "EE"]
-       gdb_test "ptype EE" [format $ptypefmt "EE"]
-       gdb_test "print uu" "= {.*}"
-       gdb_test "ptype uu" "type = union UU {.*}"
-       gdb_test "print UU" [format $invalid_print  "UU"]
-       gdb_test "ptype UU" [format $ptypefmt "UU"]
-    }
-}
-
-# First test expressions when there is no context.
-with_test_prefix "before start" {
-    do_global_tests c++
-    do_global_tests c
-}
-
-# Run to main and test again.
-if {![runto_main]} {
-    perror "couldn't run to main"
-    continue
-}
-
-with_test_prefix "in main" {
-    do_global_tests c++
-    do_global_tests c
-}
-
-# Finally run to C::f and test again
-gdb_breakpoint "C::f"
-gdb_continue_to_breakpoint "continue to C::f"
-with_test_prefix "in C::f" {
-    do_global_tests c++
-    do_global_tests c
-}
-
-# Another hard-to-guess-the-users-intent bug...
-# It would be really nice if we could query the user!
-with_test_prefix "global collision" {
-    gdb_test_no_output "set language c++"
-    setup_kfail "c++/16463" "*-*-*"
-    gdb_test "print global" "= 3"
-
-    # ... with a simple workaround:
-    gdb_test "print ::global" "= 3"
-}
index 7936f253c6662fa84f53f7c2275ae3e647a2ca49..1c1d10f93a765f9791b2b0194059e46be87fa50d 100644 (file)
@@ -28,10 +28,6 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != ""
 
 clean_restart $executable
 
-# Force the language to C++, since we want to treat the type
-# defined in the object file like a C++ type, using sizeof.
-gdb_test_no_output "set language c++"
-
 # -1 was produced, it is now caught with the complaint:
 # Suspicious DW_AT_byte_size value treated as zero instead of ...
 gdb_test "p sizeof (t)" " = 0"
index c9e59ed66246e2715810fb262e3dc2994b7e2459..aef3cb88c83bdc1a860b69f0ade404323ee89807 100644 (file)
@@ -40,7 +40,5 @@ gdb_test "show cp-abi" {The currently selected C\+\+ ABI is "gnu-v3".*}
 
 gdb_load $binfile
 
-gdb_test_no_output "set language c++"
-
 gdb_test "ptype crash" \
     "type = class crash {\[\r\n \t\]*public:\[\r\n \t\]*crash\\(int \\(class {\\.\\.\\.}::\\*\\)\\(class {\\.\\.\\.} \\* const\\)\\);\[\r\n \t\]*}"
index 40daed936ff95ea80bfb1342f1d6e8fe1b3a36e5..7aabcfe74e20eabd536c23b7e168441c2882cfdc 100644 (file)
@@ -30,5 +30,4 @@ if  { [gdb_compile [file join $srcdir $subdir $srcfile] $binfile \
 }
 
 clean_restart $testfile
-gdb_test_no_output "set language c++"
 gdb_test "ptype a" "type = class .*"
index 028a1df86b874e259ff746ee10adc1305eb830ef..7c954bb128b61fc9bfff7db970f85d6e937205b6 100644 (file)
@@ -31,5 +31,4 @@ if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \
 
 clean_restart $testfile
 
-gdb_test_no_output "set language c++"
 gdb_test "ptype inherited" "type = class inherited .*"