1  /* PR sanitizer/80797 */
       2  /* { dg-do run } */
       3  /* { dg-options "-fsanitize=undefined" } */
       4  
       5  struct S
       6  {
       7    int i;
       8  };
       9  
      10  struct R
      11  {
      12    struct T {
      13      int i;
      14    } *t;
      15  } r;
      16  
      17  int
      18  main ()
      19  {
      20    struct S *s = 0;
      21    struct S *s2[1] = { };
      22  
      23    int *v1 = &s->i;
      24    int *v2 = &(*s).i;
      25    int *v3 = &s2[0]->i;
      26    int *v4 = &s->i + 1;
      27    int *v5 = &r.t->i;
      28  
      29    asm ("" : : "r" (&v1) : "memory");
      30    asm ("" : : "r" (&v2) : "memory");
      31    asm ("" : : "r" (&v3) : "memory");
      32    asm ("" : : "r" (&v4) : "memory");
      33    asm ("" : : "r" (&v5) : "memory");
      34  
      35    return 0;
      36  }
      37  
      38  /* { dg-output "member access within null pointer of type 'struct S'\[^\n\r]*(\n|\r\n|\r)" } */
      39  /* { dg-output "\[^\n\r]*member access within null pointer of type 'struct S'\[^\n\r]*(\n|\r\n|\r)" } */
      40  /* { dg-output "\[^\n\r]*member access within null pointer of type 'struct S'\[^\n\r]*(\n|\r\n|\r)" } */
      41  /* { dg-output "\[^\n\r]*member access within null pointer of type 'struct S'\[^\n\r]*(\n|\r\n|\r)" } */
      42  /* { dg-output "\[^\n\r]*member access within null pointer of type 'struct T'" } */