Bug 1427412
| Summary: | Exception from a virtual function does not get caught | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Piyush Bhoot <pbhoot> |
| Component: | gcc | Assignee: | Jakub Jelinek <jakub> |
| Status: | CLOSED ERRATA | QA Contact: | Michael Petlan <mpetlan> |
| Severity: | high | Docs Contact: | |
| Priority: | high | ||
| Version: | 7.3 | CC: | mcermak, mpetlan, mpolacek |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | gcc-4.8.5-12.el7 | Doc Type: | If docs needed, set a value |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2017-08-01 22:35:59 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | |||
| Bug Blocks: | 1420851 | ||
The related test passes on all architectures with gcc-4.8.5-16.el7. VERIFIED. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2017:2094 |
Description of problem: Exception from a virtual function does not get caught with 03 optimization Version-Release number of selected component (if applicable): gcc-c++.x86_64 0:4.8.5-11.el7 How reproducible: Always Steps to Reproduce: 1. namespace { struct IFoo { virtual void foo() = 0; }; struct IBar { virtual void bar() = 0; }; struct FooBar : private IBar, private IFoo { void call_foo() { try { static_cast<IFoo*>(this)->foo(); } catch( ... ) {} } void foo() { throw 1; } void bar() {} }; void test() { FooBar foobar; foobar.call_foo(); } } int main() { test(); return 0; } 2. g++ -O3 -Wall -Wextra -pedantic main.cpp && ./a.out Actual results: terminate called after throwing an instance of 'int' Expected results: No errors Additional info: This is being regression upstream 4.8.5, 5.2.0, 5.3.0 as per upstream bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68184 Works with -O0 optimization.