[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