1*e796c77bSWalter Erquinigo #include <dlfcn.h>
299451b44SJordan Rupprecht #include <stdexcept>
3*e796c77bSWalter Erquinigo #include <stdio.h>
499451b44SJordan Rupprecht 
599451b44SJordan Rupprecht int twelve(int i) {
699451b44SJordan Rupprecht   return 12 + i; // break 12
799451b44SJordan Rupprecht }
899451b44SJordan Rupprecht 
999451b44SJordan Rupprecht int thirteen(int i) {
1099451b44SJordan Rupprecht   return 13 + i; // break 13
1199451b44SJordan Rupprecht }
1299451b44SJordan Rupprecht 
1399451b44SJordan Rupprecht namespace a {
1499451b44SJordan Rupprecht   int fourteen(int i) {
1599451b44SJordan Rupprecht     return 14 + i; // break 14
1699451b44SJordan Rupprecht   }
1799451b44SJordan Rupprecht }
1899451b44SJordan Rupprecht int main(int argc, char const *argv[]) {
19*e796c77bSWalter Erquinigo #if defined(__APPLE__)
20*e796c77bSWalter Erquinigo   const char *libother_name = "libother.dylib";
21*e796c77bSWalter Erquinigo #else
22*e796c77bSWalter Erquinigo   const char *libother_name = "libother.so";
23*e796c77bSWalter Erquinigo #endif
24*e796c77bSWalter Erquinigo 
25*e796c77bSWalter Erquinigo   void *handle = dlopen(libother_name, RTLD_NOW);
26*e796c77bSWalter Erquinigo   if (handle == nullptr) {
27*e796c77bSWalter Erquinigo     fprintf(stderr, "%s\n", dlerror());
28*e796c77bSWalter Erquinigo     exit(1);
29*e796c77bSWalter Erquinigo   }
30*e796c77bSWalter Erquinigo 
31*e796c77bSWalter Erquinigo   int (*foo)(int) = (int (*)(int))dlsym(handle, "foo");
32*e796c77bSWalter Erquinigo   if (foo == nullptr) {
33*e796c77bSWalter Erquinigo     fprintf(stderr, "%s\n", dlerror());
34*e796c77bSWalter Erquinigo     exit(2);
35*e796c77bSWalter Erquinigo   }
36*e796c77bSWalter Erquinigo   foo(12);
37*e796c77bSWalter Erquinigo 
3899451b44SJordan Rupprecht   for (int i=0; i<10; ++i) {
3999451b44SJordan Rupprecht     int x = twelve(i) + thirteen(i) + a::fourteen(i); // break loop
4099451b44SJordan Rupprecht   }
4199451b44SJordan Rupprecht   try {
4299451b44SJordan Rupprecht     throw std::invalid_argument( "throwing exception for testing" );
4399451b44SJordan Rupprecht   } catch (...) {
4499451b44SJordan Rupprecht     puts("caught exception...");
4599451b44SJordan Rupprecht   }
4699451b44SJordan Rupprecht   return 0;
4799451b44SJordan Rupprecht }
48