From: Chris Lattner Date: Mon, 4 May 2009 18:27:04 +0000 (+0000) Subject: "Fix" a problem with debug info in the presence of always_inline X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dcd808c1f9ef7cdd9fb7779beec3f3872261f0a4;p=clang "Fix" a problem with debug info in the presence of always_inline function calls. For a program like this: #include static __inline__ __attribute__((always_inline)) int bar(int x) { return 4; } int main() { int X = bar(4); printf("%d\n", X); } clang was not outputing any debug info for the body of main(). This is because the backend is getting confused by the region_start/end that clang is emitting for block scopes. For now, just disable these (matching llvm-gcc), this stuff is in progress of rework anyway. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70889 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp index 441047e1bc..7f73c8886c 100644 --- a/lib/CodeGen/CGStmt.cpp +++ b/lib/CodeGen/CGStmt.cpp @@ -126,7 +126,10 @@ RValue CodeGenFunction::EmitCompoundStmt(const CompoundStmt &S, bool GetLast, if (DI) { EnsureInsertPoint(); DI->setLocation(S.getLBracLoc()); - DI->EmitRegionStart(CurFn, Builder); + // FIXME: The llvm backend is currently not ready to deal with region_end + // for block scoping. In the presence of always_inline functions it gets so + // confused that it doesn't emit any debug info. Just disable this for now. + //DI->EmitRegionStart(CurFn, Builder); } // Keep track of the current cleanup stack depth. @@ -141,7 +144,11 @@ RValue CodeGenFunction::EmitCompoundStmt(const CompoundStmt &S, bool GetLast, if (DI) { EnsureInsertPoint(); DI->setLocation(S.getRBracLoc()); - DI->EmitRegionEnd(CurFn, Builder); + + // FIXME: The llvm backend is currently not ready to deal with region_end + // for block scoping. In the presence of always_inline functions it gets so + // confused that it doesn't emit any debug info. Just disable this for now. + //DI->EmitRegionEnd(CurFn, Builder); } RValue RV;