----- Original Message ----- > From: "Omair Javaid via lldb-commits" <lldb-commits@lists.llvm.org> > To: lldb-commits@lists.llvm.org > Sent: Tuesday, November 22, 2016 3:47:01 AM > Subject: [Lldb-commits] [lldb] r287631 - Fix build failure on Linux and BSD > by reverting r287597 > > Author: omjavaid > Date: Tue Nov 22 03:47:00 2016 > New Revision: 287631 > > URL: http://llvm.org/viewvc/llvm-project?rev=287631&view=rev > Log: > Fix build failure on Linux and BSD by reverting r287597 > > Linux and BSD builds failing after this changes from rev 287597.
Thanks. For me at least, it looked like this: /src/llvm/tools/lldb/include/lldb/Interpreter/Args.h:155:3: error: 'auto' return without trailing return type; deduced return types are a C++14 extension auto begin() const { return m_entries.begin(); } ^ /src/llvm/tools/lldb/include/lldb/Interpreter/Args.h:156:3: error: 'auto' return without trailing return type; deduced return types are a C++14 extension auto end() const { return m_entries.end(); } ^ /src/llvm/tools/lldb/include/lldb/Interpreter/Args.h:155:31: error: no viable conversion from returned value of type 'const_iterator' (aka '__normal_iterator<const lldb_private::Args::ArgEntry *, std::vector<lldb_private::Args::ArgEntry, std::allocator<lldb_private::Args::ArgEntry> > >') to function return type 'int' auto begin() const { return m_entries.begin(); } ^~~~~~~~~~~~~~~~~ /src/llvm/tools/lldb/include/lldb/Interpreter/Args.h:156:29: error: no viable conversion from returned value of type 'const_iterator' (aka '__normal_iterator<const lldb_private::Args::ArgEntry *, std::vector<lldb_private::Args::ArgEntry, std::allocator<lldb_private::Args::ArgEntry> > >') to function return type 'int' auto end() const { return m_entries.end(); } ^~~~~~~~~~~~~~~ -Hal > > > Modified: > lldb/trunk/include/lldb/Interpreter/Args.h > lldb/trunk/source/Breakpoint/BreakpointIDList.cpp > lldb/trunk/source/Commands/CommandObjectCommands.cpp > lldb/trunk/source/Commands/CommandObjectFrame.cpp > lldb/trunk/source/Commands/CommandObjectProcess.cpp > lldb/trunk/source/Commands/CommandObjectSettings.cpp > lldb/trunk/source/Interpreter/CommandInterpreter.cpp > lldb/trunk/source/Interpreter/OptionValueDictionary.cpp > > Modified: lldb/trunk/include/lldb/Interpreter/Args.h > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/Args.h?rev=287631&r1=287630&r2=287631&view=diff > ============================================================================== > --- lldb/trunk/include/lldb/Interpreter/Args.h (original) > +++ lldb/trunk/include/lldb/Interpreter/Args.h Tue Nov 22 03:47:00 > 2016 > @@ -150,13 +150,8 @@ public: > const char *GetArgumentAtIndex(size_t idx) const; > > llvm::ArrayRef<ArgEntry> entries() const { return m_entries; } > - char GetArgumentQuoteCharAtIndex(size_t idx) const; > - > - auto begin() const { return m_entries.begin(); } > - auto end() const { return m_entries.end(); } > > - size_t size() const { return GetArgumentCount(); } > - const ArgEntry &operator[](size_t n) const { return m_entries[n]; > } > + char GetArgumentQuoteCharAtIndex(size_t idx) const; > > //------------------------------------------------------------------ > /// Gets the argument vector. > > Modified: lldb/trunk/source/Breakpoint/BreakpointIDList.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointIDList.cpp?rev=287631&r1=287630&r2=287631&view=diff > ============================================================================== > --- lldb/trunk/source/Breakpoint/BreakpointIDList.cpp (original) > +++ lldb/trunk/source/Breakpoint/BreakpointIDList.cpp Tue Nov 22 > 03:47:00 2016 > @@ -122,12 +122,13 @@ void BreakpointIDList::FindAndReplaceIDR > llvm::StringRef range_from; > llvm::StringRef range_to; > llvm::StringRef current_arg; > + const size_t num_old_args = old_args.GetArgumentCount(); > std::set<std::string> names_found; > > - for (size_t i = 0; i < old_args.size(); ++i) { > + for (size_t i = 0; i < num_old_args; ++i) { > bool is_range = false; > > - current_arg = old_args[i].ref; > + current_arg = old_args.GetArgumentAtIndex(i); > if (!allow_locations && current_arg.contains('.')) { > result.AppendErrorWithFormat( > "Breakpoint locations not allowed, saw location: %s.", > @@ -151,17 +152,19 @@ void BreakpointIDList::FindAndReplaceIDR > return; > } else > names_found.insert(current_arg); > - } else if ((i + 2 < old_args.size()) && > - BreakpointID::IsRangeIdentifier(old_args[i + 1].ref) > && > + } else if ((i + 2 < num_old_args) && > + BreakpointID::IsRangeIdentifier( > + old_args.GetArgumentAtIndex(i + 1)) && > BreakpointID::IsValidIDExpression(current_arg) && > - BreakpointID::IsValidIDExpression(old_args[i + > 2].ref)) { > + BreakpointID::IsValidIDExpression( > + old_args.GetArgumentAtIndex(i + 2))) { > range_from = current_arg; > - range_to = old_args[i + 2].ref; > + range_to = old_args.GetArgumentAtIndex(i + 2); > is_range = true; > i = i + 2; > } else { > // See if user has specified id.* > - llvm::StringRef tmp_str = old_args[i].ref; > + llvm::StringRef tmp_str = old_args.GetArgumentAtIndex(i); > size_t pos = tmp_str.find('.'); > if (pos != llvm::StringRef::npos) { > llvm::StringRef bp_id_str = tmp_str.substr(0, pos); > > Modified: lldb/trunk/source/Commands/CommandObjectCommands.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectCommands.cpp?rev=287631&r1=287630&r2=287631&view=diff > ============================================================================== > --- lldb/trunk/source/Commands/CommandObjectCommands.cpp (original) > +++ lldb/trunk/source/Commands/CommandObjectCommands.cpp Tue Nov 22 > 03:47:00 2016 > @@ -1476,12 +1476,12 @@ public: > int match_start_point, int > max_return_elements, > bool &word_complete, > StringList &matches) override { > - llvm::StringRef completion_str = input[cursor_index].ref; > - completion_str = > completion_str.take_front(cursor_char_position); > + std::string > completion_str(input.GetArgumentAtIndex(cursor_index)); > + completion_str.erase(cursor_char_position); > > CommandCompletions::InvokeCommonCompletionCallbacks( > GetCommandInterpreter(), > CommandCompletions::eDiskFileCompletion, > - completion_str, match_start_point, max_return_elements, > nullptr, > + completion_str.c_str(), match_start_point, > max_return_elements, nullptr, > word_complete, matches); > return matches.GetSize(); > } > > Modified: lldb/trunk/source/Commands/CommandObjectFrame.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectFrame.cpp?rev=287631&r1=287630&r2=287631&view=diff > ============================================================================== > --- lldb/trunk/source/Commands/CommandObjectFrame.cpp (original) > +++ lldb/trunk/source/Commands/CommandObjectFrame.cpp Tue Nov 22 > 03:47:00 2016 > @@ -473,12 +473,12 @@ public: > bool &word_complete, > StringList &matches) override { > // Arguments are the standard source file completer. > - auto completion_str = input[cursor_index].ref; > - completion_str = > completion_str.take_front(cursor_char_position); > + std::string > completion_str(input.GetArgumentAtIndex(cursor_index)); > + completion_str.erase(cursor_char_position); > > CommandCompletions::InvokeCommonCompletionCallbacks( > GetCommandInterpreter(), > CommandCompletions::eVariablePathCompletion, > - completion_str, match_start_point, max_return_elements, > nullptr, > + completion_str.c_str(), match_start_point, > max_return_elements, nullptr, > word_complete, matches); > return matches.GetSize(); > } > > Modified: lldb/trunk/source/Commands/CommandObjectProcess.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectProcess.cpp?rev=287631&r1=287630&r2=287631&view=diff > ============================================================================== > --- lldb/trunk/source/Commands/CommandObjectProcess.cpp (original) > +++ lldb/trunk/source/Commands/CommandObjectProcess.cpp Tue Nov 22 > 03:47:00 2016 > @@ -1558,8 +1558,9 @@ protected: > int num_signals_set = 0; > > if (num_args > 0) { > - for (const auto &arg : signal_args) { > - int32_t signo = > signals_sp->GetSignalNumberFromName(arg.c_str()); > + for (size_t i = 0; i < num_args; ++i) { > + int32_t signo = signals_sp->GetSignalNumberFromName( > + signal_args.GetArgumentAtIndex(i)); > if (signo != LLDB_INVALID_SIGNAL_NUMBER) { > // Casting the actions as bools here should be okay, > because > // VerifyCommandOptionValue guarantees > @@ -1575,7 +1576,7 @@ protected: > ++num_signals_set; > } else { > result.AppendErrorWithFormat("Invalid signal name '%s'\n", > - arg.c_str()); > + > signal_args.GetArgumentAtIndex(i)); > } > } > } else { > > Modified: lldb/trunk/source/Commands/CommandObjectSettings.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectSettings.cpp?rev=287631&r1=287630&r2=287631&view=diff > ============================================================================== > --- lldb/trunk/source/Commands/CommandObjectSettings.cpp (original) > +++ lldb/trunk/source/Commands/CommandObjectSettings.cpp Tue Nov 22 > 03:47:00 2016 > @@ -293,10 +293,15 @@ protected: > bool DoExecute(Args &args, CommandReturnObject &result) override { > result.SetStatus(eReturnStatusSuccessFinishResult); > > + const size_t argc = args.GetArgumentCount(); > if (!args.empty()) { > - for (const auto &arg : args) { > + // TODO: Convert this to StringRef based enumeration. > Requires converting > + // DumpPropertyValue first. > + for (size_t i = 0; i < argc; ++i) { > + const char *property_path = args.GetArgumentAtIndex(i); > + > Error error(m_interpreter.GetDebugger().DumpPropertyValue( > - &m_exe_ctx, result.GetOutputStream(), arg.ref, > + &m_exe_ctx, result.GetOutputStream(), property_path, > OptionValue::eDumpGroupValue)); > if (error.Success()) { > result.GetOutputStream().EOL(); > > Modified: lldb/trunk/source/Interpreter/CommandInterpreter.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/CommandInterpreter.cpp?rev=287631&r1=287630&r2=287631&view=diff > ============================================================================== > --- lldb/trunk/source/Interpreter/CommandInterpreter.cpp (original) > +++ lldb/trunk/source/Interpreter/CommandInterpreter.cpp Tue Nov 22 > 03:47:00 2016 > @@ -1859,8 +1859,9 @@ int CommandInterpreter::HandleCompletion > // put an empty string in element 0. > std::string command_partial_str; > if (cursor_index >= 0) > - command_partial_str = > - > parsed_line[cursor_index].ref.take_front(cursor_char_position); > + > command_partial_str.assign(parsed_line.GetArgumentAtIndex(cursor_index), > + > parsed_line.GetArgumentAtIndex(cursor_index) > + > + cursor_char_position); > > std::string common_prefix; > matches.LongestCommonPrefix(common_prefix); > @@ -1871,7 +1872,7 @@ int CommandInterpreter::HandleCompletion > // Only do this if the completer told us this was a complete > word, > // however... > if (num_command_matches == 1 && word_complete) { > - char quote_char = parsed_line[cursor_index].quote; > + char quote_char = > parsed_line.GetArgumentQuoteCharAtIndex(cursor_index); > common_prefix = > Args::EscapeLLDBCommandArgument(common_prefix, > quote_char); > if (quote_char != '\0') > > Modified: lldb/trunk/source/Interpreter/OptionValueDictionary.cpp > URL: > http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionValueDictionary.cpp?rev=287631&r1=287630&r2=287631&view=diff > ============================================================================== > --- lldb/trunk/source/Interpreter/OptionValueDictionary.cpp > (original) > +++ lldb/trunk/source/Interpreter/OptionValueDictionary.cpp Tue Nov > 22 03:47:00 2016 > @@ -101,74 +101,73 @@ Error OptionValueDictionary::SetArgs(con > case eVarSetOperationAppend: > case eVarSetOperationReplace: > case eVarSetOperationAssign: > - if (argc == 0) { > - error.SetErrorString( > - "assign operation takes one or more key=value arguments"); > - return error; > - } > - for (const auto &entry : args) { > - if (entry.ref.empty()) { > - error.SetErrorString("empty argument"); > - return error; > - } > - if (!entry.ref.contains('=')) { > - error.SetErrorString( > - "assign operation takes one or more key=value > arguments"); > - return error; > - } > - > - llvm::StringRef key, value; > - std::tie(key, value) = entry.ref.split('='); > - bool key_valid = false; > - if (key.empty()) { > - error.SetErrorString("empty dictionary key"); > - return error; > - } > + if (argc > 0) { > + for (size_t i = 0; i < argc; ++i) { > + llvm::StringRef key_and_value(args.GetArgumentAtIndex(i)); > + if (!key_and_value.empty()) { > + if (key_and_value.find('=') == llvm::StringRef::npos) { > + error.SetErrorString( > + "assign operation takes one or more key=value > arguments"); > + return error; > + } > > - if (key.front() == '[') { > - // Key name starts with '[', so the key value must be in > single or > - // double quotes like: > - // ['<key>'] > - // ["<key>"] > - if ((key.size() > 2) && (key.back() == ']')) { > - // Strip leading '[' and trailing ']' > - key = key.substr(1, key.size() - 2); > - const char quote_char = key.front(); > - if ((quote_char == '\'') || (quote_char == '"')) { > - if ((key.size() > 2) && (key.back() == quote_char)) { > - // Strip the quotes > - key = key.substr(1, key.size() - 2); > + std::pair<llvm::StringRef, llvm::StringRef> kvp( > + key_and_value.split('=')); > + llvm::StringRef key = kvp.first; > + bool key_valid = false; > + if (!key.empty()) { > + if (key.front() == '[') { > + // Key name starts with '[', so the key value must be > in single or > + // double quotes like: > + // ['<key>'] > + // ["<key>"] > + if ((key.size() > 2) && (key.back() == ']')) { > + // Strip leading '[' and trailing ']' > + key = key.substr(1, key.size() - 2); > + const char quote_char = key.front(); > + if ((quote_char == '\'') || (quote_char == '"')) { > + if ((key.size() > 2) && (key.back() == > quote_char)) { > + // Strip the quotes > + key = key.substr(1, key.size() - 2); > + key_valid = true; > + } > + } else { > + // square brackets, no quotes > + key_valid = true; > + } > + } > + } else { > + // No square brackets or quotes > key_valid = true; > } > + } > + if (!key_valid) { > + error.SetErrorStringWithFormat( > + "invalid key \"%s\", the key must be a bare string > or " > + "surrounded by brackets with optional quotes: > [<key>] or " > + "['<key>'] or [\"<key>\"]", > + kvp.first.str().c_str()); > + return error; > + } > + > + lldb::OptionValueSP > value_sp(CreateValueFromCStringForTypeMask( > + kvp.second.data(), m_type_mask, error)); > + if (value_sp) { > + if (error.Fail()) > + return error; > + m_value_was_set = true; > + SetValueForKey(ConstString(key), value_sp, true); > } else { > - // square brackets, no quotes > - key_valid = true; > + error.SetErrorString("dictionaries that can contain > multiple types " > + "must subclass OptionValueArray"); > } > + } else { > + error.SetErrorString("empty argument"); > } > - } else { > - // No square brackets or quotes > - key_valid = true; > - } > - if (!key_valid) { > - error.SetErrorStringWithFormat( > - "invalid key \"%s\", the key must be a bare string or " > - "surrounded by brackets with optional quotes: [<key>] or > " > - "['<key>'] or [\"<key>\"]", > - key.str().c_str()); > - return error; > - } > - > - lldb::OptionValueSP > value_sp(CreateValueFromCStringForTypeMask( > - value.str().c_str(), m_type_mask, error)); > - if (value_sp) { > - if (error.Fail()) > - return error; > - m_value_was_set = true; > - SetValueForKey(ConstString(key), value_sp, true); > - } else { > - error.SetErrorString("dictionaries that can contain multiple > types " > - "must subclass OptionValueArray"); > } > + } else { > + error.SetErrorString( > + "assign operation takes one or more key=value arguments"); > } > break; > > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits > -- Hal Finkel Lead, Compiler Technology and Programming Languages Leadership Computing Facility Argonne National Laboratory _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits