summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2019-05-30 07:21:08 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2019-05-30 07:21:08 +0000
commit851f57effaaa8b13d345142f43dbed35e3047f23 (patch)
tree1866d81ffb231ca732259779b363315cd47066be
parentb19977d5afbff801b3228d89b14147397a935ffe (diff)
downloadbcm5719-llvm-851f57effaaa8b13d345142f43dbed35e3047f23.tar.gz
bcm5719-llvm-851f57effaaa8b13d345142f43dbed35e3047f23.zip
[AST] asm goto labels don't have constraints, don't try to copy them.
Found by asan. llvm-svn: 362062
-rw-r--r--clang/lib/AST/Stmt.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/AST/Stmt.cpp b/clang/lib/AST/Stmt.cpp
index e9a2c58f1a1..0a4d403106b 100644
--- a/clang/lib/AST/Stmt.cpp
+++ b/clang/lib/AST/Stmt.cpp
@@ -483,9 +483,10 @@ void GCCAsmStmt::setOutputsAndInputsAndClobbers(const ASTContext &C,
this->Exprs = new (C) Stmt*[NumExprs];
std::copy(Exprs, Exprs + NumExprs, this->Exprs);
+ unsigned NumConstraints = NumOutputs + NumInputs;
C.Deallocate(this->Constraints);
- this->Constraints = new (C) StringLiteral*[NumExprs];
- std::copy(Constraints, Constraints + NumExprs, this->Constraints);
+ this->Constraints = new (C) StringLiteral*[NumConstraints];
+ std::copy(Constraints, Constraints + NumConstraints, this->Constraints);
C.Deallocate(this->Clobbers);
this->Clobbers = new (C) StringLiteral*[NumClobbers];
@@ -756,8 +757,9 @@ GCCAsmStmt::GCCAsmStmt(const ASTContext &C, SourceLocation asmloc,
Exprs = new (C) Stmt*[NumExprs];
std::copy(exprs, exprs + NumExprs, Exprs);
- Constraints = new (C) StringLiteral*[NumExprs];
- std::copy(constraints, constraints + NumExprs, Constraints);
+ unsigned NumConstraints = NumOutputs + NumInputs;
+ Constraints = new (C) StringLiteral*[NumConstraints];
+ std::copy(constraints, constraints + NumConstraints, Constraints);
Clobbers = new (C) StringLiteral*[NumClobbers];
std::copy(clobbers, clobbers + NumClobbers, Clobbers);
OpenPOWER on IntegriCloud