diff options
author | Andrew Trick <atrick@apple.com> | 2015-02-16 18:10:47 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2015-02-16 18:10:47 +0000 |
commit | 05938a548139554dbc5bd44c9837da5f412ab85c (patch) | |
tree | cd7c7d2f8b602da68cda1fdbf44707a3c4c3c5c8 /llvm/lib/Target/Mips/MipsCCState.cpp | |
parent | c64150b8f3981835a23cf82377a243c163c92f47 (diff) | |
download | bcm5719-llvm-05938a548139554dbc5bd44c9837da5f412ab85c.tar.gz bcm5719-llvm-05938a548139554dbc5bd44c9837da5f412ab85c.zip |
AArch64: Safely handle the incoming sret call argument.
This adds a safe interface to the machine independent InputArg struct
for accessing the index of the original (IR-level) argument. When a
non-native return type is lowered, we generate the hidden
machine-level sret argument on-the-fly. Before this fix, we were
representing this argument as OrigArgIndex == 0, which is an outright
lie. In particular this crashed in the AArch64 backend where we
actually try to access the type of the original argument.
Now we use a sentinel value for machine arguments that have no
original argument index. AArch64, ARM, Mips, and PPC now check for this
case before accessing the original argument.
Fixes <rdar://19792160> Null pointer assertion in AArch64TargetLowering
llvm-svn: 229413
Diffstat (limited to 'llvm/lib/Target/Mips/MipsCCState.cpp')
-rw-r--r-- | llvm/lib/Target/Mips/MipsCCState.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/Mips/MipsCCState.cpp b/llvm/lib/Target/Mips/MipsCCState.cpp index e18cc8b1f7b..b8081295ca6 100644 --- a/llvm/lib/Target/Mips/MipsCCState.cpp +++ b/llvm/lib/Target/Mips/MipsCCState.cpp @@ -132,8 +132,8 @@ void MipsCCState::PreAnalyzeFormalArgumentsForF128( continue; } - assert(Ins[i].OrigArgIndex < MF.getFunction()->arg_size()); - std::advance(FuncArg, Ins[i].OrigArgIndex); + assert(Ins[i].getOrigArgIndex() < MF.getFunction()->arg_size()); + std::advance(FuncArg, Ins[i].getOrigArgIndex()); OriginalArgWasF128.push_back( originalTypeIsF128(FuncArg->getType(), nullptr)); |