Skip to content

Commit

Permalink
XFail TestLambdas.py on Windows after fixing some of the problems
Browse files Browse the repository at this point in the history
1. Fixed semicolon placement in the lambda in the test itself.

2. Fixed lldbinline tests in general so that we don't attempt tests on platforms that don't use the given type of debug info. (For example, no DWO tests on Windows.) This fixes one of the two failures on Windows. (TestLambdas.py was the only inline test that wasn't XFailed or skipped on Windows.)

3. Set the error string in IRInterpreter::CanInterpret so that the caller doesn't print (null) instead of an explanation. I don't entirely understand the error, so feel free to suggest a better wording.

4. XFailed the test on Windows. The interpreter won't evaluate the lambda because the module has multiple function bodies. I don't exactly understand why that's a problem for the interpreter nor why the problem arises only on Windows.

Differential Revision: http://reviews.llvm.org/D19606

llvm-svn: 268573
  • Loading branch information
amccarth-google committed May 4, 2016
1 parent 9de88d9 commit 3f99810
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 12 deletions.
@@ -1,4 +1,4 @@
from lldbsuite.test import lldbinline
from lldbsuite.test import decorators

lldbinline.MakeInlineTest(__file__, globals(), [])
lldbinline.MakeInlineTest(__file__, globals(), [lldbinline.expectedFailureAll(oslist=["windows"])])
6 changes: 3 additions & 3 deletions lldb/packages/Python/lldbsuite/test/lang/cpp/lambdas/main.cpp
Expand Up @@ -11,7 +11,7 @@

int main (int argc, char const *argv[])
{
printf("Stop here\n"); //% self.runCmd("expression auto $add = [](int a, int b) { return a + b };")
//% self.expect("expression $add(2,3)", substrs = ['= 5'])
return 0;
printf("Stop here\n"); //% self.runCmd("expression auto $add = [](int a, int b) { return a + b; }")
//% self.expect("expression $add(2,3)", substrs = ['= 5'])
return 0;
}
14 changes: 9 additions & 5 deletions lldb/packages/Python/lldbsuite/test/lldbinline.py
Expand Up @@ -186,7 +186,7 @@ def ApplyDecoratorsToFunction(func, decorators):
elif hasattr(decorators, '__call__'):
tmp = decorators(tmp)
return tmp


def MakeInlineTest(__file, __globals, decorators=None):
# Adjust the filename if it ends in .pyc. We want filenames to
Expand All @@ -200,13 +200,17 @@ def MakeInlineTest(__file, __globals, decorators=None):
InlineTest.mydir = TestBase.compute_mydir(__file)

test_name, _ = os.path.splitext(file_basename)
# Build the test case
# Build the test case
test = type(test_name, (InlineTest,), {'using_dsym': None})
test.name = test_name

test.test_with_dsym = ApplyDecoratorsToFunction(test._InlineTest__test_with_dsym, decorators)
test.test_with_dwarf = ApplyDecoratorsToFunction(test._InlineTest__test_with_dwarf, decorators)
test.test_with_dwo = ApplyDecoratorsToFunction(test._InlineTest__test_with_dwo, decorators)
target_platform = lldb.DBG.GetSelectedPlatform().GetTriple().split('-')[2]
if test_categories.is_supported_on_platform("dsym", target_platform):
test.test_with_dsym = ApplyDecoratorsToFunction(test._InlineTest__test_with_dsym, decorators)
if test_categories.is_supported_on_platform("dwarf", target_platform):
test.test_with_dwarf = ApplyDecoratorsToFunction(test._InlineTest__test_with_dwarf, decorators)
if test_categories.is_supported_on_platform("dwo", target_platform):
test.test_with_dwo = ApplyDecoratorsToFunction(test._InlineTest__test_with_dwo, decorators)

# Add the test case to the globals, and hide InlineTest
__globals.update({test_name : test})
Expand Down
14 changes: 11 additions & 3 deletions lldb/source/Expression/IRInterpreter.cpp
Expand Up @@ -477,6 +477,7 @@ static const char *memory_write_error = "Interpreter couldn't writ
static const char *memory_read_error = "Interpreter couldn't read from memory";
static const char *infinite_loop_error = "Interpreter ran for too many cycles";
//static const char *bad_result_error = "Result of expression is in bad memory";
static const char *too_many_functions_error = "Interpreter doesn't handle modules with multiple function bodies.";

static bool
CanResolveConstant (llvm::Constant *constant)
Expand Down Expand Up @@ -506,7 +507,7 @@ CanResolveConstant (llvm::Constant *constant)
Constant *base = dyn_cast<Constant>(*op_cursor);
if (!base)
return false;

return CanResolveConstant(base);
}
}
Expand Down Expand Up @@ -535,7 +536,13 @@ IRInterpreter::CanInterpret (llvm::Module &module,
if (fi->begin() != fi->end())
{
if (saw_function_with_body)
{
if (log)
log->Printf("More than one function in the module has a body");
error.SetErrorToGenericError();
error.SetErrorString(too_many_functions_error);
return false;
}
saw_function_with_body = true;
}
}
Expand Down Expand Up @@ -664,7 +671,7 @@ IRInterpreter::CanInterpret (llvm::Module &module,
return false;
}
}

if (Constant *constant = llvm::dyn_cast<Constant>(operand))
{
if (!CanResolveConstant(constant))
Expand All @@ -680,7 +687,8 @@ IRInterpreter::CanInterpret (llvm::Module &module,

}

return true;}
return true;
}

bool
IRInterpreter::Interpret (llvm::Module &module,
Expand Down

0 comments on commit 3f99810

Please sign in to comment.