HomePhabricator

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

Authored by etienneb on Mar 22 2016, 11:00 AM.

Description

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

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 &'

Reviewers: aaron.ballman, alexfh

Subscribers: aemerson

Differential Revision: http://reviews.llvm.org/D18285

llvm-svn: 264075

Details

Committed
etiennebMar 22 2016, 11:00 AM
Differential Revision
D18285: [clang-tidy] Fix redundant-string-cstr check with msvc 14 headers.
Parents
rG190fadcdb245: Unicode support on Win32.
Branches
Unknown
Tags
Unknown