#include <iostream>
struct A {};
A a, b, c;
A* ptr = &a;
void report(A* p) {
std::cout << (void*) &a << ", " << (void*) &b << ", " << (void*) &c
<< ": " << (void*) p << "\n";
}
int f() {
std::cout << "f() ";
report(ptr);
}
int main() {
report(ptr);
if (ptr != nullptr) {
A* ptr = &b;
report(ptr);
if (ptr != nullptr) {
A* ptr = &c;
report(ptr);
}
report(ptr);
}
report(ptr);
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KCiAgICBzdHJ1Y3QgQSB7fTsKCiAgICBBIGEsIGIsIGM7CgogICAgQSogcHRyID0gJmE7CgogICAgdm9pZCByZXBvcnQoQSogcCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAodm9pZCopICZhIDw8ICIsICIgPDwgKHZvaWQqKSAmYiA8PCAiLCAiIDw8ICh2b2lkKikgJmMKICAgICAgICAgICAgICAgICAgPDwgIjogIiA8PCAodm9pZCopIHAgPDwgIlxuIjsKICAgIH0KCiAgICBpbnQgZigpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgImYoKSAiOwogICAgICAgIHJlcG9ydChwdHIpOwogICAgfQoKICAgIGludCBtYWluKCkgewogICAgICAgIHJlcG9ydChwdHIpOwogICAgICAgIGlmIChwdHIgIT0gbnVsbHB0cikgewogICAgICAgICAgICBBKiBwdHIgPSAmYjsKICAgICAgICAgICAgcmVwb3J0KHB0cik7CiAgICAgICAgICAgIGlmIChwdHIgIT0gbnVsbHB0cikgewogICAgICAgICAgICAgICAgQSogcHRyID0gJmM7CiAgICAgICAgICAgICAgICByZXBvcnQocHRyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXBvcnQocHRyKTsKICAgICAgICB9CiAgICAgICAgcmVwb3J0KHB0cik7CiAgICB9
0x8049c2f, 0x8049c2e, 0x8049c2d: 0x8049c2f
0x8049c2f, 0x8049c2e, 0x8049c2d: 0x8049c2e
0x8049c2f, 0x8049c2e, 0x8049c2d: 0x8049c2d
0x8049c2f, 0x8049c2e, 0x8049c2d: 0x8049c2e
0x8049c2f, 0x8049c2e, 0x8049c2d: 0x8049c2f