MSVC 2019 - Compilation error in clang/AST/ExprCXX.h


I see the following compile-time error while building my tool that uses libtooling APIs.

C:\path\to\source\repos\llvm-project\clang\include\clang/AST/ExprCXX.h(4867,31): error C2990: ‘llvm::TrailingObjects’: non-class template has already been declared as a class template

Compiler used:
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29334 for x64

I see no such error in Linux builds of the same sources built using gcc installed on Ubuntu 20.4 and Ubuntu 18.04 .

Can someone knowledgeable please point me to a solution that addresses this build failure on Windows 10?

Tip of llvm-project repo in use:

commit adf9f64a02838a16d0c6cadfbd089254b126bd22 (HEAD → master, origin/master, origin/HEAD)
Author: ergawy <>

[MLIR][SPIRV] Rename spv._reference_of to spv.mlir.referenceof

This commit does the renaming mentioned in the title in order to bring
‘spv’ dialect closer to the MLIR naming conventions.

Reviewed By: antiagainst

Differential Revision:


I built clang with that version of MSVC, but I wasn’t able to observe the error. I didn’t go back to the linked revision, though, so perhaps it was fixed in the meantime. In any case, this line, friend class TrailingObjects;, is incorrect, it shouldn’t use class. I removed it in

That change helped.

Thank you very much!