Sema: Caught exception objects should be unqualified
The exception object should be unqualified. Using a qualified exception object results in the wrong copy constructor getting called when the catch handler executes. llvm-svn: 231054
This commit is contained in:
parent
a3ef8cad11
commit
fba75df599
|
@ -11933,7 +11933,7 @@ VarDecl *Sema::BuildExceptionDeclaration(Scope *S,
|
|||
//
|
||||
// We just pretend to initialize the object with itself, then make sure
|
||||
// it can be destroyed later.
|
||||
QualType initType = ExDeclType;
|
||||
QualType initType = Context.getExceptionObjectType(ExDeclType);
|
||||
|
||||
InitializedEntity entity =
|
||||
InitializedEntity::InitializeVariable(ExDecl);
|
||||
|
|
|
@ -146,7 +146,7 @@ namespace Decay {
|
|||
|
||||
void rval_ref() throw (int &&); // expected-error {{rvalue reference type 'int &&' is not allowed in exception specification}} expected-warning {{C++11}}
|
||||
|
||||
namespace ConstVolatile {
|
||||
namespace ConstVolatileThrow {
|
||||
struct S {
|
||||
S() {} // expected-note{{candidate constructor not viable}}
|
||||
S(const S &s); // expected-note{{candidate constructor not viable}}
|
||||
|
@ -158,3 +158,22 @@ void f() {
|
|||
throw CVS(); // expected-error{{no matching constructor for initialization}}
|
||||
}
|
||||
}
|
||||
|
||||
namespace ConstVolatileCatch {
|
||||
struct S {
|
||||
S() {}
|
||||
S(const volatile S &s);
|
||||
|
||||
private:
|
||||
S(const S &s); // expected-note {{declared private here}}
|
||||
};
|
||||
|
||||
void f();
|
||||
|
||||
void g() {
|
||||
try {
|
||||
f();
|
||||
} catch (volatile S s) { // expected-error {{calling a private constructor}}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue