I will simplify the test. Thanks. Sam
From: David Blaikie [mailto:dblai...@gmail.com] Sent: Monday, October 23, 2017 2:08 PM To: reviews+d39069+public+8da79e110d303...@reviews.llvm.org; Yaxun Liu via Phabricator <revi...@reviews.llvm.org>; Liu, Yaxun (Sam) <yaxun....@amd.com>; rjmcc...@gmail.com Cc: cfe-commits@lists.llvm.org Subject: Re: [PATCH] D39069: CodeGen: Fix missing debug loc due to alloca 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<mailto: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<http://func-call-dbg-loc.cl> Index: test/CodeGenOpenCL/func-call-dbg-loc.cl<http://func-call-dbg-loc.cl> =================================================================== --- /dev/null +++ test/CodeGenOpenCL/func-call-dbg-loc.cl<http://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<mailto: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