(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
bad-binary-ops.c
       1  /* { dg-options "-fdiagnostics-show-caret" } */
       2  
       3  /* Adapted from https://gcc.gnu.org/wiki/ClangDiagnosticsComparison */
       4  
       5  typedef float __m128;
       6  void test_1 ()
       7  {
       8    __m128 myvec[2];
       9    int const *ptr;
      10    myvec[1]/ptr; /* { dg-error "invalid operands to binary /" } */
      11  
      12  /* TODO: ideally we'd underline "ptr" as well.
      13  { dg-begin-multiline-output "" }
      14     myvec[1]/ptr;
      15     ~~~~~~~~^
      16          |
      17          __m128
      18  { dg-end-multiline-output "" } */
      19  
      20  
      21  }
      22  
      23  struct s {};
      24  struct t {};
      25  extern struct s some_function (void);
      26  extern struct t some_other_function (void);
      27  
      28  int test_2 (void)
      29  {
      30    return (some_function ()
      31  	  + some_other_function ()); /* { dg-error "invalid operands to binary \+" } */
      32  
      33  /* { dg-begin-multiline-output "" }
      34     return (some_function ()
      35             ~~~~~~~~~~~~~~~~
      36             |
      37             struct s
      38             + some_other_function ());
      39             ^ ~~~~~~~~~~~~~~~~~~~~~~
      40               |
      41               struct t
      42     { dg-end-multiline-output "" } */
      43  }
      44  
      45  int test_3 (struct s param_s, struct t param_t)
      46  {
      47    return param_s + param_t; // { dg-error "invalid operands to binary \+" }
      48  
      49  /* { dg-begin-multiline-output "" }
      50     return param_s + param_t;
      51                    ^
      52     { dg-end-multiline-output "" } */
      53  /* TODO: ideally we'd underline both params here.  */
      54  }
      55  
      56  typedef struct s S;
      57  typedef struct t T;
      58  
      59  extern S callee_4a (void);
      60  extern T callee_4b (void);
      61  
      62  int test_4 (void)
      63  {
      64    return callee_4a () + callee_4b (); /* { dg-error "invalid operands to binary \+" } */
      65  
      66  /* { dg-begin-multiline-output "" }
      67     return callee_4a () + callee_4b ();
      68            ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
      69            |              |
      70            |              T {aka struct t}
      71            S {aka struct s}
      72     { dg-end-multiline-output "" } */
      73  }
      74