[cfe-dev] [clang-tidy] using isInTemplateInstantiation asserts

Alexander Kornienko via cfe-dev cfe-dev at lists.llvm.org
Tue Apr 12 10:27:26 PDT 2016


I can't reproduce the issue (how I understand it) using clang-query, and
http://reviews.llvm.org/D18136 doesn't apply cleanly, since it depends on
some other patch.

$ cat /tmp/q.cc
namespace boost {
template <typename T, typename C>
T lexical_cast(const C&) {
  return T();
}
}

namespace std {
template <typename T>
class basic_string {};
using string = basic_string<char>;
}

int g();
long long f(int p);
using namespace boost;

template <typename T>
void string_as_T() {
  boost::lexical_cast<T>(42);
}

int main() { string_as_T<std::string>(); }

$ clang-query /tmp/q.cc -- -std=c++11
clang-query> m callExpr()

Match #1:

/tmp/q.cc:20:3: note: "root" binds here
  boost::lexical_cast<T>(42);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~

Match #2:

/tmp/q.cc:20:3: note: "root" binds here
  boost::lexical_cast<T>(42);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~

Match #3:

/tmp/q.cc:23:14: note: "root" binds here
int main() { string_as_T<std::string>(); }
             ^~~~~~~~~~~~~~~~~~~~~~~~~~
3 matches.
clang-query> m callExpr(unless(isInTemplateInstantiation()))

Match #1:

/tmp/q.cc:20:3: note: "root" binds here
  boost::lexical_cast<T>(42);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~

Match #2:

/tmp/q.cc:23:14: note: "root" binds here
int main() { string_as_T<std::string>(); }
             ^~~~~~~~~~~~~~~~~~~~~~~~~~
2 matches.
clang-query>


On Thu, Apr 7, 2016 at 8:25 PM, Piotr Padlewski <piotr.padlewski at gmail.com>
wrote:

> This should be enough to break this matcher
> http://pastebin.com/CH7a3hur
>
> 2016-04-07 18:56 GMT+02:00 Alexander Kornienko <alexfh at google.com>:
>
>> Can you provide a minimal test for this?
>>
>> On Thu, Apr 7, 2016 at 4:04 PM, Piotr Padlewski <
>> piotr.padlewski at gmail.com> wrote:
>>
>>> bump.
>>>
>>> 2016-04-04 20:48 GMT+02:00 Piotr Padlewski <piotr.padlewski at gmail.com>:
>>>
>>>>
>>>> Hi guys,
>>>> I am having trobles with isInTemplateInstantiation matcher. When I run
>>>> my matcher (http://reviews.llvm.org/D18136), it fails on the assert in
>>>> ASTTypeTraits.h:299, when KindId is NodeKindId::NKI_TemplateArgument.
>>>>
>>>> I think my matcher is fine, and there is bug somewhere. Can someone
>>>> please tell me if I am doing something wrong, and if not, why it doesn't
>>>> work and what I should fix?
>>>>
>>>> Here is my backtrace http://4programmers.net/Pastebin/5347
>>>>
>>>> Best
>>>> Piotr
>>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160412/08ab99e6/attachment.html>


More information about the cfe-dev mailing list