SystemZ regression (was: r223825 - DebugInfo: Emit the correct location for initialization of a complex variable)
David Blaikie
dblaikie at gmail.com
Tue Jan 13 11:05:33 PST 2015
Did you see this failure on Clang ToT today? There was something like this
that I fixed a week or two ago (had introduced this about a week before
that).
Could you provide the crash report stuff (the reproduction file and shell
script/command line) so I can easily reproduce this?
On Tue, Jan 13, 2015 at 10:57 AM, Ulrich Weigand <Ulrich.Weigand at de.ibm.com>
wrote:
>
> David Blaikie wrote:
>
> +void ComplexExprEmitter::EmitStoreOfComplex(ComplexPairTy Val, LValue
> lvalue,
> + bool isInit,
> + SourceLocation DbgLoc) {
> + if (auto *DI = CGF.getDebugInfo())
> + DI->EmitLocation(CGF.Builder, DbgLoc);
> +
>
> This seems to have broken compiling functions that return complex values on
> SystemZ. This happens e.g. in the
> SingleSource/UnitTests/conditional-gnu-ext test-suite case. The symptom is
> a failed assertion:
>
> clang:
> /home/uweigand/llvm/llvm-head/tools/clang/lib/CodeGen/CGDebugInfo.cpp:2649:
> void clang::CodeGen::CGDebugInfo::EmitLocation
> (clang::CodeGen::CGBuilderTy&, clang::SourceLocation, bool): Assertion
> `!LexicalBlockStack.empty()' failed.
> 0 clang 0x000000008299efb0 llvm::sys::PrintStackTrace(_IO_FILE*) + 32
> 1 clang 0x000000008299d100
> 2 clang 0x000003ffffd82a2c
> 3 libc.so.6 0x0000004d7295dcfe gsignal + 70
> 4 libc.so.6 0x0000004d7295f652 abort + 326
> 5 libc.so.6 0x0000004d729553aa
> 6 libc.so.6 0x0000004d7295544c __assert_perror_fail + 0
> 7 clang 0x00000000805aa4fa
> 8 clang 0x00000000807088a0
> 9 clang 0x0000000080708bf8
> clang::CodeGen::CodeGenFunction::EmitStoreOfComplex(std::pair<llvm::Value*,
> llvm::Value*>, clang::CodeGen::LValue, bool, clang::SourceLocation) + 88
> 10 clang 0x00000000806b7d1c
> clang::CodeGen::CodeGenFunction::EmitFunctionEpilog
> (clang::CodeGen::CGFunctionInfo const&, bool, clang::SourceLocation) + 1180
> 11 clang 0x00000000805ef866
> clang::CodeGen::CodeGenFunction::FinishFunction(clang::SourceLocation) +
> 246
> 12 clang 0x00000000805f37be
> clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl,
> llvm::Function*, clang::CodeGen::CGFunctionInfo const&) + 798
>
> The call in EmitFunctionEpilog is from here:
>
> case ABIArgInfo::Indirect: {
> auto AI = CurFn->arg_begin();
> if (RetAI.isSRetAfterThis())
> ++AI;
> switch (getEvaluationKind(RetTy)) {
> case TEK_Complex: {
> ComplexPairTy RT =
> EmitLoadOfComplex(MakeNaturalAlignAddrLValue(ReturnValue, RetTy),
> EndLoc);
> EmitStoreOfComplex(RT, MakeNaturalAlignAddrLValue(AI, RetTy),
> /*isInit*/ true);
> break;
> }
>
> I'm not sure I understand exactly what's going on here, but it looks like
> LexicalBlockStack.empty() is simply supposed to be true at this point
> during epilog generation? In that case, the assertion would always
> fail ...
>
> I'm assuming this happens only on SystemZ because it is one of the few
> platforms that return complex values via implicit reference.
>
> Any suggestions how to fix this? Thanks!
>
>
> Mit freundlichen Gruessen / Best Regards
>
> Ulrich Weigand
>
> --
> Dr. Ulrich Weigand | Phone: +49-7031/16-3727
> STSM, GNU/Linux compilers and toolchain
> IBM Deutschland Research & Development GmbH
> Vorsitzende des Aufsichtsrats: Martina Koederitz | Geschäftsführung: Dirk
> Wittkopp
> Sitz der Gesellschaft: Böblingen | Registergericht: Amtsgericht
> Stuttgart, HRB 243294
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150113/55d798cd/attachment.html>
More information about the cfe-commits
mailing list