Author: Matthias Wippich
Date: 2026-07-28T20:45:00+10:00
New Revision: 6bb30c03650c9ebc816d089ea78b36a246116f07

URL: 
https://github.com/llvm/llvm-project/commit/6bb30c03650c9ebc816d089ea78b36a246116f07
DIFF: 
https://github.com/llvm/llvm-project/commit/6bb30c03650c9ebc816d089ea78b36a246116f07.diff

LOG: [clang][NFC] fold ExpressionTraits and TypeTraits helpers into 
BuiltinTraits (#210838)

ExpressionTraits.h defines utilities such as `getTraitName`,
`getTraitSpelling` and an enumeration for expression traits. All other
overloads of these utilities can be found in TypeTraits.h - this patch
combines them to BuiltinTraits.h/cpp.

This is a followup patch for
https://github.com/llvm/llvm-project/pull/201491#discussion_r3460883247

Added: 
    clang/include/clang/Basic/BuiltinTraits.h
    clang/lib/Basic/BuiltinTraits.cpp

Modified: 
    clang/include/clang/AST/Expr.h
    clang/include/clang/AST/ExprCXX.h
    clang/include/clang/AST/Stmt.h
    clang/include/clang/ASTMatchers/ASTMatchers.h
    clang/include/clang/Sema/Sema.h
    clang/lib/AST/ExprConstShared.h
    clang/lib/AST/StmtPrinter.cpp
    clang/lib/AST/TextNodeDumper.cpp
    clang/lib/ASTMatchers/Dynamic/Marshallers.h
    clang/lib/Basic/CMakeLists.txt
    clang/lib/Sema/SemaChecking.cpp
    clang/lib/Sema/SemaExpr.cpp
    clang/lib/Sema/SemaTemplateDeductionGuide.cpp
    clang/lib/Sema/SemaTypeTraits.cpp
    clang/lib/Serialization/ASTReaderStmt.cpp
    clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp
    clang/utils/TableGen/ClangTraitsEmitter.cpp
    llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn

Removed: 
    clang/include/clang/Basic/ExpressionTraits.h
    clang/include/clang/Basic/TypeTraits.h
    clang/lib/Basic/ExpressionTraits.cpp
    clang/lib/Basic/TypeTraits.cpp


################################################################################
diff  --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h
index 53107e2794174..f95f87cc4e8e0 100644
--- a/clang/include/clang/AST/Expr.h
+++ b/clang/include/clang/AST/Expr.h
@@ -24,10 +24,10 @@
 #include "clang/AST/Stmt.h"
 #include "clang/AST/TemplateBase.h"
 #include "clang/AST/TypeBase.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/CharInfo.h"
 #include "clang/Basic/LangOptions.h"
 #include "clang/Basic/SyncScope.h"
-#include "clang/Basic/TypeTraits.h"
 #include "llvm/ADT/APFloat.h"
 #include "llvm/ADT/APSInt.h"
 #include "llvm/ADT/SmallVector.h"

diff  --git a/clang/include/clang/AST/ExprCXX.h 
b/clang/include/clang/AST/ExprCXX.h
index ae69d152c1a23..d3d3b9c6d6326 100644
--- a/clang/include/clang/AST/ExprCXX.h
+++ b/clang/include/clang/AST/ExprCXX.h
@@ -30,8 +30,8 @@
 #include "clang/AST/TemplateBase.h"
 #include "clang/AST/Type.h"
 #include "clang/AST/UnresolvedSet.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/ExceptionSpecificationType.h"
-#include "clang/Basic/ExpressionTraits.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/Lambda.h"
 #include "clang/Basic/LangOptions.h"
@@ -39,7 +39,6 @@
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/Specifiers.h"
 #include "clang/Basic/TemplateKinds.h"
-#include "clang/Basic/TypeTraits.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/PointerUnion.h"
 #include "llvm/ADT/STLExtras.h"

diff  --git a/clang/include/clang/AST/Stmt.h b/clang/include/clang/AST/Stmt.h
index f07ba9205661b..69db8252f931e 100644
--- a/clang/include/clang/AST/Stmt.h
+++ b/clang/include/clang/AST/Stmt.h
@@ -18,8 +18,8 @@
 #include "clang/AST/DependenceFlags.h"
 #include "clang/AST/OperationKinds.h"
 #include "clang/AST/StmtIterator.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/CapturedStmt.h"
-#include "clang/Basic/ExpressionTraits.h"
 #include "clang/Basic/IdentifierTable.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/Lambda.h"
@@ -27,7 +27,6 @@
 #include "clang/Basic/OperatorKinds.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/Specifiers.h"
-#include "clang/Basic/TypeTraits.h"
 #include "llvm/ADT/APFloat.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/BitmaskEnum.h"

diff  --git a/clang/include/clang/ASTMatchers/ASTMatchers.h 
b/clang/include/clang/ASTMatchers/ASTMatchers.h
index 8108ee559acea..02d52b51a45c9 100644
--- a/clang/include/clang/ASTMatchers/ASTMatchers.h
+++ b/clang/include/clang/ASTMatchers/ASTMatchers.h
@@ -74,13 +74,13 @@
 #include "clang/ASTMatchers/ASTMatchersMacros.h"
 #include "clang/ASTMatchers/LowLevelHelpers.h"
 #include "clang/Basic/AttrKinds.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/ExceptionSpecificationType.h"
 #include "clang/Basic/FileManager.h"
 #include "clang/Basic/IdentifierTable.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Basic/Specifiers.h"
-#include "clang/Basic/TypeTraits.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringExtras.h"

diff  --git a/clang/include/clang/Basic/TypeTraits.h 
b/clang/include/clang/Basic/BuiltinTraits.h
similarity index 76%
rename from clang/include/clang/Basic/TypeTraits.h
rename to clang/include/clang/Basic/BuiltinTraits.h
index 017b8699de89e..7ff5556e119aa 100644
--- a/clang/include/clang/Basic/TypeTraits.h
+++ b/clang/include/clang/Basic/BuiltinTraits.h
@@ -1,4 +1,4 @@
-//===--- TypeTraits.h - C++ Type Traits Support Enumerations ----*- C++ 
-*-===//
+//===--- BuiltinTraits.h - C++ Traits Support Enumerations ----*- C++ 
-*-=====//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -7,7 +7,7 @@
 
//===----------------------------------------------------------------------===//
 ///
 /// \file
-/// Defines enumerations for the type traits support.
+/// Defines enumerations for traits support.
 ///
 
//===----------------------------------------------------------------------===//
 
@@ -38,18 +38,26 @@ namespace clang {
 //   UETT_ ...
 //   UETT_Last == last UETT_XX in the enum.
 // };
+
+/// Names for the expression traits.
+// enum ExpressionTrait {
+//   ET_ ...
+//   ET_Last == last ET_XX in the enum.
+// };
 #define EMIT_ENUMS
 #include "clang/Basic/Traits.inc"
 
-/// Return the internal name of type trait \p T. Never null.
+/// Return the internal name of the trait \p T. Never null.
 const char *getTraitName(TypeTrait T) LLVM_READONLY;
 const char *getTraitName(ArrayTypeTrait T) LLVM_READONLY;
 const char *getTraitName(UnaryExprOrTypeTrait T) LLVM_READONLY;
+const char *getTraitName(ExpressionTrait T) LLVM_READONLY;
 
-/// Return the spelling of the type trait \p TT. Never null.
+/// Return the spelling of the trait \p T. Never null.
 const char *getTraitSpelling(TypeTrait T) LLVM_READONLY;
 const char *getTraitSpelling(ArrayTypeTrait T) LLVM_READONLY;
 const char *getTraitSpelling(UnaryExprOrTypeTrait T) LLVM_READONLY;
+const char *getTraitSpelling(ExpressionTrait T) LLVM_READONLY;
 
 /// Return the arity of the type trait \p T.
 unsigned getTypeTraitArity(TypeTrait T) LLVM_READONLY;

diff  --git a/clang/include/clang/Basic/ExpressionTraits.h 
b/clang/include/clang/Basic/ExpressionTraits.h
deleted file mode 100644
index 48ae69cf1ae17..0000000000000
--- a/clang/include/clang/Basic/ExpressionTraits.h
+++ /dev/null
@@ -1,37 +0,0 @@
-//===- ExpressionTraits.h - C++ Expression Traits Support Enums -*- C++ 
-*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// Defines enumerations for expression traits intrinsics.
-///
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_BASIC_EXPRESSIONTRAITS_H
-#define LLVM_CLANG_BASIC_EXPRESSIONTRAITS_H
-
-#include "llvm/Support/Compiler.h"
-
-namespace clang {
-
-enum ExpressionTrait {
-#define EXPRESSION_TRAIT(Spelling, Name, Key) ET_##Name,
-#include "clang/Basic/Traits.inc"
-  ET_Last = -1 // ET_Last == last ET_XX in the enum.
-#define EXPRESSION_TRAIT(Spelling, Name, Key) +1
-#include "clang/Basic/Traits.inc"
-};
-
-/// Return the internal name of type trait \p T. Never null.
-const char *getTraitName(ExpressionTrait T) LLVM_READONLY;
-
-/// Return the spelling of the type trait \p TT. Never null.
-const char *getTraitSpelling(ExpressionTrait T) LLVM_READONLY;
-
-} // namespace clang
-
-#endif

diff  --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 21bc1f0ad4faf..d46edeb0d2872 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -35,12 +35,12 @@
 #include "clang/AST/TypeLoc.h"
 #include "clang/Analysis/Analyses/LifetimeSafety/LifetimeAnnotations.h"
 #include "clang/Basic/AttrSubjectMatchRules.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/Builtins.h"
 #include "clang/Basic/CapturedStmt.h"
 #include "clang/Basic/Cuda.h"
 #include "clang/Basic/DiagnosticSema.h"
 #include "clang/Basic/ExceptionSpecificationType.h"
-#include "clang/Basic/ExpressionTraits.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/Lambda.h"
 #include "clang/Basic/LangOptions.h"
@@ -54,7 +54,6 @@
 #include "clang/Basic/StackExhaustionHandler.h"
 #include "clang/Basic/TemplateKinds.h"
 #include "clang/Basic/TokenKinds.h"
-#include "clang/Basic/TypeTraits.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"
 #include "clang/Sema/Attr.h"
 #include "clang/Sema/CleanupInfo.h"

diff  --git a/clang/lib/AST/ExprConstShared.h b/clang/lib/AST/ExprConstShared.h
index 7ba3071668bd1..cdf2a5697528e 100644
--- a/clang/lib/AST/ExprConstShared.h
+++ b/clang/lib/AST/ExprConstShared.h
@@ -14,7 +14,7 @@
 #ifndef LLVM_CLANG_LIB_AST_EXPRCONSTSHARED_H
 #define LLVM_CLANG_LIB_AST_EXPRCONSTSHARED_H
 
-#include "clang/Basic/TypeTraits.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include <cstdint>
 #include <optional>
 

diff  --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp
index 6035259dd4a16..877191d456b35 100644
--- a/clang/lib/AST/StmtPrinter.cpp
+++ b/clang/lib/AST/StmtPrinter.cpp
@@ -35,7 +35,7 @@
 #include "clang/AST/StmtVisitor.h"
 #include "clang/AST/TemplateBase.h"
 #include "clang/AST/Type.h"
-#include "clang/Basic/ExpressionTraits.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/IdentifierTable.h"
 #include "clang/Basic/JsonSupport.h"
 #include "clang/Basic/LLVM.h"
@@ -43,7 +43,6 @@
 #include "clang/Basic/OpenMPKinds.h"
 #include "clang/Basic/OperatorKinds.h"
 #include "clang/Basic/SourceLocation.h"
-#include "clang/Basic/TypeTraits.h"
 #include "clang/Lex/Lexer.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/STLExtras.h"

diff  --git a/clang/lib/AST/TextNodeDumper.cpp 
b/clang/lib/AST/TextNodeDumper.cpp
index 4bc7607a87d92..843e12b371a9b 100644
--- a/clang/lib/AST/TextNodeDumper.cpp
+++ b/clang/lib/AST/TextNodeDumper.cpp
@@ -19,10 +19,10 @@
 #include "clang/AST/NestedNameSpecifier.h"
 #include "clang/AST/Type.h"
 #include "clang/AST/TypeLocVisitor.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/Module.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Basic/Specifiers.h"
-#include "clang/Basic/TypeTraits.h"
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/Frontend/HLSL/HLSLRootSignature.h"
 

diff  --git a/clang/lib/ASTMatchers/Dynamic/Marshallers.h 
b/clang/lib/ASTMatchers/Dynamic/Marshallers.h
index 799df88c95827..5b6e47addbb64 100644
--- a/clang/lib/ASTMatchers/Dynamic/Marshallers.h
+++ b/clang/lib/ASTMatchers/Dynamic/Marshallers.h
@@ -25,9 +25,9 @@
 #include "clang/ASTMatchers/Dynamic/Diagnostics.h"
 #include "clang/ASTMatchers/Dynamic/VariantValue.h"
 #include "clang/Basic/AttrKinds.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/OpenMPKinds.h"
-#include "clang/Basic/TypeTraits.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringRef.h"

diff  --git a/clang/lib/Basic/TypeTraits.cpp b/clang/lib/Basic/BuiltinTraits.cpp
similarity index 80%
rename from clang/lib/Basic/TypeTraits.cpp
rename to clang/lib/Basic/BuiltinTraits.cpp
index 8307cf9e5afbd..7bc88b2aef3e9 100644
--- a/clang/lib/Basic/TypeTraits.cpp
+++ b/clang/lib/Basic/BuiltinTraits.cpp
@@ -1,4 +1,4 @@
-//===--- TypeTraits.cpp - Type Traits Support 
-----------------------------===//
+//===--- BuiltinTraits.cpp - Builtin Traits Support 
-----------------------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -6,22 +6,24 @@
 //
 
//===----------------------------------------------------------------------===//
 //
-//  This file implements the type traits support functions.
+//  This file implements the traits support functions.
 //
 
//===----------------------------------------------------------------------===//
 
-#include "clang/Basic/TypeTraits.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include <cassert>
 #include <cstring>
 using namespace clang;
 
 // static constexpr const char *TypeTraitNames[] = {...};
 // static constexpr const char *TypeTraitSpellings[] = {...};
+// static constexpr const unsigned TypeTraitArities[] = {...};
 // static constexpr const char *ArrayTypeTraitNames[] = {...};
 // static constexpr const char *ArrayTypeTraitSpellings[] = {...};
 // static constexpr const char *UnaryExprOrTypeTraitNames[] = {...};
 // static constexpr const char *UnaryExprOrTypeTraitSpellings[] = {...};
-// static constexpr const unsigned TypeTraitArities[] = {...};
+// static constexpr const char *ExpressionTraitNames[] = {...};
+// static constexpr const char *ExpressionTraitSpellings[] = {...};
 #define EMIT_ARRAYS
 #include "clang/Basic/Traits.inc"
 
@@ -40,6 +42,11 @@ const char *clang::getTraitName(UnaryExprOrTypeTrait T) {
   return UnaryExprOrTypeTraitNames[T];
 }
 
+const char *clang::getTraitName(ExpressionTrait T) {
+  assert(T <= ET_Last && "invalid enum value!");
+  return ExpressionTraitNames[T];
+}
+
 const char *clang::getTraitSpelling(TypeTrait T) {
   assert(T <= TT_Last && "invalid enum value!");
   if (T == BTT_IsDeducible) {
@@ -68,3 +75,8 @@ unsigned clang::getTypeTraitArity(TypeTrait T) {
   assert(T <= TT_Last && "invalid enum value!");
   return TypeTraitArities[T];
 }
+
+const char *clang::getTraitSpelling(ExpressionTrait T) {
+  assert(T <= ET_Last && "invalid enum value!");
+  return ExpressionTraitSpellings[T];
+}

diff  --git a/clang/lib/Basic/CMakeLists.txt b/clang/lib/Basic/CMakeLists.txt
index 21851e79b9d15..6329c3fa8b34e 100644
--- a/clang/lib/Basic/CMakeLists.txt
+++ b/clang/lib/Basic/CMakeLists.txt
@@ -59,6 +59,7 @@ add_clang_library(clangBasic
   Attributes.cpp
   AtomicLineLogger.cpp
   Builtins.cpp
+  BuiltinTraits.cpp
   CLWarnings.cpp
   CharInfo.cpp
   CodeGenOptions.cpp
@@ -67,7 +68,6 @@ add_clang_library(clangBasic
   Diagnostic.cpp
   DiagnosticIDs.cpp
   DiagnosticOptions.cpp
-  ExpressionTraits.cpp
   FileEntry.cpp
   FileManager.cpp
   IdentifierTable.cpp
@@ -123,7 +123,6 @@ add_clang_library(clangBasic
   Targets/XCore.cpp
   Targets/Xtensa.cpp
   TokenKinds.cpp
-  TypeTraits.cpp
   Version.cpp
   Warnings.cpp
   XRayInstr.cpp

diff  --git a/clang/lib/Basic/ExpressionTraits.cpp 
b/clang/lib/Basic/ExpressionTraits.cpp
deleted file mode 100644
index 67126ff1d8a05..0000000000000
--- a/clang/lib/Basic/ExpressionTraits.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-//===--- ExpressionTraits.cpp - Expression Traits Support 
-----------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-//  This file implements the expression traits support functions.
-//
-//===----------------------------------------------------------------------===//
-
-#include "clang/Basic/ExpressionTraits.h"
-#include <cassert>
-using namespace clang;
-
-static constexpr const char *ExpressionTraitNames[] = {
-#define EXPRESSION_TRAIT(Spelling, Name, Key) #Name,
-#include "clang/Basic/Traits.inc"
-};
-
-static constexpr const char *ExpressionTraitSpellings[] = {
-#define EXPRESSION_TRAIT(Spelling, Name, Key) #Spelling,
-#include "clang/Basic/Traits.inc"
-};
-
-const char *clang::getTraitName(ExpressionTrait T) {
-  assert(T <= ET_Last && "invalid enum value!");
-  return ExpressionTraitNames[T];
-}
-
-const char *clang::getTraitSpelling(ExpressionTrait T) {
-  assert(T <= ET_Last && "invalid enum value!");
-  return ExpressionTraitSpellings[T];
-}

diff  --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index ef07e8c6133ed..ff42d98df965c 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -41,6 +41,7 @@
 #include "clang/AST/TypeLoc.h"
 #include "clang/AST/UnresolvedSet.h"
 #include "clang/Basic/AddressSpaces.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/DiagnosticSema.h"
 #include "clang/Basic/IdentifierTable.h"
@@ -54,7 +55,6 @@
 #include "clang/Basic/Specifiers.h"
 #include "clang/Basic/SyncScope.h"
 #include "clang/Basic/TargetInfo.h"
-#include "clang/Basic/TypeTraits.h"
 #include "clang/Lex/Lexer.h" // TODO: Extract static functions to fix layering.
 #include "clang/Sema/Initialization.h"
 #include "clang/Sema/Lookup.h"

diff  --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 1066a337f2012..ed3d27b5adc27 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -33,13 +33,13 @@
 #include "clang/AST/StmtVisitor.h"
 #include "clang/AST/Type.h"
 #include "clang/AST/TypeLoc.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/Builtins.h"
 #include "clang/Basic/DiagnosticSema.h"
 #include "clang/Basic/PartialDiagnostic.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Basic/Specifiers.h"
 #include "clang/Basic/TargetInfo.h"
-#include "clang/Basic/TypeTraits.h"
 #include "clang/Lex/LiteralSupport.h"
 #include "clang/Lex/Preprocessor.h"
 #include "clang/Sema/AnalysisBasedWarnings.h"

diff  --git a/clang/lib/Sema/SemaTemplateDeductionGuide.cpp 
b/clang/lib/Sema/SemaTemplateDeductionGuide.cpp
index fa740d5581e5f..3f37b59807f85 100644
--- a/clang/lib/Sema/SemaTemplateDeductionGuide.cpp
+++ b/clang/lib/Sema/SemaTemplateDeductionGuide.cpp
@@ -28,10 +28,10 @@
 #include "clang/AST/TemplateName.h"
 #include "clang/AST/Type.h"
 #include "clang/AST/TypeLoc.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/Specifiers.h"
-#include "clang/Basic/TypeTraits.h"
 #include "clang/Sema/DeclSpec.h"
 #include "clang/Sema/Initialization.h"
 #include "clang/Sema/Lookup.h"

diff  --git a/clang/lib/Sema/SemaTypeTraits.cpp 
b/clang/lib/Sema/SemaTypeTraits.cpp
index fe3d3c5acf7be..e6c79dbeedc6a 100644
--- a/clang/lib/Sema/SemaTypeTraits.cpp
+++ b/clang/lib/Sema/SemaTypeTraits.cpp
@@ -13,11 +13,11 @@
 #include "clang/AST/DeclCXX.h"
 #include "clang/AST/TemplateBase.h"
 #include "clang/AST/Type.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/DiagnosticIDs.h"
 #include "clang/Basic/DiagnosticParse.h"
 #include "clang/Basic/DiagnosticSema.h"
 #include "clang/Basic/Specifiers.h"
-#include "clang/Basic/TypeTraits.h"
 #include "clang/Sema/EnterExpressionEvaluationContext.h"
 #include "clang/Sema/Initialization.h"
 #include "clang/Sema/Lookup.h"

diff  --git a/clang/lib/Serialization/ASTReaderStmt.cpp 
b/clang/lib/Serialization/ASTReaderStmt.cpp
index 87cec16a76323..97f1857e200ca 100644
--- a/clang/lib/Serialization/ASTReaderStmt.cpp
+++ b/clang/lib/Serialization/ASTReaderStmt.cpp
@@ -38,14 +38,13 @@
 #include "clang/AST/TemplateBase.h"
 #include "clang/AST/Type.h"
 #include "clang/AST/UnresolvedSet.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/CapturedStmt.h"
-#include "clang/Basic/ExpressionTraits.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/LangOptions.h"
 #include "clang/Basic/OpenMPKinds.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/Specifiers.h"
-#include "clang/Basic/TypeTraits.h"
 #include "clang/Lex/Token.h"
 #include "clang/Serialization/ASTBitCodes.h"
 #include "clang/Serialization/ASTRecordReader.h"

diff  --git a/clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp 
b/clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp
index 888724f7ea3b2..bfd90beb82cde 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CStringSyntaxChecker.cpp
@@ -16,8 +16,8 @@
 #include "clang/AST/OperationKinds.h"
 #include "clang/AST/StmtVisitor.h"
 #include "clang/Analysis/AnalysisDeclContext.h"
+#include "clang/Basic/BuiltinTraits.h"
 #include "clang/Basic/TargetInfo.h"
-#include "clang/Basic/TypeTraits.h"
 #include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
 #include "clang/StaticAnalyzer/Core/Checker.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"

diff  --git a/clang/utils/TableGen/ClangTraitsEmitter.cpp 
b/clang/utils/TableGen/ClangTraitsEmitter.cpp
index b94f82f8475d9..d02f3cf821e1d 100644
--- a/clang/utils/TableGen/ClangTraitsEmitter.cpp
+++ b/clang/utils/TableGen/ClangTraitsEmitter.cpp
@@ -153,6 +153,15 @@ void emitEnums(const RecordKeeper &Records, raw_ostream 
&OS) {
   OS << "  UETT_Last = " << UETTs.size() + CXX11UETTs.size() - 1
      << " // UETT_Last == last UETT_XX in the enum.\n"
      << "};\n\n";
+
+  const auto ExpressionTraits =
+      getAllDerivedDefsInDeclOrder(Records, "ExpressionTrait");
+  OS << "/// Names for the expression traits.\n"
+        "enum ExpressionTrait {\n";
+  emitEnumerators(OS, ExpressionTraits);
+  OS << "  ET_Last = " << ExpressionTraits.size() - 1
+     << " // ET_Last == last ET_XX in the enum.\n"
+     << "};\n\n";
 }
 
 template <typename RangeT>
@@ -198,6 +207,9 @@ void emitArrays(const RecordKeeper &Records, raw_ostream 
&OS) {
       concat<const Record *const>(
           getAllDerivedDefsInDeclOrder(Records, "UnaryExprOrTypeTrait"),
           getAllDerivedDefsInDeclOrder(Records, "CXX11UnaryExprOrTypeTrait")));
+  emitNamesAndSpellings(
+      OS, "ExpressionTrait",
+      getAllDerivedDefsInDeclOrder(Records, "ExpressionTrait"));
 }
 
 void emitStdNameCases(const RecordKeeper &Records, raw_ostream &OS) {

diff  --git a/llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn 
b/llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn
index f5f90ca99b4a8..d7bcb2d94e1c8 100644
--- a/llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn
+++ b/llvm/utils/gn/secondary/clang/lib/Basic/BUILD.gn
@@ -82,6 +82,7 @@ static_library("Basic") {
     "AtomicLineLogger.cpp",
     "Attributes.cpp",
     "Builtins.cpp",
+    "BuiltinTraits.cpp",
     "CLWarnings.cpp",
     "CharInfo.cpp",
     "CodeGenOptions.cpp",
@@ -90,7 +91,6 @@ static_library("Basic") {
     "Diagnostic.cpp",
     "DiagnosticIDs.cpp",
     "DiagnosticOptions.cpp",
-    "ExpressionTraits.cpp",
     "FileEntry.cpp",
     "FileManager.cpp",
     "IdentifierTable.cpp",
@@ -146,7 +146,6 @@ static_library("Basic") {
     "Targets/XCore.cpp",
     "Targets/Xtensa.cpp",
     "TokenKinds.cpp",
-    "TypeTraits.cpp",
     "Version.cpp",
     "Warnings.cpp",
     "XRayInstr.cpp",


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to