1 //===-- DWARFExpressionTest.cpp ----------------------------------*- C++-*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "lldb/Expression/DWARFExpression.h" 10 #include "lldb/Core/Value.h" 11 #include "lldb/Core/dwarf.h" 12 #include "lldb/Utility/StreamString.h" 13 #include "llvm/ADT/StringExtras.h" 14 #include "llvm/Testing/Support/Error.h" 15 #include "gtest/gtest.h" 16 17 using namespace lldb_private; 18 19 static llvm::Expected<Scalar> Evaluate(llvm::ArrayRef<uint8_t> expr) { 20 DataExtractor extractor(expr.data(), expr.size(), lldb::eByteOrderLittle, 21 /*addr_size*/ 4); 22 23 Value result; 24 Status status; 25 if (!DWARFExpression::Evaluate( 26 /*exe_ctx*/ nullptr, /*reg_ctx*/ nullptr, /*opcode_ctx*/ nullptr, 27 extractor, /*dwarf_cu*/ nullptr, /*offset*/ 0, expr.size(), 28 lldb::eRegisterKindLLDB, /*initial_value_ptr*/ nullptr, 29 /*object_address_ptr*/ nullptr, result, &status)) 30 return status.ToError(); 31 32 return result.GetScalar(); 33 } 34 35 TEST(DWARFExpression, DW_OP_pick) { 36 EXPECT_THAT_EXPECTED(Evaluate({DW_OP_lit1, DW_OP_lit0, DW_OP_pick, 0}), 37 llvm::HasValue(0)); 38 EXPECT_THAT_EXPECTED(Evaluate({DW_OP_lit1, DW_OP_lit0, DW_OP_pick, 1}), 39 llvm::HasValue(1)); 40 EXPECT_THAT_EXPECTED(Evaluate({DW_OP_lit1, DW_OP_lit0, DW_OP_pick, 2}), 41 llvm::Failed()); 42 } 43