[Bug c++/78651] New: Incorrect exception handling when catch clause uses local class and PIC and sanitizer are active
dyp-cpp at gmx dot net
gcc-bugzilla@gcc.gnu.org
Fri Dec 2 13:12:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78651
Bug ID: 78651
Summary: Incorrect exception handling when catch clause uses
local class and PIC and sanitizer are active
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: dyp-cpp at gmx dot net
Target Milestone: ---
Consider the following program:
#include <iostream>
#ifndef EXCEPTION_TYPE
# define EXCEPTION_TYPE LocalException
#endif
#define STRINGIFY(X) STRINGIFY2(X)
#define STRINGIFY2(X) #X
struct Exception {};
int main()
{
struct LocalException {};
try
{
std::cout << "throwing int\n";
throw 42;
}catch(EXCEPTION_TYPE const& d)
{
std::cout << "caught " STRINGIFY(EXCEPTION_TYPE) "\n";
}catch(...)
{
std::cout << "caught ...\n";
}
}
Compile with -fPIC -fsanitize=address on x86-64, then the first catch clause
(EXCEPTION_TYPE const&) is executed. If you drop either option (fPIC or
fsanitize), then the second catch clause is executed. I ran into this issue on
g++4.8.5, but the behaviour is still the same with the current master branch.
By setting -DEXCEPTION_TYPE=Exception, the first catch clause uses a non-local
class and is never executed, even with -fPIC and -fsanitize.
Problem does not occur on clang++.
More information about the Gcc-bugs
mailing list