// RUN: %clang_cc1 -fsyntax-only %s 2>&1 | FileCheck %s

#define M1(x) x
#define M2 1;
void foo() {
  M1(
    M2);
  // CHECK: {{.*}}:6:{{[0-9]+}}: warning: expression result unused
  // CHECK: {{.*}}:7:{{[0-9]+}}: note: instantiated from:
  // CHECK: {{.*}}:4:{{[0-9]+}}: note: instantiated from:
}

#define A 1
#define B A
#define C B
void bar() {
  C;
  // CHECK: {{.*}}:17:{{[0-9]+}}: warning: expression result unused
  // CHECK: {{.*}}:15:{{[0-9]+}}: note: instantiated from:
  // CHECK: {{.*}}:14:{{[0-9]+}}: note: instantiated from:
  // CHECK: {{.*}}:13:{{[0-9]+}}: note: instantiated from:
}


// rdar://7597492
#define sprintf(str, A, B) \
__builtin___sprintf_chk (str, 0, 42, A, B)

void baz(char *Msg) {
  sprintf(Msg,  "  sizeof FoooLib            : =%3u\n",   12LL);
}