This is an archive of the discontinued LLVM Phabricator instance.

[clang-tidy] Fix redundant-string-cstr check with msvc 14 headers.
ClosedPublic

Authored by etienneb on Mar 18 2016, 3:35 PM.

Details

Summary

The string constructors are not defined using optional parameters and are not recognize by the checker.

The constructor defined in the MSVC header is defined with 1 parameter. Therefore, patterns are not recognized by the checker.
The current patch add support to accept constructor with only one parameter.

Repro on a Visual Studio 14 installation with the following code:

void f1(const std::string &s) {
  f1(s.c_str());
}

In the xstring.h header, the constructors are defined this way:

basic_string(const _Myt& _Right) [...]
basic_string(const _Myt& _Right, const _Alloc& _Al) [...]

The CXXConstructExpr to recognize only contains 1 parameter.

CXXConstructExpr 0x3f1a070 <C:\src\llvm\examples\test.cc:6:6, col:14> 'const std::string':'const class std::basic_string<char, struct std::char_traits<char>, class
 std::allocator<char> >' 'void (const char *) __attribute__((thiscall))'
`-CXXMemberCallExpr 0x3f1a008 <col:6, col:14> 'const char *'
  `-MemberExpr 0x3f19fe0 <col:6, col:8> '<bound member function type>' .c_str 0x3cc22f8
    `-DeclRefExpr 0x3f19fc8 <col:6> 'const std::string':'const class std::basic_string<char, struct std::char_traits<char>, class std::allocator<char> >' lvalue ParmVar 0x3f19c80 's' 'const std::string &'

Diff Detail

Event Timeline

etienneb updated this revision to Diff 51078.Mar 18 2016, 3:35 PM
etienneb retitled this revision from to [clang-tidy] Fix redundant-string-cstr check with msvc 14 headers..
etienneb updated this object.
etienneb added reviewers: alexfh, aaron.ballman.
alexfh accepted this revision.Mar 22 2016, 6:35 AM
alexfh edited edge metadata.

Looks good. Thank you!

Do you need me to submit the patch for you?

This revision is now accepted and ready to land.Mar 22 2016, 6:35 AM
etienneb updated this revision to Diff 51308.Mar 22 2016, 11:01 AM
etienneb edited edge metadata.

rebased + fix invalid paths.

etienneb closed this revision.Mar 22 2016, 11:05 AM