Hi,
1- Try to re-organize the new code in order to make possible using in *few* selected places _GLIBCXX_ATOMIC_BUILTINS_4 to enable / disable the new feature completely.
The necessary code changes for this are in the attached patch. Most of the code doesn't need to be touched, because the added code doesn't affect the non-exception_ptr case. The only thing that *needs* to change is that the reference counting is removed from __gxx_exception_cleanup. The reference count part of the __cxa_exception struct can stay - it's simply unused, except for the initialization in __cxa_throw. Of course, that additional field and the initialization can be ifdefed out too, if you want.
Ok, great, seems a sane approach to me. On the positive side, we should also consider that each day more machines (certainly most the new ones in the server / desktop / notebook classes) can use the new code.
The necessary configuration changes:
1) eh_ptr.cc must be excluded from compilation completely if the feature is unavailable.
2) The test cases must be excluded from the test runs.
Ok, I'll do this, it's rather straightforward.
3) It needs to be remembered whether propagation was included in the build. c++config needs to define _GLIBCXX_EXCEPTION_PTR_SUPPORTED on platforms where it was. The issue here is that I don't know if _GLIBCXX_ATOMIC_BUILTINS_4 keeps the value it had during the GCC build when client programs get compiled, and the client would get weird errors if it didn't. If it does, the new macro can simply be replaced.
Yes, no problem here too. In a first approximation, we can also avoid _GLIBCXX_EXCEPTION_PTR_SUPPORTED and just rely on _GLIBCXX_ATOMIC_BUILTINS_4. But if people would find that useful, we can at some point add code to acinclude.m4 to define at configure time _GLIBCXX_EXCEPTION_PTR_SUPPORTED consistently with the outcome for _GLIBCXX_ATOMIC_BUILTINS_4. Actually that strategy, defining at configure time fine-grained macros, one for each enabled / disabled C++0x feature which requires some sort of support not always available, seems a nice one in general, let's revisit the library about that in a few weeks, when we'll be feature complete for 4.4.0.

Paolo.

Reply via email to