// { dg-do assemble  }
// GROUPS passed conversions
// cvt file
// From: solomon@cs.wisc.edu (Marvin Solomon)
// Message-Id: <9209141509.AA23124@gjetost.cs.wisc.edu>
// Subject: g++ 2.2.2 seems to be forgetting a "const"
// Date: Mon, 14 Sep 92 10:09:58 -0500

extern "C" int printf (const char *, ...);

struct A {
        int i;
};

struct B {
        int i;
        operator const A&() const;
};

B::operator const A&() const {
        static A a;
        a.i = i;
	/* APPLE LOCAL default to Wformat-security 5764921 */
        printf("convert B to A at %p\n", (void*)&a);
        return a;
}

void f(A &a) { // { dg-error "" } in passing argument
  /* APPLE LOCAL default to Wformat-security 5764921 */
  printf("A at %p is %d\n", (void*)&a, a.i);
}

int main() {
        B b;
        b.i = 99;
        f(b);// { dg-error "" } .*
}
