Uploaded image for project: 'Qt Creator'
  1. Qt Creator
  2. QTCREATORBUG-22459

clang code model can't handle template method specializations in template class

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P2: Important
    • Qt Creator 7.0.0
    • Qt Creator 4.9.0
    • C/C++/Obj-C++ Support
    • Windows

    Description

      The clang code model can't properly handle template specializations in template class.

      For such minimal case:

      #include <iostream>
      
      template <typename T>
      class C
      {
      public:
      
          template <typename FOO>
          void fun()
          {
              std::cout << "main fun" << std::endl;
          }
      
          template <>
          void fun<void>()
          {
              std::cout << "spec fun" << std::endl;
          }
      };
      
      int main()
      {
          C<int> c;
          c.fun<void>();
          c.fun<int>();
          return 0;
      }
      

      Qtcreator gives:

      Note, that "fun" specialization is not recognized as a function, and all types inside "fun" specialization are not properly recognized.

      The project is a "generic project" with

      /std:c++17

      inside project's cxxflags file. The Kit's compiler is set to MVCC 15.0. Qtcreator was run with -temporarycleansettings

      DebugView with clangcodemodel ipc follows:

      [17920] qtc.clangcodemodel.ipc: Starting "C:/Qt/qtcreator-4.9.0/bin/clangbackend.exe"
      [17920] qtc.clangcodemodel.ipc: ====> DocumentVisibilityChangedMessage(, )
      [17920] qtc.clangcodemodel.ipc: Hint: AliveMessage will not be printed. Force it by setting QTC_CLANG_FORCE_VERBOSE_ALIVE=1.
      [17920] qtc.clangcodemodel.ipc: ====> DocumentVisibilityChangedMessage(, )
      [17920] qtc.clangcodemodel.ipc: ====> DocumentVisibilityChangedMessage(, )
      [17920] qtc.clangcodemodel.ipc: ====> DocumentVisibilityChangedMessage(D:/qtc_indexer_bug/main.cpp, D:/qtc_indexer_bug/main.cpp, )
      [17920] qtc.clangcodemodel.ipc: ====> DocumentsOpenedMessage(FileContainer(D:/qtc_indexer_bug/main.cpp, Utf8StringVector(-nostdinc, -nostdinc++, --driver-mode=cl, /std:c++17, /Zs, -m64, --target=x86_64-pc-windows-msvc, /FI, D:\qtc_indexer_bug\foo.config, -fms-compatibility-version=19.16, -DQ_CREATOR_RUN, -D__FUNCSIG__="", -D__FUNCTION__="", -D__FUNCDNAME__="", /clang:-isystem, /clang:C:\Qt\qtcreator-4.9.0\bin\clang\lib\clang\7.0.0\include, /clang:-isystem, /clang:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\ATLMFC\include, /clang:-isystem, /clang:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\include, /clang:-isystem, /clang:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um, /clang:-isystem, /clang:C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt, /clang:-isystem, /clang:C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared, /clang:-isystem, /clang:C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um, /clang:-isystem, /clang:C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt, /clang:-isystem, /clang:C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt, -I, C:\Users\connie\AppData\Local\Temp\QtCreator-dQIAfQ\clang-uiheader-IcqnVj, /clang:-fmessage-length=0, /clang:-fdiagnostics-show-note-include-stack, /clang:-fretain-comments-from-system-headers, -fmacro-backtrace-limit=0, -ferror-limit=1000, /TP, -Wno-unknown-pragmas, -Wno-unknown-warning-option, -Wno-documentation-unknown-command, -Weverything, -Wno-c++98-compat, -Wno-c++98-compat-pedantic, -Wno-unused-macros, -Wno-newline-eof, -Wno-exit-time-destructors, -Wno-global-constructors, -Wno-gnu-zero-variadic-macro-arguments, -Wno-documentation, -Wno-shadow, -Wno-switch-enum, -Wno-missing-prototypes, -Wno-used-but-marked-unused, -fno-delayed-template-parsing), Utf8StringVector(C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\ATLMFC\include, C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\include, C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um, C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt, C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared, C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um, C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt, C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt, C:\Users\connie\AppData\Local\Temp\QtCreator-dQIAfQ\clang-uiheader-IcqnVj), 1, , <C:/Users/connie/AppData/Local/Temp/qtc-clangsupport-QPNfRT/unsavedfilecontent-main.cpp-FUlmpk>), D:/qtc_indexer_bug/main.cpp, D:/qtc_indexer_bug/main.cpp, )
      [17920] qtc.clangcodemodel.ipc: <==== AnnotationsMessage for "main.cpp" with 0 diagnostics 90 token infos 0 skipped preprocessor ranges
      [17920] qtc.clangcodemodel.ipc: <==== AnnotationsMessage for "main.cpp" with 0 diagnostics 90 token infos 0 skipped preprocessor ranges
      [17920] qtc.clangcodemodel.ipc: >>> RequestToolTipMessage(FileContainer(D:/qtc_indexer_bug/main.cpp, Utf8StringVector(), Utf8StringVector(), 1, UTF-8), 1, 17, 42, )
      [17920] qtc.clangcodemodel.hover: Requesting tooltip info at 247
      [17920] qtc.clangcodemodel.ipc: <==== ToolTipMessage C<T>
      [17920] qtc.clangcodemodel.hover: Appending word-based fallback lookup ("endl", "std::endl")
      [17920] qtc.clangcodemodel.hover: Processing tooltip info "C<T>"
      [17920] qtc.clangcodemodel.hover: Querying help manager with ("C", "endl", "std::endl") "C" ClassOrNamespace
      
       

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            kandeler Christian Kandeler
            connie Mateusz Brzeszcz
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes