1  /* PR c/91134 */
       2  /* { dg-options "-fdiagnostics-show-caret" } */
       3  
       4  struct X { int member; } x;
       5  struct Y { struct X **x; } y;
       6  
       7  int
       8  foo (void)
       9  {
      10    struct X *pointer = &x;
      11    struct Y *yp = &y;
      12    struct X **pointerpointer = &pointer;
      13    int i = *pointerpointer->member;	/* { dg-error "'pointerpointer' is a pointer to pointer; did you mean to dereference it before applying '->' to it\\\?" } */
      14  /* { dg-begin-multiline-output "" }
      15     int i = *pointerpointer->member;
      16                            ^~
      17              (*            )
      18     { dg-end-multiline-output "" } */
      19    int j = pointer.member;		/* { dg-error "'pointer' is a pointer; did you mean to use '->'\\\?" } */
      20  /* { dg-begin-multiline-output "" }
      21     int j = pointer.member;
      22                    ^
      23                    ->
      24     { dg-end-multiline-output "" } */
      25    int k = yp->x->member;		/* { dg-error "'yp->x' is a pointer to pointer; did you mean to dereference it before applying '->' to it\\\?" } */
      26  /* { dg-begin-multiline-output "" }
      27     int k = yp->x->member;
      28                  ^~
      29             (*   )
      30     { dg-end-multiline-output "" } */
      31    return i + j + k;
      32  }