Template instantiation for C++ delete expression
llvm-svn: 72216
This commit is contained in:
parent
269f0b1b69
commit
29fe6aeef3
|
@ -89,7 +89,7 @@ namespace {
|
|||
OwningExprResult VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr *E);
|
||||
OwningExprResult VisitCXXZeroInitValueExpr(CXXZeroInitValueExpr *E);
|
||||
OwningExprResult VisitCXXNewExpr(CXXNewExpr *E);
|
||||
// FIXME: CXXDeleteExpr
|
||||
OwningExprResult VisitCXXDeleteExpr(CXXDeleteExpr *E);
|
||||
// FIXME: UnaryTypeTraitExpr
|
||||
// FIXME: QualifiedDeclRefExpr
|
||||
OwningExprResult VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E);
|
||||
|
@ -935,6 +935,18 @@ TemplateExprInstantiator::VisitCXXNewExpr(CXXNewExpr *E) {
|
|||
E->getSourceRange().getEnd());
|
||||
}
|
||||
|
||||
Sema::OwningExprResult
|
||||
TemplateExprInstantiator::VisitCXXDeleteExpr(CXXDeleteExpr *E) {
|
||||
OwningExprResult Operand = Visit(E->getArgument());
|
||||
if (Operand.isInvalid())
|
||||
return SemaRef.ExprError();
|
||||
|
||||
return SemaRef.ActOnCXXDelete(E->getSourceRange().getBegin(),
|
||||
E->isGlobalDelete(),
|
||||
E->isArrayForm(),
|
||||
move(Operand));
|
||||
}
|
||||
|
||||
Sema::OwningExprResult
|
||||
TemplateExprInstantiator::VisitCXXExprWithTemporaries(
|
||||
CXXExprWithTemporaries *E) {
|
||||
|
|
|
@ -44,7 +44,7 @@ struct Temporaries0 {
|
|||
template struct Temporaries0<5, 7>;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// new expressions
|
||||
// new/delete expressions
|
||||
// ---------------------------------------------------------------------
|
||||
struct Y { };
|
||||
|
||||
|
@ -83,3 +83,15 @@ struct New2 {
|
|||
template struct New2<X, int, float>;
|
||||
template struct New2<X, int, int*>; // expected-note{{instantiation}}
|
||||
// FIXME: template struct New2<int, int, float>;
|
||||
|
||||
template<typename T>
|
||||
struct Delete0 {
|
||||
void f(T t) {
|
||||
delete t; // expected-error{{cannot delete}}
|
||||
::delete [] t;
|
||||
}
|
||||
};
|
||||
|
||||
template struct Delete0<int*>;
|
||||
template struct Delete0<X*>;
|
||||
template struct Delete0<int>; // expected-note{{instantiation}}
|
||||
|
|
Loading…
Reference in New Issue