xref: /openbsd-src/gnu/llvm/compiler-rt/lib/asan/tests/asan_exceptions_test.cpp (revision 3cab2bb3f667058bece8e38b12449a63a9d73c4b)
1*3cab2bb3Spatrick // See http://llvm.org/bugs/show_bug.cgi?id=11468
2*3cab2bb3Spatrick #include <stdio.h>
3*3cab2bb3Spatrick #include <string>
4*3cab2bb3Spatrick 
5*3cab2bb3Spatrick class Action {
6*3cab2bb3Spatrick  public:
Action()7*3cab2bb3Spatrick   Action() {}
PrintString(const std::string & msg) const8*3cab2bb3Spatrick   void PrintString(const std::string& msg) const {
9*3cab2bb3Spatrick     fprintf(stderr, "%s\n", msg.c_str());
10*3cab2bb3Spatrick   }
Throw(const char & arg) const11*3cab2bb3Spatrick   void Throw(const char& arg) const {
12*3cab2bb3Spatrick     PrintString("PrintString called!");  // this line is important
13*3cab2bb3Spatrick     throw arg;
14*3cab2bb3Spatrick   }
15*3cab2bb3Spatrick };
16*3cab2bb3Spatrick 
main()17*3cab2bb3Spatrick int main() {
18*3cab2bb3Spatrick   const Action a;
19*3cab2bb3Spatrick   fprintf(stderr, "&a before = %p\n", &a);
20*3cab2bb3Spatrick   try {
21*3cab2bb3Spatrick     a.Throw('c');
22*3cab2bb3Spatrick   } catch(const char&) {
23*3cab2bb3Spatrick     fprintf(stderr, "&a in catch = %p\n", &a);
24*3cab2bb3Spatrick   }
25*3cab2bb3Spatrick   fprintf(stderr, "&a final = %p\n", &a);
26*3cab2bb3Spatrick   return 0;
27*3cab2bb3Spatrick }
28