1e796c77bSWalter Erquinigo #include <dlfcn.h>
299451b44SJordan Rupprecht #include <stdexcept>
3e796c77bSWalter Erquinigo #include <stdio.h>
499451b44SJordan Rupprecht 
twelve(int i)599451b44SJordan Rupprecht int twelve(int i) {
699451b44SJordan Rupprecht   return 12 + i; // break 12
799451b44SJordan Rupprecht }
899451b44SJordan Rupprecht 
thirteen(int i)999451b44SJordan Rupprecht int thirteen(int i) {
1099451b44SJordan Rupprecht   return 13 + i; // break 13
1199451b44SJordan Rupprecht }
1299451b44SJordan Rupprecht 
1399451b44SJordan Rupprecht namespace a {
fourteen(int i)1499451b44SJordan Rupprecht   int fourteen(int i) {
1599451b44SJordan Rupprecht     return 14 + i; // break 14
1699451b44SJordan Rupprecht   }
1799451b44SJordan Rupprecht }
main(int argc,char const * argv[])1899451b44SJordan Rupprecht int main(int argc, char const *argv[]) {
19e796c77bSWalter Erquinigo #if defined(__APPLE__)
20e796c77bSWalter Erquinigo   const char *libother_name = "libother.dylib";
21e796c77bSWalter Erquinigo #else
22e796c77bSWalter Erquinigo   const char *libother_name = "libother.so";
23e796c77bSWalter Erquinigo #endif
24e796c77bSWalter Erquinigo 
25e796c77bSWalter Erquinigo   void *handle = dlopen(libother_name, RTLD_NOW);
26e796c77bSWalter Erquinigo   if (handle == nullptr) {
27e796c77bSWalter Erquinigo     fprintf(stderr, "%s\n", dlerror());
28e796c77bSWalter Erquinigo     exit(1);
29e796c77bSWalter Erquinigo   }
30e796c77bSWalter Erquinigo 
31e796c77bSWalter Erquinigo   int (*foo)(int) = (int (*)(int))dlsym(handle, "foo");
32e796c77bSWalter Erquinigo   if (foo == nullptr) {
33e796c77bSWalter Erquinigo     fprintf(stderr, "%s\n", dlerror());
34e796c77bSWalter Erquinigo     exit(2);
35e796c77bSWalter Erquinigo   }
36*8c6e138aSJeffrey Tan   foo(12); // before loop
37e796c77bSWalter 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   }
46*8c6e138aSJeffrey Tan   return 0; // after loop
4799451b44SJordan Rupprecht }
48