http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46097
Summary: Switch to warn of global variables in a C++ shared object Product: gcc Version: unknown Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: noloa...@gmail.com Feature reqeust only. Not a bug. C++ shared objects are an interesting beast under certain circumstances (many times, the shared object acts like a generic C module). Interesting includes: * C++ module * Shared object * Shared object throws an exception which will cross module boundaries * Shared object opened with RTLD_GLOBAL * Shared object has global objects with destructors Lots have been said about C++ exceptions, RTTI, type equality for the 'catch(const Exception&)', and RTLD_GLOBAL (versus RTLD_LOCAL) [1,2,3,4,5]. When a module meets the above compile and runtime requirements, a crash can occur in global objects with destructors when more than one process loads and subsequently unloads a shared object. A switch to warn of global variables in a compilation unit would be very helpful for those who are aware of the issue (and the circumstances to encounter the issue). It appears that GCC does not supply such a switch [6]. The switch would be useful for module writers since its not always feasible to 'hand audit' all project files. And a warning would be exetremely useful for package maintainers who don't write the module - they simply fixup the code and package it for a distribution. Perhaps -Wglobal-variable? Jeffrey Walton Baltimore, MD, US [1] Minimal GCC/Linux shared lib + EH bug example, http://gcc.gnu.org/ml/gcc/2002-05/msg00866.html [2] dlopen and placing exception body in .cpp file, http://gcc.gnu.org/ml/gcc-help/2010-08/msg00290.html [3] Comparing types across SOs (sic), http://groups.google.com/group/cryptopp-users/browse_thread/thread/eb815f228db50380 [4] Errors with multiple loading cryptopp as shared lib on Linux, http://groups.google.com/group/cryptopp-users/browse_thread/thread/68fbc22e8c6e2f48 [5] RTLD_GLOBAL and libcryptopp.so crash, http://groups.google.com/group/cryptopp-users/browse_thread/thread/7eae009a4e02e726 [6] Audit Use of Global Variables in C++ Shared Object (GCC Warning?), GCC-Help mailing list, October, 2010 [not yet indexed].