forked from OSchip/llvm-project
Fix source location of the initializer in
a copy initialization. Back out hack in objc rewriter. fixes radar 8213998. llvm-svn: 109024
This commit is contained in:
parent
45595cf99f
commit
3fd2a555d3
|
@ -5098,14 +5098,6 @@ void RewriteObjC::RewriteByRefVar(VarDecl *ND) {
|
||||||
startLoc = E->getLocStart();
|
startLoc = E->getLocStart();
|
||||||
startLoc = SM->getInstantiationLoc(startLoc);
|
startLoc = SM->getInstantiationLoc(startLoc);
|
||||||
endBuf = SM->getCharacterData(startLoc);
|
endBuf = SM->getCharacterData(startLoc);
|
||||||
if (dyn_cast<CXXConstructExpr>(E)) {
|
|
||||||
// Hack alter!
|
|
||||||
// SemaInit sets startLoc to beginning of the initialized variable when
|
|
||||||
// rhs involvs copy construction initialization. Must compensate for this.
|
|
||||||
if (char *atEqual = strchr(endBuf, '='))
|
|
||||||
endBuf = atEqual + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ByrefType += " " + Name;
|
ByrefType += " " + Name;
|
||||||
ByrefType += " = {(void*)";
|
ByrefType += " = {(void*)";
|
||||||
ByrefType += utostr(isa);
|
ByrefType += utostr(isa);
|
||||||
|
|
|
@ -3803,7 +3803,8 @@ InitializationSequence::Perform(Sema &S,
|
||||||
|
|
||||||
// Build a call to the selected constructor.
|
// Build a call to the selected constructor.
|
||||||
ASTOwningVector<&ActionBase::DeleteExpr> ConstructorArgs(S);
|
ASTOwningVector<&ActionBase::DeleteExpr> ConstructorArgs(S);
|
||||||
SourceLocation Loc = Kind.getLocation();
|
SourceLocation Loc = Kind.isCopyInit() ? Kind.getEqualLoc()
|
||||||
|
: Kind.getLocation();
|
||||||
|
|
||||||
// Determine the arguments required to actually perform the constructor
|
// Determine the arguments required to actually perform the constructor
|
||||||
// call.
|
// call.
|
||||||
|
@ -3819,11 +3820,11 @@ InitializationSequence::Perform(Sema &S,
|
||||||
// An explicitly-constructed temporary, e.g., X(1, 2).
|
// An explicitly-constructed temporary, e.g., X(1, 2).
|
||||||
unsigned NumExprs = ConstructorArgs.size();
|
unsigned NumExprs = ConstructorArgs.size();
|
||||||
Expr **Exprs = (Expr **)ConstructorArgs.take();
|
Expr **Exprs = (Expr **)ConstructorArgs.take();
|
||||||
S.MarkDeclarationReferenced(Kind.getLocation(), Constructor);
|
S.MarkDeclarationReferenced(Loc, Constructor);
|
||||||
CurInit = S.Owned(new (S.Context) CXXTemporaryObjectExpr(S.Context,
|
CurInit = S.Owned(new (S.Context) CXXTemporaryObjectExpr(S.Context,
|
||||||
Constructor,
|
Constructor,
|
||||||
Entity.getType(),
|
Entity.getType(),
|
||||||
Kind.getLocation(),
|
Loc,
|
||||||
Exprs,
|
Exprs,
|
||||||
NumExprs,
|
NumExprs,
|
||||||
Kind.getParenRange().getEnd(),
|
Kind.getParenRange().getEnd(),
|
||||||
|
|
|
@ -382,6 +382,8 @@ public:
|
||||||
return Locations[1];
|
return Locations[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isCopyInit() const { return Kind == SIK_Copy; }
|
||||||
|
|
||||||
/// \brief Retrieve the source range containing the locations of the open
|
/// \brief Retrieve the source range containing the locations of the open
|
||||||
/// and closing parentheses for value and direct initializations.
|
/// and closing parentheses for value and direct initializations.
|
||||||
SourceRange getParenRange() const {
|
SourceRange getParenRange() const {
|
||||||
|
|
Loading…
Reference in New Issue