[PATCH] AddressToLineMapper.h: Remove pointer to temporary string
Chris Johns
chrisj at rtems.org
Mon Jul 19 02:25:05 UTC 2021
Hi Alex,
This looks good and can be pushed. Thank you.
Chris
On 17/7/21 4:03 am, Alex White wrote:
> CID 1505281: Pointer to local outside scope
>
> Closes #4473
> ---
> tester/covoar/AddressToLineMapper.cc | 11 ++++++++---
> tester/covoar/AddressToLineMapper.h | 21 ++++++++++++++++-----
> 2 files changed, 24 insertions(+), 8 deletions(-)
>
> diff --git a/tester/covoar/AddressToLineMapper.cc b/tester/covoar/AddressToLineMapper.cc
> index c305e3b..838b156 100644
> --- a/tester/covoar/AddressToLineMapper.cc
> +++ b/tester/covoar/AddressToLineMapper.cc
> @@ -19,9 +19,13 @@ namespace Coverage {
> return is_end_sequence;
> }
>
> - const std::string& SourceLine::path() const
> + const std::string SourceLine::path() const
> {
> - return path_;
> + if (!path_) {
> + return "unknown";
> + } else {
> + return *path_;
> + }
> }
>
> int SourceLine::line() const
> @@ -31,7 +35,8 @@ namespace Coverage {
>
> void AddressLineRange::addSourceLine(const rld::dwarf::address& address)
> {
> - auto insertResult = sourcePaths.insert(address.path());
> + auto insertResult = sourcePaths.insert(
> + std::make_shared<std::string>(address.path()));
>
> sourceLines.emplace_back(
> SourceLine (
> diff --git a/tester/covoar/AddressToLineMapper.h b/tester/covoar/AddressToLineMapper.h
> index 88bf475..308925a 100644
> --- a/tester/covoar/AddressToLineMapper.h
> +++ b/tester/covoar/AddressToLineMapper.h
> @@ -8,6 +8,7 @@
> #define __ADDRESS_TO_LINE_MAPPER_H__
>
> #include <cstdint>
> +#include <memory>
> #include <set>
> #include <string>
> #include <vector>
> @@ -26,7 +27,7 @@ namespace Coverage {
>
> SourceLine()
> : address(0),
> - path_("unknown"),
> + path_(nullptr),
> line_num(-1),
> is_end_sequence(true)
> {
> @@ -34,7 +35,7 @@ namespace Coverage {
>
> SourceLine(
> uint64_t addr,
> - const std::string& src,
> + const std::shared_ptr<std::string>& src,
> int line,
> bool end_sequence
> ) : address(addr),
> @@ -64,7 +65,7 @@ namespace Coverage {
> *
> * @return Returns the source file path of this address
> */
> - const std::string& path() const;
> + const std::string path() const;
>
> /*!
> * This method gets the source line number of this address.
> @@ -84,7 +85,7 @@ namespace Coverage {
> * An iterator pointing to the location in the set that contains the
> * source file path of the address.
> */
> - const std::string& path_;
> + const std::shared_ptr<std::string> path_;
>
> /*!
> * The source line number of the address.
> @@ -100,7 +101,17 @@ namespace Coverage {
>
> typedef std::vector<SourceLine> SourceLines;
>
> - typedef std::set<std::string> SourcePaths;
> + /* This allows comparison of strings owned by shared_ptrs. */
> + struct SharedStringCmp {
> + bool operator()(
> + const std::shared_ptr<std::string>& lhs,
> + const std::shared_ptr<std::string>& rhs
> + ) const {
> + return *lhs < *rhs;
> + }
> + };
> +
> + typedef std::set<std::shared_ptr<std::string>, SharedStringCmp> SourcePaths;
>
> /*! @class AddressLineRange
> *
>
More information about the devel
mailing list