1 #include <stdio.h>
   2 #include "check_debug.h"
   3 
   4 struct foo {
   5         int (*func)(struct foo *);
   6         int a, b, c;
   7         int *p;
   8 };
   9 
  10 int frob1(struct foo *p)
  11 {
  12         __smatch_implied(*p->p);
  13 }
  14 
  15 int frob2(struct foo *p)
  16 {
  17         __smatch_implied(*p->p);
  18 }
  19 
  20 int x = 42;
  21 int y = 43;
  22 
  23 struct foo aaa = {
  24         .func = frob1,
  25         .a = 1, .b = 2, .c = 3,
  26         .p = &x,
  27 };
  28 struct foo bbb = {
  29         .func = frob2,
  30         .a = 10, .b = 11, .c = 13,
  31         .p = &y,
  32 };
  33 
  34 int main(void)
  35 {
  36         aaa.func(&aaa);
  37         bbb.func(&bbb);
  38         return 0;
  39 }
  40 
  41 /*
  42  * check-name: smatch mtag #7
  43  * check-command: validation/smatch_db_test.sh -I.. sm_mtag7.c
  44  *
  45  * check-output-start
  46 sm_mtag7.c:12 frob1() implied: *p->p = '42'
  47 sm_mtag7.c:17 frob2() implied: *p->p = '43'
  48  * check-output-end
  49  */