view gcc/testsuite/g++.dg/lookup/suggestions2.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line source

/* Suggestions involving namespaces.

   The long variable names in this test case are close enough that we offer
   spellchecking suggestions for them in the given namespace, with fix-it
   hints.

   The short variable names don't get spellchecking suggestions; instead
   we offer suggestions about other namespaces.  However, as we don't
   reliably have location information about the namespace part of the name,
   we shouldn't offer fix-it hints for such cases.  */

// { dg-do compile }
// { dg-options "-fdiagnostics-show-caret" }

namespace outer_ns {
  int var_in_outer_ns; // { dg-line decl_of_var_in_outer_ns }
  int o; // { dg-line decl_of_o }

  namespace inner_ns_a {
    int var_in_inner_ns_a;
    int a; // { dg-line decl_of_a }
  }
  namespace inner_ns_b {
    int var_in_inner_ns_b;
    int b; // { dg-line decl_of_b }
  }
}

/* This one should get spell-corrected within the same namespace,
   with a fix-it hint.  */

int test_1_long (void) {
  return outer_ns::var_in_inner_ns_a; // { dg-error "did you mean 'var_in_outer_ns'" }
  /* { dg-begin-multiline-output "" }
   return outer_ns::var_in_inner_ns_a;
                    ^~~~~~~~~~~~~~~~~
                    var_in_outer_ns
     { dg-end-multiline-output "" } */
}

/* This one should get a namespace suggestion (child namespace),
   with no fix-it hint.  */

int test_1_short (void) {
  return outer_ns::a; // { dg-error "did you mean 'outer_ns::inner_ns_a::a'" }
  /* { dg-begin-multiline-output "" }
   return outer_ns::a;
                    ^
     { dg-end-multiline-output "" } */
  // { dg-message "declared here" "" { target *-*-*} decl_of_a }
  /* { dg-begin-multiline-output "" }
     int a;
         ^
     { dg-end-multiline-output "" } */
}

/* This one should get spell-corrected within the same namespace,
   with a fix-it hint.  */

int test_2_long (void) {
  return outer_ns::inner_ns_a::var_in_outer_ns; // { dg-error "did you mean 'var_in_inner_ns_a'" }
  /* { dg-begin-multiline-output "" }
   return outer_ns::inner_ns_a::var_in_outer_ns;
                                ^~~~~~~~~~~~~~~
                                var_in_inner_ns_a
     { dg-end-multiline-output "" } */
}

/* This one should get a namespace suggestion (parent namespace),
   with no fix-it hint.  */

int test_2_short (void) {
  return outer_ns::inner_ns_a::o; // { dg-error "did you mean 'outer_ns::o'" }
  /* { dg-begin-multiline-output "" }
   return outer_ns::inner_ns_a::o;
                                ^
     { dg-end-multiline-output "" } */
  // { dg-message "declared here" "" { target *-*-*} decl_of_o }
  /* { dg-begin-multiline-output "" }
   int o;
       ^
     { dg-end-multiline-output "" } */
}

/* This one should get spell-corrected within the same namespace,
   with a fix-it hint.  */

int test_3_long (void) {
  return outer_ns::inner_ns_a::var_in_inner_ns_b; // { dg-error "did you mean 'var_in_inner_ns_a'" }
  /* { dg-begin-multiline-output "" }
   return outer_ns::inner_ns_a::var_in_inner_ns_b;
                                ^~~~~~~~~~~~~~~~~
                                var_in_inner_ns_a
     { dg-end-multiline-output "" } */
}

/* This one should get a namespace suggestion (sibling namespace),
   with no fix-it hint.  */

int test_3_short (void) {
  return outer_ns::inner_ns_a::b; // { dg-error "did you mean 'outer_ns::inner_ns_b::b'" }
  /* { dg-begin-multiline-output "" }
   return outer_ns::inner_ns_a::b;
                                ^
     { dg-end-multiline-output "" } */
  // { dg-message "declared here" "" { target *-*-*} decl_of_b }
  /* { dg-begin-multiline-output "" }
     int b;
         ^
     { dg-end-multiline-output "" } */
}

/* This one should get a namespace suggestion, from the global ns to a child ns.
   It should get a fix-it hint.  */

int test_4_long (void) {
  return ::var_in_outer_ns; // { dg-error "did you mean 'outer_ns::var_in_outer_ns'" }
  /* { dg-begin-multiline-output "" }
   return ::var_in_outer_ns;
            ^~~~~~~~~~~~~~~
            outer_ns::var_in_outer_ns
     { dg-end-multiline-output "" } */
  // { dg-message "declared here" "" { target *-*-*} decl_of_var_in_outer_ns }
  /* { dg-begin-multiline-output "" }
   int var_in_outer_ns;
       ^~~~~~~~~~~~~~~
     { dg-end-multiline-output "" } */
}