// See http://llvm.org/bugs/show_bug.cgi?id=11468 #include #include class Action { public: Action() {} void PrintString(const std::string& msg) const { fprintf(stderr, "%s\n", msg.c_str()); } void Throw(const char& arg) const { PrintString("PrintString called!"); // this line is important throw arg; } }; int main() { const Action a; fprintf(stderr, "&a before = %p\n", &a); try { a.Throw('c'); } catch(const char&) { fprintf(stderr, "&a in catch = %p\n", &a); } fprintf(stderr, "&a final = %p\n", &a); return 0; }