pull the constraint string into the ConstraintInfo struct
instead of passing it around in addition to it.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70135 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp
index 62623f3..ed5692c 100644
--- a/lib/Sema/SemaStmt.cpp
+++ b/lib/Sema/SemaStmt.cpp
@@ -922,15 +922,15 @@
return StmtError(Diag(Literal->getLocStart(),diag::err_asm_wide_character)
<< Literal->getSourceRange());
- std::string OutputConstraint(Literal->getStrData(),
- Literal->getByteLength());
-
- TargetInfo::ConstraintInfo Info;
- if (!Context.Target.validateOutputConstraint(OutputConstraint.c_str(),Info))
+ TargetInfo::ConstraintInfo Info(Literal->getStrData(),
+ Literal->getByteLength());
+ if (!Context.Target.validateOutputConstraint(Info))
return StmtError(Diag(Literal->getLocStart(),
- diag::err_asm_invalid_output_constraint) << OutputConstraint);
+ diag::err_asm_invalid_output_constraint)
+ << Info.getConstraintStr());
// Check that the output exprs are valid lvalues.
+ // FIXME: Operands to asms should not be parsed as ParenExprs.
ParenExpr *OutputExpr = cast<ParenExpr>(Exprs[i]);
if (CheckAsmLValue(OutputExpr, *this)) {
return StmtError(Diag(OutputExpr->getSubExpr()->getLocStart(),
@@ -947,17 +947,15 @@
return StmtError(Diag(Literal->getLocStart(),diag::err_asm_wide_character)
<< Literal->getSourceRange());
- std::string InputConstraint(Literal->getStrData(),
- Literal->getByteLength());
-
- TargetInfo::ConstraintInfo Info;
- if (!Context.Target.validateInputConstraint(InputConstraint.c_str(),
- &Names[0],
+ TargetInfo::ConstraintInfo Info(Literal->getStrData(),
+ Literal->getByteLength());
+ if (!Context.Target.validateInputConstraint(&Names[0],
&Names[0] + NumOutputs,
&OutputConstraintInfos[0],
Info)) {
return StmtError(Diag(Literal->getLocStart(),
- diag::err_asm_invalid_input_constraint) << InputConstraint);
+ diag::err_asm_invalid_input_constraint)
+ << Info.getConstraintStr());
}
ParenExpr *InputExpr = cast<ParenExpr>(Exprs[i]);
@@ -967,14 +965,15 @@
if (CheckAsmLValue(InputExpr, *this))
return StmtError(Diag(InputExpr->getSubExpr()->getLocStart(),
diag::err_asm_invalid_lvalue_in_input)
- << InputConstraint << InputExpr->getSubExpr()->getSourceRange());
+ << Info.getConstraintStr()
+ << InputExpr->getSubExpr()->getSourceRange());
}
if (Info.allowsRegister()) {
if (InputExpr->getType()->isVoidType()) {
return StmtError(Diag(InputExpr->getSubExpr()->getLocStart(),
diag::err_asm_invalid_type_in_input)
- << InputExpr->getType() << InputConstraint
+ << InputExpr->getType() << Info.getConstraintStr()
<< InputExpr->getSubExpr()->getSourceRange());
}
}