<div dir="ltr"><div dir="ltr">Thanks for reverting the commit! Unfortunately I missed the failure back then.<div>I fixed the leak and recommitted the change in r350666.</div><div><br></div><div>Cheers,</div><div>Alex</div></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, 10 Jul 2018 at 12:53, Evgeniy Stepanov via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Author: eugenis<br>
Date: Tue Jul 10 12:49:07 2018<br>
New Revision: 336716<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=336716&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=336716&view=rev</a><br>
Log:<br>
Revert r336590 "[libclang] evalute compound statement cursors before trying to evaluate"<br>
<br>
New memory leaks in<br>
LibclangParseTest_EvaluateChildExpression_Test::TestBody()<br>
<br>
Modified:<br>
    cfe/trunk/tools/libclang/CIndex.cpp<br>
    cfe/trunk/unittests/libclang/LibclangTest.cpp<br>
<br>
Modified: cfe/trunk/tools/libclang/CIndex.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=336716&r1=336715&r2=336716&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=336716&r1=336715&r2=336716&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/tools/libclang/CIndex.cpp (original)<br>
+++ cfe/trunk/tools/libclang/CIndex.cpp Tue Jul 10 12:49:07 2018<br>
@@ -3890,19 +3890,6 @@ static const ExprEvalResult* evaluateExp<br>
 }<br>
<br>
 CXEvalResult clang_Cursor_Evaluate(CXCursor C) {<br>
-  if (clang_getCursorKind(C) == CXCursor_CompoundStmt) {<br>
-    const CompoundStmt *compoundStmt = cast<CompoundStmt>(getCursorStmt(C));<br>
-    Expr *expr = nullptr;<br>
-    for (auto *bodyIterator : compoundStmt->body()) {<br>
-      if ((expr = dyn_cast<Expr>(bodyIterator))) {<br>
-        break;<br>
-      }<br>
-    }<br>
-    if (expr)<br>
-      return const_cast<CXEvalResult>(<br>
-          reinterpret_cast<const void *>(evaluateExpr(expr, C)));<br>
-  }<br>
-<br>
   const Decl *D = getCursorDecl(C);<br>
   if (D) {<br>
     const Expr *expr = nullptr;<br>
@@ -3916,6 +3903,19 @@ CXEvalResult clang_Cursor_Evaluate(CXCur<br>
           evaluateExpr(const_cast<Expr *>(expr), C)));<br>
     return nullptr;<br>
   }<br>
+<br>
+  const CompoundStmt *compoundStmt = dyn_cast_or_null<CompoundStmt>(getCursorStmt(C));<br>
+  if (compoundStmt) {<br>
+    Expr *expr = nullptr;<br>
+    for (auto *bodyIterator : compoundStmt->body()) {<br>
+      if ((expr = dyn_cast<Expr>(bodyIterator))) {<br>
+        break;<br>
+      }<br>
+    }<br>
+    if (expr)<br>
+      return const_cast<CXEvalResult>(<br>
+          reinterpret_cast<const void *>(evaluateExpr(expr, C)));<br>
+  }<br>
   return nullptr;<br>
 }<br>
<br>
<br>
Modified: cfe/trunk/unittests/libclang/LibclangTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/libclang/LibclangTest.cpp?rev=336716&r1=336715&r2=336716&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/libclang/LibclangTest.cpp?rev=336716&r1=336715&r2=336716&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/unittests/libclang/LibclangTest.cpp (original)<br>
+++ cfe/trunk/unittests/libclang/LibclangTest.cpp Tue Jul 10 12:49:07 2018<br>
@@ -461,47 +461,6 @@ TEST_F(LibclangParseTest, AllSkippedRang<br>
   clang_disposeSourceRangeList(Ranges);<br>
 }<br>
<br>
-TEST_F(LibclangParseTest, EvaluateChildExpression) {<br>
-  std::string Main = "main.m";<br>
-  WriteFile(Main, "#define kFOO @\"foo\"\n"<br>
-                  "void foobar(void) {\n"<br>
-                  " {kFOO;}\n"<br>
-                  "}\n");<br>
-  ClangTU = clang_parseTranslationUnit(Index, Main.c_str(), nullptr, 0, nullptr,<br>
-                                       0, TUFlags);<br>
-<br>
-  CXCursor C = clang_getTranslationUnitCursor(ClangTU);<br>
-  clang_visitChildren(<br>
-      C,<br>
-      [](CXCursor cursor, CXCursor parent,<br>
-         CXClientData client_data) -> CXChildVisitResult {<br>
-        if (clang_getCursorKind(cursor) == CXCursor_FunctionDecl) {<br>
-          int numberedStmt = 0;<br>
-          clang_visitChildren(<br>
-              cursor,<br>
-              [](CXCursor cursor, CXCursor parent,<br>
-                 CXClientData client_data) -> CXChildVisitResult {<br>
-                int &numberedStmt = *((int *)client_data);<br>
-                if (clang_getCursorKind(cursor) == CXCursor_CompoundStmt) {<br>
-                  if (numberedStmt) {<br>
-                    CXEvalResult RE = clang_Cursor_Evaluate(cursor);<br>
-                    EXPECT_NE(RE, nullptr);<br>
-                    EXPECT_EQ(clang_EvalResult_getKind(RE),<br>
-                              CXEval_ObjCStrLiteral);<br>
-                    return CXChildVisit_Break;<br>
-                  }<br>
-                  numberedStmt++;<br>
-                }<br>
-                return CXChildVisit_Recurse;<br>
-              },<br>
-              &numberedStmt);<br>
-          EXPECT_EQ(numberedStmt, 1);<br>
-        }<br>
-        return CXChildVisit_Continue;<br>
-      },<br>
-      nullptr);<br>
-}<br>
-<br>
 class LibclangReparseTest : public LibclangParseTest {<br>
 public:<br>
   void DisplayDiagnostics() {<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>