forked from OSchip/llvm-project
PR9615: make sure we destroy any temporaries returned by operator->.
I'm pretty sure this is the right fix, but I would appreciate it if someone else would double-check. llvm-svn: 128806
This commit is contained in:
parent
2642d34551
commit
2d9c47ea6c
|
@ -8934,7 +8934,8 @@ Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc) {
|
|||
if (CheckCallReturnType(Method->getResultType(), OpLoc, TheCall,
|
||||
Method))
|
||||
return ExprError();
|
||||
return Owned(TheCall);
|
||||
|
||||
return MaybeBindToTemporary(TheCall);
|
||||
}
|
||||
|
||||
/// FixOverloadedFunctionReference - E is an expression that refers to
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
// PR9615
|
||||
|
||||
struct Resource {
|
||||
void doit();
|
||||
};
|
||||
|
||||
template<int x> struct Lock {
|
||||
~Lock() { int a[x]; } // expected-error {{declared as an array with a negative size}}
|
||||
Resource* operator->() { return 0; }
|
||||
};
|
||||
|
||||
struct Accessor {
|
||||
Lock<-1> operator->();
|
||||
};
|
||||
|
||||
// Make sure we try to instantiate the destructor for Lock here
|
||||
void f() { Accessor acc; acc->doit(); } // expected-note {{requested here}}
|
||||
|
Loading…
Reference in New Issue