[Bug libstdc++/78717] New: no definition of string::find when lowered to gimple

hiraditya at msn dot com gcc-bugzilla@gcc.gnu.org
Wed Dec 7 17:36:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78717

            Bug ID: 78717
           Summary: no definition of string::find when lowered to gimple
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hiraditya at msn dot com
  Target Milestone: ---

$ cat test.cpp

#include<string>

int foo(const std::string &s1, const std::string &s2, int i) {
 return s1.find(s2) == i;
}


../gcc/install/usr/bin/g++ -S -o a.s ../a.cpp -fdump-tree-all-all

$ cat a.cpp.004t.gimple

int foo(const string&, const string&, int) (const struct string & s1, const
struct string & s2, int i)
{
  intD.9 D.27718;

  # USE = anything
  # CLB = anything
  _1 =
_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4findERKS4_mD.18492
(s1D.24055, s2D.24056, 0);
  _2 = (long unsigned intD.14) iD.24057;
  _3 = _1 == _2;
  D.27718 = (intD.9) _3;
  return D.27718;
}


The problem is that now inliner cannot see the definition of std::string::find
and hence cannot inline it. Maybe because std::basic_string<char> is an extern
template, but I would hope that at least the definition should be visible to
the optimizer. That would help improve the performance of programs using
string::find.

Thanks,


More information about the Gcc-bugs mailing list