What John said, but also a narrower test would be good - checking that the appropriate call instruction gets a debug location, rather than checking that a bunch of inlining doesn't cause the assertion/verifier failure, would be good. (Clang tests should, as much as possible, not rely on or run the LLVM optimization passes - but check the IR coming directly from Clang before any of that)
On Wed, Oct 18, 2017 at 2:15 PM Yaxun Liu via Phabricator via cfe-commits < cfe-commits@lists.llvm.org> wrote: > yaxunl created this revision. > > Builder save/restores insertion pointer when emitting addr space cast > for alloca, but does not save/restore debug loc, which causes verifier > failure for certain call instructions. > > This patch fixes that. > > > https://reviews.llvm.org/D39069 > > Files: > lib/CodeGen/CGExpr.cpp > test/CodeGenOpenCL/func-call-dbg-loc.cl > > > Index: test/CodeGenOpenCL/func-call-dbg-loc.cl > =================================================================== > --- /dev/null > +++ test/CodeGenOpenCL/func-call-dbg-loc.cl > @@ -0,0 +1,34 @@ > +// RUN: %clang_cc1 -triple amdgcn---amdgizcl -debug-info-kind=limited > -dwarf-version=2 -debugger-tuning=gdb -O0 -emit-llvm -o - %s | FileCheck %s > +// Checks the file compiles without verifier error: inlinable function > call in a function with debug info must have a !dbg location. > + > +typedef struct > +{ > + float m_max; > +} Struct; > + > +typedef struct > +{ > + Struct m_volume; > +} Node; > + > + > +Struct buzz(Node node) > +{ > + return node.m_volume; > +} > + > +__attribute__((always_inline)) > +float bar(Struct aabb) > +{ > + return 0.0f; > +} > + > +__attribute__((used)) > +void foo() > +{ > + Node node; > + // CHECK: store float 0.000000e+00, float addrspace(5)* %f, align 4, > !dbg !{{[0-9]+}} > + float f = bar(buzz(node)); > +} > + > + > Index: lib/CodeGen/CGExpr.cpp > =================================================================== > --- lib/CodeGen/CGExpr.cpp > +++ lib/CodeGen/CGExpr.cpp > @@ -75,11 +75,13 @@ > if (CastToDefaultAddrSpace && getASTAllocaAddressSpace() != > LangAS::Default) { > auto DestAddrSpace = > getContext().getTargetAddressSpace(LangAS::Default); > auto CurIP = Builder.saveIP(); > + auto DbgLoc = Builder.getCurrentDebugLocation(); > Builder.SetInsertPoint(AllocaInsertPt); > V = getTargetHooks().performAddrSpaceCast( > *this, V, getASTAllocaAddressSpace(), LangAS::Default, > Ty->getPointerTo(DestAddrSpace), /*non-null*/ true); > Builder.restoreIP(CurIP); > + Builder.SetCurrentDebugLocation(DbgLoc); > } > > return Address(V, Align); > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits