[clang] [clang:frontend] Move helper functions to common location for SemaSPIRV (PR #125045)
Muhammad Bassiouni via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 30 23:24:58 PST 2025
https://github.com/bassiounix updated https://github.com/llvm/llvm-project/pull/125045
>From d938f75b1a5638f013ae2f7fb4f0ac2f6e28c6a4 Mon Sep 17 00:00:00 2001
From: Muhammad Bassiouni <bassiouni.git at gmail.com>
Date: Thu, 30 Jan 2025 12:02:25 +0200
Subject: [PATCH 1/5] [clang:frontend] Move helper functions in SemaHLSL to
common location for SemaSPIRV
---
clang/include/clang/Sema/Common.h | 22 +++++++++++
clang/lib/Sema/CMakeLists.txt | 1 +
clang/lib/Sema/Common.cpp | 65 +++++++++++++++++++++++++++++++
clang/lib/Sema/SemaHLSL.cpp | 28 +------------
clang/lib/Sema/SemaSPIRV.cpp | 52 +++----------------------
5 files changed, 95 insertions(+), 73 deletions(-)
create mode 100644 clang/include/clang/Sema/Common.h
create mode 100644 clang/lib/Sema/Common.cpp
diff --git a/clang/include/clang/Sema/Common.h b/clang/include/clang/Sema/Common.h
new file mode 100644
index 000000000000000..3f775df8bddb649
--- /dev/null
+++ b/clang/include/clang/Sema/Common.h
@@ -0,0 +1,22 @@
+#ifndef LLVM_CLANG_SEMA_COMMON_H
+#define LLVM_CLANG_SEMA_COMMON_H
+
+#include "clang/Sema/Sema.h"
+
+namespace clang {
+
+using LLVMFnRef = llvm::function_ref<bool(clang::QualType PassedType)>;
+using PairParam = std::pair<unsigned int, unsigned int>;
+using CheckParam = std::variant<PairParam, LLVMFnRef>;
+
+bool CheckArgTypeIsCorrect(
+ Sema *S, Expr *Arg, QualType ExpectedType,
+ llvm::function_ref<bool(clang::QualType PassedType)> Check);
+
+bool CheckAllArgTypesAreCorrect(
+ Sema *SemaPtr, CallExpr *TheCall,
+ std::variant<QualType, std::nullopt_t> ExpectedType, CheckParam Check);
+
+} // namespace clang
+
+#endif
diff --git a/clang/lib/Sema/CMakeLists.txt b/clang/lib/Sema/CMakeLists.txt
index 19cf3a2db00fdcd..ddc340a51a3b2d1 100644
--- a/clang/lib/Sema/CMakeLists.txt
+++ b/clang/lib/Sema/CMakeLists.txt
@@ -17,6 +17,7 @@ add_clang_library(clangSema
AnalysisBasedWarnings.cpp
CheckExprLifetime.cpp
CodeCompleteConsumer.cpp
+ Common.cpp
DeclSpec.cpp
DelayedDiagnostic.cpp
HeuristicResolver.cpp
diff --git a/clang/lib/Sema/Common.cpp b/clang/lib/Sema/Common.cpp
new file mode 100644
index 000000000000000..72a9e4a2c99ae11
--- /dev/null
+++ b/clang/lib/Sema/Common.cpp
@@ -0,0 +1,65 @@
+#include "clang/Sema/Common.h"
+
+namespace clang {
+
+bool CheckArgTypeIsCorrect(
+ Sema *S, Expr *Arg, QualType ExpectedType,
+ llvm::function_ref<bool(clang::QualType PassedType)> Check) {
+ QualType PassedType = Arg->getType();
+ if (Check(PassedType)) {
+ if (auto *VecTyA = PassedType->getAs<VectorType>())
+ ExpectedType = S->Context.getVectorType(
+ ExpectedType, VecTyA->getNumElements(), VecTyA->getVectorKind());
+ S->Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible)
+ << PassedType << ExpectedType << 1 << 0 << 0;
+ return true;
+ }
+ return false;
+}
+
+bool CheckAllArgTypesAreCorrect(
+ Sema *SemaPtr, CallExpr *TheCall,
+ std::variant<QualType, std::nullopt_t> ExpectedType, CheckParam Check) {
+ unsigned int NumElts;
+ unsigned int expected;
+ if (auto *n = std::get_if<PairParam>(&Check)) {
+ if (SemaPtr->checkArgCount(TheCall, n->first)) {
+ return true;
+ }
+ NumElts = n->first;
+ expected = n->second;
+ } else {
+ NumElts = TheCall->getNumArgs();
+ }
+
+ for (unsigned i = 0; i < NumElts; i++) {
+ Expr *localArg = TheCall->getArg(i);
+ if (auto *val = std::get_if<QualType>(&ExpectedType)) {
+ if (auto *fn = std::get_if<LLVMFnRef>(&Check)) {
+ return CheckArgTypeIsCorrect(SemaPtr, localArg, *val, *fn);
+ }
+ }
+
+ QualType PassedType = localArg->getType();
+ if (PassedType->getAs<VectorType>() == nullptr) {
+ SemaPtr->Diag(localArg->getBeginLoc(),
+ diag::err_typecheck_convert_incompatible)
+ << PassedType
+ << SemaPtr->Context.getVectorType(PassedType, expected,
+ VectorKind::Generic)
+ << 1 << 0 << 0;
+ return true;
+ }
+ }
+
+ if (std::get_if<PairParam>(&Check)) {
+ if (auto *localArgVecTy =
+ TheCall->getArg(0)->getType()->getAs<VectorType>()) {
+ TheCall->setType(localArgVecTy->getElementType());
+ }
+ }
+
+ return false;
+}
+
+} // namespace clang
diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index d748c10455289b9..0cc71e4122666c0 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -27,6 +27,7 @@
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/Specifiers.h"
#include "clang/Basic/TargetInfo.h"
+#include "clang/Sema/Common.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/ParsedAttr.h"
#include "clang/Sema/Sema.h"
@@ -1996,33 +1997,6 @@ static bool CheckArgTypeMatches(Sema *S, Expr *Arg, QualType ExpectedType) {
return false;
}
-static bool CheckArgTypeIsCorrect(
- Sema *S, Expr *Arg, QualType ExpectedType,
- llvm::function_ref<bool(clang::QualType PassedType)> Check) {
- QualType PassedType = Arg->getType();
- if (Check(PassedType)) {
- if (auto *VecTyA = PassedType->getAs<VectorType>())
- ExpectedType = S->Context.getVectorType(
- ExpectedType, VecTyA->getNumElements(), VecTyA->getVectorKind());
- S->Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible)
- << PassedType << ExpectedType << 1 << 0 << 0;
- return true;
- }
- return false;
-}
-
-static bool CheckAllArgTypesAreCorrect(
- Sema *S, CallExpr *TheCall, QualType ExpectedType,
- llvm::function_ref<bool(clang::QualType PassedType)> Check) {
- for (unsigned i = 0; i < TheCall->getNumArgs(); ++i) {
- Expr *Arg = TheCall->getArg(i);
- if (CheckArgTypeIsCorrect(S, Arg, ExpectedType, Check)) {
- return true;
- }
- }
- return false;
-}
-
static bool CheckAllArgsHaveFloatRepresentation(Sema *S, CallExpr *TheCall) {
auto checkAllFloatTypes = [](clang::QualType PassedType) -> bool {
return !PassedType->hasFloatingRepresentation();
diff --git a/clang/lib/Sema/SemaSPIRV.cpp b/clang/lib/Sema/SemaSPIRV.cpp
index dc49fc79073572e..df6a3d61056f5ef 100644
--- a/clang/lib/Sema/SemaSPIRV.cpp
+++ b/clang/lib/Sema/SemaSPIRV.cpp
@@ -10,7 +10,9 @@
#include "clang/Sema/SemaSPIRV.h"
#include "clang/Basic/TargetBuiltins.h"
+#include "clang/Sema/Common.h"
#include "clang/Sema/Sema.h"
+#include <utility>
namespace clang {
@@ -20,54 +22,12 @@ bool SemaSPIRV::CheckSPIRVBuiltinFunctionCall(unsigned BuiltinID,
CallExpr *TheCall) {
switch (BuiltinID) {
case SPIRV::BI__builtin_spirv_distance: {
- if (SemaRef.checkArgCount(TheCall, 2))
- return true;
-
- ExprResult A = TheCall->getArg(0);
- QualType ArgTyA = A.get()->getType();
- auto *VTyA = ArgTyA->getAs<VectorType>();
- if (VTyA == nullptr) {
- SemaRef.Diag(A.get()->getBeginLoc(),
- diag::err_typecheck_convert_incompatible)
- << ArgTyA
- << SemaRef.Context.getVectorType(ArgTyA, 2, VectorKind::Generic) << 1
- << 0 << 0;
- return true;
- }
-
- ExprResult B = TheCall->getArg(1);
- QualType ArgTyB = B.get()->getType();
- auto *VTyB = ArgTyB->getAs<VectorType>();
- if (VTyB == nullptr) {
- SemaRef.Diag(A.get()->getBeginLoc(),
- diag::err_typecheck_convert_incompatible)
- << ArgTyB
- << SemaRef.Context.getVectorType(ArgTyB, 2, VectorKind::Generic) << 1
- << 0 << 0;
- return true;
- }
-
- QualType RetTy = VTyA->getElementType();
- TheCall->setType(RetTy);
- break;
+ return CheckAllArgTypesAreCorrect(&SemaRef, TheCall, std::nullopt,
+ std::make_pair(2, 2));
}
case SPIRV::BI__builtin_spirv_length: {
- if (SemaRef.checkArgCount(TheCall, 1))
- return true;
- ExprResult A = TheCall->getArg(0);
- QualType ArgTyA = A.get()->getType();
- auto *VTy = ArgTyA->getAs<VectorType>();
- if (VTy == nullptr) {
- SemaRef.Diag(A.get()->getBeginLoc(),
- diag::err_typecheck_convert_incompatible)
- << ArgTyA
- << SemaRef.Context.getVectorType(ArgTyA, 2, VectorKind::Generic) << 1
- << 0 << 0;
- return true;
- }
- QualType RetTy = VTy->getElementType();
- TheCall->setType(RetTy);
- break;
+ return CheckAllArgTypesAreCorrect(&SemaRef, TheCall, std::nullopt,
+ std::make_pair(1, 2));
}
}
return false;
>From 494ddbeb7f8177f25316465bb967cddb237a34ce Mon Sep 17 00:00:00 2001
From: Muhammad Bassiouni <bassiouni.git at gmail.com>
Date: Thu, 30 Jan 2025 12:48:08 +0200
Subject: [PATCH 2/5] chore(style): update code style according to LLVM coding
standard
---
clang/lib/Sema/Common.cpp | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/clang/lib/Sema/Common.cpp b/clang/lib/Sema/Common.cpp
index 72a9e4a2c99ae11..50e85f780536d39 100644
--- a/clang/lib/Sema/Common.cpp
+++ b/clang/lib/Sema/Common.cpp
@@ -1,8 +1,6 @@
#include "clang/Sema/Common.h"
-namespace clang {
-
-bool CheckArgTypeIsCorrect(
+bool clang::CheckArgTypeIsCorrect(
Sema *S, Expr *Arg, QualType ExpectedType,
llvm::function_ref<bool(clang::QualType PassedType)> Check) {
QualType PassedType = Arg->getType();
@@ -17,7 +15,7 @@ bool CheckArgTypeIsCorrect(
return false;
}
-bool CheckAllArgTypesAreCorrect(
+bool clang::CheckAllArgTypesAreCorrect(
Sema *SemaPtr, CallExpr *TheCall,
std::variant<QualType, std::nullopt_t> ExpectedType, CheckParam Check) {
unsigned int NumElts;
@@ -61,5 +59,3 @@ bool CheckAllArgTypesAreCorrect(
return false;
}
-
-} // namespace clang
>From e36627178a02170a55564efbd545f0b6ec2781cf Mon Sep 17 00:00:00 2001
From: Muhammad Bassiouni <bassiouni.git at gmail.com>
Date: Thu, 30 Jan 2025 15:13:28 +0200
Subject: [PATCH 3/5] chore(license): add license to recently created files
---
clang/include/clang/Sema/Common.h | 11 +++++++++++
clang/lib/Sema/Common.cpp | 11 +++++++++++
2 files changed, 22 insertions(+)
diff --git a/clang/include/clang/Sema/Common.h b/clang/include/clang/Sema/Common.h
index 3f775df8bddb649..5f142a9b35f80ee 100644
--- a/clang/include/clang/Sema/Common.h
+++ b/clang/include/clang/Sema/Common.h
@@ -1,3 +1,14 @@
+//===--- Common.h ----- Semantic Analysis common header file --------------===//
+//
+// 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 declares common functions used in SPIRV and HLSL semantic
+// analysis constructs.
+//===----------------------------------------------------------------------===//
+
#ifndef LLVM_CLANG_SEMA_COMMON_H
#define LLVM_CLANG_SEMA_COMMON_H
diff --git a/clang/lib/Sema/Common.cpp b/clang/lib/Sema/Common.cpp
index 50e85f780536d39..2c4087d10d05216 100644
--- a/clang/lib/Sema/Common.cpp
+++ b/clang/lib/Sema/Common.cpp
@@ -1,3 +1,14 @@
+//===--- Common.cpp --- Semantic Analysis common implementation file ------===//
+//
+// 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 implements common functions used in SPIRV and HLSL semantic
+// analysis constructs.
+//===----------------------------------------------------------------------===//
+
#include "clang/Sema/Common.h"
bool clang::CheckArgTypeIsCorrect(
>From 951065bb67d32da89560868a67208415750fa6f1 Mon Sep 17 00:00:00 2001
From: Muhammad Bassiouni <bassiouni.git at gmail.com>
Date: Fri, 31 Jan 2025 05:22:19 +0200
Subject: [PATCH 4/5] fix(SemaCommon): Separate the concern of
`CheckAllArgTypesAreCorrect` with simpler impl
---
clang/include/clang/Sema/Common.h | 12 +++----
clang/lib/Sema/Common.cpp | 54 ++++++++++++++-----------------
clang/lib/Sema/SemaSPIRV.cpp | 7 ++--
3 files changed, 33 insertions(+), 40 deletions(-)
diff --git a/clang/include/clang/Sema/Common.h b/clang/include/clang/Sema/Common.h
index 5f142a9b35f80ee..d07def27c73cd9b 100644
--- a/clang/include/clang/Sema/Common.h
+++ b/clang/include/clang/Sema/Common.h
@@ -16,17 +16,17 @@
namespace clang {
-using LLVMFnRef = llvm::function_ref<bool(clang::QualType PassedType)>;
-using PairParam = std::pair<unsigned int, unsigned int>;
-using CheckParam = std::variant<PairParam, LLVMFnRef>;
-
bool CheckArgTypeIsCorrect(
Sema *S, Expr *Arg, QualType ExpectedType,
llvm::function_ref<bool(clang::QualType PassedType)> Check);
bool CheckAllArgTypesAreCorrect(
- Sema *SemaPtr, CallExpr *TheCall,
- std::variant<QualType, std::nullopt_t> ExpectedType, CheckParam Check);
+ Sema *S, CallExpr *TheCall, QualType ExpectedType,
+ llvm::function_ref<bool(clang::QualType PassedType)> Check);
+
+bool CheckAllArgTypesAreCorrect(Sema *SemaPtr, CallExpr *TheCall,
+ unsigned int NumOfElts,
+ unsigned int expectedNumOfElts);
} // namespace clang
diff --git a/clang/lib/Sema/Common.cpp b/clang/lib/Sema/Common.cpp
index 2c4087d10d05216..7262b0182c3c5f5 100644
--- a/clang/lib/Sema/Common.cpp
+++ b/clang/lib/Sema/Common.cpp
@@ -27,45 +27,41 @@ bool clang::CheckArgTypeIsCorrect(
}
bool clang::CheckAllArgTypesAreCorrect(
- Sema *SemaPtr, CallExpr *TheCall,
- std::variant<QualType, std::nullopt_t> ExpectedType, CheckParam Check) {
- unsigned int NumElts;
- unsigned int expected;
- if (auto *n = std::get_if<PairParam>(&Check)) {
- if (SemaPtr->checkArgCount(TheCall, n->first)) {
+ Sema *S, CallExpr *TheCall, QualType ExpectedType,
+ llvm::function_ref<bool(clang::QualType PassedType)> Check) {
+ for (unsigned i = 0; i < TheCall->getNumArgs(); ++i) {
+ Expr *Arg = TheCall->getArg(i);
+ if (CheckArgTypeIsCorrect(S, Arg, ExpectedType, Check)) {
return true;
}
- NumElts = n->first;
- expected = n->second;
- } else {
- NumElts = TheCall->getNumArgs();
}
+ return false;
+}
- for (unsigned i = 0; i < NumElts; i++) {
- Expr *localArg = TheCall->getArg(i);
- if (auto *val = std::get_if<QualType>(&ExpectedType)) {
- if (auto *fn = std::get_if<LLVMFnRef>(&Check)) {
- return CheckArgTypeIsCorrect(SemaPtr, localArg, *val, *fn);
- }
- }
+bool clang::CheckAllArgTypesAreCorrect(Sema *SemaPtr, CallExpr *TheCall,
+ unsigned int NumOfElts,
+ unsigned int expectedNumOfElts) {
+ if (SemaPtr->checkArgCount(TheCall, NumOfElts)) {
+ return true;
+ }
+ for (unsigned i = 0; i < NumOfElts; i++) {
+ Expr *localArg = TheCall->getArg(i);
QualType PassedType = localArg->getType();
- if (PassedType->getAs<VectorType>() == nullptr) {
- SemaPtr->Diag(localArg->getBeginLoc(),
- diag::err_typecheck_convert_incompatible)
- << PassedType
- << SemaPtr->Context.getVectorType(PassedType, expected,
- VectorKind::Generic)
- << 1 << 0 << 0;
+ QualType ExpectedType = SemaPtr->Context.getVectorType(
+ PassedType, expectedNumOfElts, VectorKind::Generic);
+ auto Check = [](QualType PassedType) {
+ return PassedType->getAs<VectorType>() == nullptr;
+ };
+
+ if (CheckArgTypeIsCorrect(SemaPtr, localArg, ExpectedType, Check)) {
return true;
}
}
- if (std::get_if<PairParam>(&Check)) {
- if (auto *localArgVecTy =
- TheCall->getArg(0)->getType()->getAs<VectorType>()) {
- TheCall->setType(localArgVecTy->getElementType());
- }
+ if (auto *localArgVecTy =
+ TheCall->getArg(0)->getType()->getAs<VectorType>()) {
+ TheCall->setType(localArgVecTy->getElementType());
}
return false;
diff --git a/clang/lib/Sema/SemaSPIRV.cpp b/clang/lib/Sema/SemaSPIRV.cpp
index df6a3d61056f5ef..c55a68f8df531dd 100644
--- a/clang/lib/Sema/SemaSPIRV.cpp
+++ b/clang/lib/Sema/SemaSPIRV.cpp
@@ -12,7 +12,6 @@
#include "clang/Basic/TargetBuiltins.h"
#include "clang/Sema/Common.h"
#include "clang/Sema/Sema.h"
-#include <utility>
namespace clang {
@@ -22,12 +21,10 @@ bool SemaSPIRV::CheckSPIRVBuiltinFunctionCall(unsigned BuiltinID,
CallExpr *TheCall) {
switch (BuiltinID) {
case SPIRV::BI__builtin_spirv_distance: {
- return CheckAllArgTypesAreCorrect(&SemaRef, TheCall, std::nullopt,
- std::make_pair(2, 2));
+ return CheckAllArgTypesAreCorrect(&SemaRef, TheCall, 2, 2);
}
case SPIRV::BI__builtin_spirv_length: {
- return CheckAllArgTypesAreCorrect(&SemaRef, TheCall, std::nullopt,
- std::make_pair(1, 2));
+ return CheckAllArgTypesAreCorrect(&SemaRef, TheCall, 1, 2);
}
}
return false;
>From f42034f0ef174d2ef4f2bf58f7900d541c8b070e Mon Sep 17 00:00:00 2001
From: Muhammad Bassiouni <bassiouni.git at gmail.com>
Date: Fri, 31 Jan 2025 09:22:06 +0200
Subject: [PATCH 5/5] fix(Sema): move helper function definitions to Sema class
header.
---
clang/include/clang/Sema/Common.h | 33 -------------------------------
clang/include/clang/Sema/Sema.h | 24 ++++++++++++++++++++++
clang/lib/Sema/Common.cpp | 12 +++++------
clang/lib/Sema/SemaHLSL.cpp | 21 ++++++++++----------
clang/lib/Sema/SemaSPIRV.cpp | 5 ++---
5 files changed, 42 insertions(+), 53 deletions(-)
delete mode 100644 clang/include/clang/Sema/Common.h
diff --git a/clang/include/clang/Sema/Common.h b/clang/include/clang/Sema/Common.h
deleted file mode 100644
index d07def27c73cd9b..000000000000000
--- a/clang/include/clang/Sema/Common.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//===--- Common.h ----- Semantic Analysis common header file --------------===//
-//
-// 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 declares common functions used in SPIRV and HLSL semantic
-// analysis constructs.
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_SEMA_COMMON_H
-#define LLVM_CLANG_SEMA_COMMON_H
-
-#include "clang/Sema/Sema.h"
-
-namespace clang {
-
-bool CheckArgTypeIsCorrect(
- Sema *S, Expr *Arg, QualType ExpectedType,
- llvm::function_ref<bool(clang::QualType PassedType)> Check);
-
-bool CheckAllArgTypesAreCorrect(
- Sema *S, CallExpr *TheCall, QualType ExpectedType,
- llvm::function_ref<bool(clang::QualType PassedType)> Check);
-
-bool CheckAllArgTypesAreCorrect(Sema *SemaPtr, CallExpr *TheCall,
- unsigned int NumOfElts,
- unsigned int expectedNumOfElts);
-
-} // namespace clang
-
-#endif
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 472a0e25adc9752..a797d8f7d37dce0 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -15216,6 +15216,30 @@ class Sema final : public SemaBase {
void performFunctionEffectAnalysis(TranslationUnitDecl *TU);
///@}
+
+ //
+ //
+ // -------------------------------------------------------------------------
+ //
+ //
+
+ /// \name Common Helper Functions
+ /// Implementations are in Common.cpp
+ ///@{
+public:
+ static bool CheckArgTypeIsCorrect(
+ Sema *S, Expr *Arg, QualType ExpectedType,
+ llvm::function_ref<bool(clang::QualType PassedType)> Check);
+
+ static bool CheckAllArgTypesAreCorrect(
+ Sema *S, CallExpr *TheCall, QualType ExpectedType,
+ llvm::function_ref<bool(clang::QualType PassedType)> Check);
+
+ static bool CheckAllArgTypesAreCorrect(Sema *SemaPtr, CallExpr *TheCall,
+ unsigned int NumOfElts,
+ unsigned int expectedNumOfElts);
+
+ ///@}
};
DeductionFailureInfo
diff --git a/clang/lib/Sema/Common.cpp b/clang/lib/Sema/Common.cpp
index 7262b0182c3c5f5..2a2f4402e84aa56 100644
--- a/clang/lib/Sema/Common.cpp
+++ b/clang/lib/Sema/Common.cpp
@@ -9,9 +9,9 @@
// analysis constructs.
//===----------------------------------------------------------------------===//
-#include "clang/Sema/Common.h"
+#include "clang/Sema/Sema.h"
-bool clang::CheckArgTypeIsCorrect(
+bool clang::Sema::CheckArgTypeIsCorrect(
Sema *S, Expr *Arg, QualType ExpectedType,
llvm::function_ref<bool(clang::QualType PassedType)> Check) {
QualType PassedType = Arg->getType();
@@ -26,7 +26,7 @@ bool clang::CheckArgTypeIsCorrect(
return false;
}
-bool clang::CheckAllArgTypesAreCorrect(
+bool clang::Sema::CheckAllArgTypesAreCorrect(
Sema *S, CallExpr *TheCall, QualType ExpectedType,
llvm::function_ref<bool(clang::QualType PassedType)> Check) {
for (unsigned i = 0; i < TheCall->getNumArgs(); ++i) {
@@ -38,9 +38,9 @@ bool clang::CheckAllArgTypesAreCorrect(
return false;
}
-bool clang::CheckAllArgTypesAreCorrect(Sema *SemaPtr, CallExpr *TheCall,
- unsigned int NumOfElts,
- unsigned int expectedNumOfElts) {
+bool clang::Sema::CheckAllArgTypesAreCorrect(Sema *SemaPtr, CallExpr *TheCall,
+ unsigned int NumOfElts,
+ unsigned int expectedNumOfElts) {
if (SemaPtr->checkArgCount(TheCall, NumOfElts)) {
return true;
}
diff --git a/clang/lib/Sema/SemaHLSL.cpp b/clang/lib/Sema/SemaHLSL.cpp
index 0cc71e4122666c0..3bfdd195ac7f15b 100644
--- a/clang/lib/Sema/SemaHLSL.cpp
+++ b/clang/lib/Sema/SemaHLSL.cpp
@@ -27,7 +27,6 @@
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/Specifiers.h"
#include "clang/Basic/TargetInfo.h"
-#include "clang/Sema/Common.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/ParsedAttr.h"
#include "clang/Sema/Sema.h"
@@ -2001,8 +2000,8 @@ static bool CheckAllArgsHaveFloatRepresentation(Sema *S, CallExpr *TheCall) {
auto checkAllFloatTypes = [](clang::QualType PassedType) -> bool {
return !PassedType->hasFloatingRepresentation();
};
- return CheckAllArgTypesAreCorrect(S, TheCall, S->Context.FloatTy,
- checkAllFloatTypes);
+ return clang::Sema::CheckAllArgTypesAreCorrect(S, TheCall, S->Context.FloatTy,
+ checkAllFloatTypes);
}
static bool CheckFloatOrHalfRepresentations(Sema *S, CallExpr *TheCall) {
@@ -2013,8 +2012,8 @@ static bool CheckFloatOrHalfRepresentations(Sema *S, CallExpr *TheCall) {
: PassedType;
return !BaseType->isHalfType() && !BaseType->isFloat32Type();
};
- return CheckAllArgTypesAreCorrect(S, TheCall, S->Context.FloatTy,
- checkFloatorHalf);
+ return clang::Sema::CheckAllArgTypesAreCorrect(S, TheCall, S->Context.FloatTy,
+ checkFloatorHalf);
}
static bool CheckModifiableLValue(Sema *S, CallExpr *TheCall,
@@ -2034,24 +2033,24 @@ static bool CheckNoDoubleVectors(Sema *S, CallExpr *TheCall) {
return VecTy->getElementType()->isDoubleType();
return false;
};
- return CheckAllArgTypesAreCorrect(S, TheCall, S->Context.FloatTy,
- checkDoubleVector);
+ return clang::Sema::CheckAllArgTypesAreCorrect(S, TheCall, S->Context.FloatTy,
+ checkDoubleVector);
}
static bool CheckFloatingOrIntRepresentation(Sema *S, CallExpr *TheCall) {
auto checkAllSignedTypes = [](clang::QualType PassedType) -> bool {
return !PassedType->hasIntegerRepresentation() &&
!PassedType->hasFloatingRepresentation();
};
- return CheckAllArgTypesAreCorrect(S, TheCall, S->Context.IntTy,
- checkAllSignedTypes);
+ return clang::Sema::CheckAllArgTypesAreCorrect(S, TheCall, S->Context.IntTy,
+ checkAllSignedTypes);
}
static bool CheckUnsignedIntRepresentation(Sema *S, CallExpr *TheCall) {
auto checkAllUnsignedTypes = [](clang::QualType PassedType) -> bool {
return !PassedType->hasUnsignedIntegerRepresentation();
};
- return CheckAllArgTypesAreCorrect(S, TheCall, S->Context.UnsignedIntTy,
- checkAllUnsignedTypes);
+ return clang::Sema::CheckAllArgTypesAreCorrect(
+ S, TheCall, S->Context.UnsignedIntTy, checkAllUnsignedTypes);
}
static void SetElementTypeAsReturnType(Sema *S, CallExpr *TheCall,
diff --git a/clang/lib/Sema/SemaSPIRV.cpp b/clang/lib/Sema/SemaSPIRV.cpp
index c55a68f8df531dd..dc091d3454e7ff1 100644
--- a/clang/lib/Sema/SemaSPIRV.cpp
+++ b/clang/lib/Sema/SemaSPIRV.cpp
@@ -10,7 +10,6 @@
#include "clang/Sema/SemaSPIRV.h"
#include "clang/Basic/TargetBuiltins.h"
-#include "clang/Sema/Common.h"
#include "clang/Sema/Sema.h"
namespace clang {
@@ -21,10 +20,10 @@ bool SemaSPIRV::CheckSPIRVBuiltinFunctionCall(unsigned BuiltinID,
CallExpr *TheCall) {
switch (BuiltinID) {
case SPIRV::BI__builtin_spirv_distance: {
- return CheckAllArgTypesAreCorrect(&SemaRef, TheCall, 2, 2);
+ return clang::Sema::CheckAllArgTypesAreCorrect(&SemaRef, TheCall, 2, 2);
}
case SPIRV::BI__builtin_spirv_length: {
- return CheckAllArgTypesAreCorrect(&SemaRef, TheCall, 1, 2);
+ return clang::Sema::CheckAllArgTypesAreCorrect(&SemaRef, TheCall, 1, 2);
}
}
return false;
More information about the cfe-commits
mailing list