[clang] [CMake]Fully delete the deprecated LLVM_USE_CRT* (PR #66850)

2023-10-05 Thread Mike Hommey via cfe-commits

glandium wrote:

> Which used to be MT and with this change is now MD.

(because our script was still using LLVM_USE_CRT_RELEASE)

https://github.com/llvm/llvm-project/pull/66850
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [CMake]Fully delete the deprecated LLVM_USE_CRT* (PR #66850)

2023-10-05 Thread Mike Hommey via cfe-commits

glandium wrote:

This unveiled an interesting problem in our builds: `llvm-config --cxxflags` 
doesn't include the `/MT`/`/MD` flag, so when building something that links 
with one of the .lib from LLVM, you can end up with a failure because you're 
not building with the same flag as LLVM was built with. Which used to be MT and 
with this change is now MD.

https://github.com/llvm/llvm-project/pull/66850
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Add missing placement-new after Allocate() calls (PR #68382)

2023-10-05 Thread via cfe-commits

github-actions[bot] wrote:




:warning: C/C++ code formatter, clang-format found issues in your code. 
:warning:



You can test this locally with the following command:


``bash
git-clang-format --diff a06e94cf3b375cdfd81f42f60e16ce0c3783ff4a 
d987a8523086ab8b6d49f395429afda75769a731 -- clang/lib/AST/DeclCXX.cpp 
clang/lib/AST/DeclObjC.cpp clang/lib/Serialization/ASTReaderDecl.cpp
``





View the diff from clang-format here.


``diff
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp 
b/clang/lib/Serialization/ASTReaderDecl.cpp
index 7bf1bcceccf5..6a2f607d916c 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -2002,7 +2002,8 @@ void ASTDeclReader::ReadCXXDefinitionData(
   case LCK_StarThis:
   case LCK_This:
   case LCK_VLAType:
-new (ToCapture) Capture(Loc, IsImplicit, Kind, 
nullptr,SourceLocation());
+new (ToCapture)
+Capture(Loc, IsImplicit, Kind, nullptr, SourceLocation());
 ToCapture++;
 break;
   case LCK_ByCopy:

``




https://github.com/llvm/llvm-project/pull/68382
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Fixes and closes #53952. Setting the ASTHasCompilerErrors member variable correctly based on the PP diagnostics. (PR #68127)

2023-10-05 Thread Rajkumar Ananthu via cfe-commits

rajkumarananthu wrote:

Hi @AaronBallman I could see a revert of my change here: 
https://reviews.llvm.org/rGa6acf3fd49a20c570a390af2a3c84e10b9545b68

Can you please help me confirm whether the change is accepted or reverted. 
Should we resubmit the changes here?

Thanks
Rajkumar Ananthu

https://github.com/llvm/llvm-project/pull/68127
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Add missing placement-new after Allocate() calls (PR #68382)

2023-10-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang


Changes

While working on #68377 inspecting `Allocate()` calls, I found out that 
there are couple of places where we forget to use placement-new to create 
objects in the allocated memory.

---
Full diff: https://github.com/llvm/llvm-project/pull/68382.diff


3 Files Affected:

- (modified) clang/lib/AST/DeclCXX.cpp (+2-1) 
- (modified) clang/lib/AST/DeclObjC.cpp (+2-2) 
- (modified) clang/lib/Serialization/ASTReaderDecl.cpp (+5-2) 


``diff
diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp
index 42bab4ed51b7290..a92b788366434ce 100644
--- a/clang/lib/AST/DeclCXX.cpp
+++ b/clang/lib/AST/DeclCXX.cpp
@@ -1484,7 +1484,8 @@ void CXXRecordDecl::setCaptures(ASTContext ,
 if (Captures[I].isExplicit())
   ++Data.NumExplicitCaptures;
 
-*ToCapture++ = Captures[I];
+new (ToCapture) LambdaCapture(Captures[I]);
+ToCapture++;
   }
 
   if (!lambdaIsDefaultConstructibleAndAssignable())
diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp
index e934a81d086e3c0..e1eef2dbd9c3d28 100644
--- a/clang/lib/AST/DeclObjC.cpp
+++ b/clang/lib/AST/DeclObjC.cpp
@@ -931,8 +931,8 @@ void ObjCMethodDecl::setParamsAndSelLocs(ASTContext ,
   unsigned Size = sizeof(ParmVarDecl *) * NumParams +
   sizeof(SourceLocation) * SelLocs.size();
   ParamsAndSelLocs = C.Allocate(Size);
-  std::copy(Params.begin(), Params.end(), getParams());
-  std::copy(SelLocs.begin(), SelLocs.end(), getStoredSelLocs());
+  std::uninitialized_copy(Params.begin(), Params.end(), getParams());
+  std::uninitialized_copy(SelLocs.begin(), SelLocs.end(), getStoredSelLocs());
 }
 
 void ObjCMethodDecl::getSelectorLocs(
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp 
b/clang/lib/Serialization/ASTReaderDecl.cpp
index d553b3c6d78dedc..6a2f607d916c472 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -2002,13 +2002,16 @@ void ASTDeclReader::ReadCXXDefinitionData(
   case LCK_StarThis:
   case LCK_This:
   case LCK_VLAType:
-*ToCapture++ = Capture(Loc, IsImplicit, Kind, 
nullptr,SourceLocation());
+new (ToCapture)
+Capture(Loc, IsImplicit, Kind, nullptr, SourceLocation());
+ToCapture++;
 break;
   case LCK_ByCopy:
   case LCK_ByRef:
 auto *Var = readDeclAs();
 SourceLocation EllipsisLoc = readSourceLocation();
-*ToCapture++ = Capture(Loc, IsImplicit, Kind, Var, EllipsisLoc);
+new (ToCapture) Capture(Loc, IsImplicit, Kind, Var, EllipsisLoc);
+ToCapture++;
 break;
   }
 }

``




https://github.com/llvm/llvm-project/pull/68382
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Add missing placement-new after Allocate() calls (PR #68382)

2023-10-05 Thread Vlad Serebrennikov via cfe-commits

https://github.com/Endilll updated 
https://github.com/llvm/llvm-project/pull/68382

>From d987a8523086ab8b6d49f395429afda75769a731 Mon Sep 17 00:00:00 2001
From: Vlad Serebrennikov 
Date: Fri, 6 Oct 2023 07:20:07 +0300
Subject: [PATCH 1/2] [clang][NFC] Add missing placement-new after Allocate()
 calls

---
 clang/lib/AST/DeclCXX.cpp | 3 ++-
 clang/lib/AST/DeclObjC.cpp| 4 ++--
 clang/lib/Serialization/ASTReaderDecl.cpp | 6 --
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp
index 42bab4ed51b7290..a92b788366434ce 100644
--- a/clang/lib/AST/DeclCXX.cpp
+++ b/clang/lib/AST/DeclCXX.cpp
@@ -1484,7 +1484,8 @@ void CXXRecordDecl::setCaptures(ASTContext ,
 if (Captures[I].isExplicit())
   ++Data.NumExplicitCaptures;
 
-*ToCapture++ = Captures[I];
+new (ToCapture) LambdaCapture(Captures[I]);
+ToCapture++;
   }
 
   if (!lambdaIsDefaultConstructibleAndAssignable())
diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp
index e934a81d086e3c0..e1eef2dbd9c3d28 100644
--- a/clang/lib/AST/DeclObjC.cpp
+++ b/clang/lib/AST/DeclObjC.cpp
@@ -931,8 +931,8 @@ void ObjCMethodDecl::setParamsAndSelLocs(ASTContext ,
   unsigned Size = sizeof(ParmVarDecl *) * NumParams +
   sizeof(SourceLocation) * SelLocs.size();
   ParamsAndSelLocs = C.Allocate(Size);
-  std::copy(Params.begin(), Params.end(), getParams());
-  std::copy(SelLocs.begin(), SelLocs.end(), getStoredSelLocs());
+  std::uninitialized_copy(Params.begin(), Params.end(), getParams());
+  std::uninitialized_copy(SelLocs.begin(), SelLocs.end(), getStoredSelLocs());
 }
 
 void ObjCMethodDecl::getSelectorLocs(
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp 
b/clang/lib/Serialization/ASTReaderDecl.cpp
index d553b3c6d78dedc..7bf1bcceccf584e 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -2002,13 +2002,15 @@ void ASTDeclReader::ReadCXXDefinitionData(
   case LCK_StarThis:
   case LCK_This:
   case LCK_VLAType:
-*ToCapture++ = Capture(Loc, IsImplicit, Kind, 
nullptr,SourceLocation());
+new (ToCapture) Capture(Loc, IsImplicit, Kind, 
nullptr,SourceLocation());
+ToCapture++;
 break;
   case LCK_ByCopy:
   case LCK_ByRef:
 auto *Var = readDeclAs();
 SourceLocation EllipsisLoc = readSourceLocation();
-*ToCapture++ = Capture(Loc, IsImplicit, Kind, Var, EllipsisLoc);
+new (ToCapture) Capture(Loc, IsImplicit, Kind, Var, EllipsisLoc);
+ToCapture++;
 break;
   }
 }

>From ba88e02ced2a97bfe37396de3c0746a07339cb89 Mon Sep 17 00:00:00 2001
From: Vlad Serebrennikov 
Date: Fri, 6 Oct 2023 07:58:05 +0300
Subject: [PATCH 2/2] Run clang-format

---
 clang/lib/Serialization/ASTReaderDecl.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp 
b/clang/lib/Serialization/ASTReaderDecl.cpp
index 7bf1bcceccf584e..6a2f607d916c472 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -2002,7 +2002,8 @@ void ASTDeclReader::ReadCXXDefinitionData(
   case LCK_StarThis:
   case LCK_This:
   case LCK_VLAType:
-new (ToCapture) Capture(Loc, IsImplicit, Kind, 
nullptr,SourceLocation());
+new (ToCapture)
+Capture(Loc, IsImplicit, Kind, nullptr, SourceLocation());
 ToCapture++;
 break;
   case LCK_ByCopy:

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Add missing placement-new after Allocate() calls (PR #68382)

2023-10-05 Thread Vlad Serebrennikov via cfe-commits

https://github.com/Endilll created 
https://github.com/llvm/llvm-project/pull/68382

While working on #68377 inspecting `Allocate()` calls, I found out that there 
are couple of places where we forget to use placement-new to create objects in 
the allocated memory.

>From d987a8523086ab8b6d49f395429afda75769a731 Mon Sep 17 00:00:00 2001
From: Vlad Serebrennikov 
Date: Fri, 6 Oct 2023 07:20:07 +0300
Subject: [PATCH] [clang][NFC] Add missing placement-new after Allocate() calls

---
 clang/lib/AST/DeclCXX.cpp | 3 ++-
 clang/lib/AST/DeclObjC.cpp| 4 ++--
 clang/lib/Serialization/ASTReaderDecl.cpp | 6 --
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp
index 42bab4ed51b7290..a92b788366434ce 100644
--- a/clang/lib/AST/DeclCXX.cpp
+++ b/clang/lib/AST/DeclCXX.cpp
@@ -1484,7 +1484,8 @@ void CXXRecordDecl::setCaptures(ASTContext ,
 if (Captures[I].isExplicit())
   ++Data.NumExplicitCaptures;
 
-*ToCapture++ = Captures[I];
+new (ToCapture) LambdaCapture(Captures[I]);
+ToCapture++;
   }
 
   if (!lambdaIsDefaultConstructibleAndAssignable())
diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp
index e934a81d086e3c0..e1eef2dbd9c3d28 100644
--- a/clang/lib/AST/DeclObjC.cpp
+++ b/clang/lib/AST/DeclObjC.cpp
@@ -931,8 +931,8 @@ void ObjCMethodDecl::setParamsAndSelLocs(ASTContext ,
   unsigned Size = sizeof(ParmVarDecl *) * NumParams +
   sizeof(SourceLocation) * SelLocs.size();
   ParamsAndSelLocs = C.Allocate(Size);
-  std::copy(Params.begin(), Params.end(), getParams());
-  std::copy(SelLocs.begin(), SelLocs.end(), getStoredSelLocs());
+  std::uninitialized_copy(Params.begin(), Params.end(), getParams());
+  std::uninitialized_copy(SelLocs.begin(), SelLocs.end(), getStoredSelLocs());
 }
 
 void ObjCMethodDecl::getSelectorLocs(
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp 
b/clang/lib/Serialization/ASTReaderDecl.cpp
index d553b3c6d78dedc..7bf1bcceccf584e 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -2002,13 +2002,15 @@ void ASTDeclReader::ReadCXXDefinitionData(
   case LCK_StarThis:
   case LCK_This:
   case LCK_VLAType:
-*ToCapture++ = Capture(Loc, IsImplicit, Kind, 
nullptr,SourceLocation());
+new (ToCapture) Capture(Loc, IsImplicit, Kind, 
nullptr,SourceLocation());
+ToCapture++;
 break;
   case LCK_ByCopy:
   case LCK_ByRef:
 auto *Var = readDeclAs();
 SourceLocation EllipsisLoc = readSourceLocation();
-*ToCapture++ = Capture(Loc, IsImplicit, Kind, Var, EllipsisLoc);
+new (ToCapture) Capture(Loc, IsImplicit, Kind, Var, EllipsisLoc);
+ToCapture++;
 break;
   }
 }

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][Sema] Use original template pattern when declaring implicit deduction guides for nested template classes (PR #68379)

2023-10-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang


Changes

When a nested template is instantiated, the template pattern of the inner class 
is not copied into the outer class ClassTemplateSpecializationDecl. The 
specialization contains a ClassTemplateDecl with an empty record that points to 
the original template pattern instead.

As a result, when looking up the constructors of the inner class, no results 
are returned. This patch finds the original template pattern and uses that for 
the lookup instead.

Based on CWG2471 we must also substitute the known outer template arguments 
when creating deduction guides for the inner class.

Fixes #46200
Fixes #57812

---
Full diff: https://github.com/llvm/llvm-project/pull/68379.diff


2 Files Affected:

- (modified) clang/lib/Sema/SemaTemplate.cpp (+21-1) 
- (added) clang/test/SemaTemplate/nested-implicit-deduction-guides.cpp (+12) 


``diff
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 080f005e04402cb..33907bd58b44fc4 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -2250,6 +2250,7 @@ struct ConvertConstructorToDeductionGuideTransform {
 
   Sema 
   ClassTemplateDecl *Template;
+  ClassTemplateDecl *NestedPattern = nullptr;
 
   DeclContext *DC = Template->getDeclContext();
   CXXRecordDecl *Primary = Template->getTemplatedDecl();
@@ -2327,6 +2328,8 @@ struct ConvertConstructorToDeductionGuideTransform {
 if (FTD) {
   Args.addOuterTemplateArguments(SubstArgs);
   Args.addOuterRetainedLevel();
+  if (NestedPattern)
+Args.addOuterRetainedLevels(NestedPattern->getTemplateDepth());
 }
 
 FunctionProtoTypeLoc FPTL = CD->getTypeSourceInfo()->getTypeLoc()
@@ -2438,10 +2441,17 @@ struct ConvertConstructorToDeductionGuideTransform {
 SmallVector ParamTypes;
 const FunctionProtoType *T = TL.getTypePtr();
 
+MultiLevelTemplateArgumentList OuterInstantiationArgs;
+if (NestedPattern)
+  OuterInstantiationArgs = SemaRef.getTemplateInstantiationArgs(Template);
+
 //-- The types of the function parameters are those of the constructor.
 for (auto *OldParam : TL.getParams()) {
   ParmVarDecl *NewParam =
   transformFunctionTypeParam(OldParam, Args, MaterializedTypedefs);
+  if (NestedPattern && NewParam)
+NewParam = transformFunctionTypeParam(NewParam, OuterInstantiationArgs,
+  MaterializedTypedefs);
   if (!NewParam)
 return QualType();
   ParamTypes.push_back(NewParam->getType());
@@ -2647,13 +2657,23 @@ void Sema::DeclareImplicitDeductionGuides(TemplateDecl 
*Template,
   if (BuildingDeductionGuides.isInvalid())
 return;
 
+  // If the template is nested, then we need to use the original
+  // pattern to iterate over the constructors.
+  ClassTemplateDecl *Pattern = Transform.Template;
+  while (Pattern->getInstantiatedFromMemberTemplate()) {
+if (Pattern->isMemberSpecialization())
+  break;
+Pattern = Pattern->getInstantiatedFromMemberTemplate();
+Transform.NestedPattern = Pattern;
+  }
+
   // Convert declared constructors into deduction guide templates.
   // FIXME: Skip constructors for which deduction must necessarily fail (those
   // for which some class template parameter without a default argument never
   // appears in a deduced context).
   llvm::SmallPtrSet ProcessedCtors;
   bool AddedAny = false;
-  for (NamedDecl *D : LookupConstructors(Transform.Primary)) {
+  for (NamedDecl *D : LookupConstructors(Pattern->getTemplatedDecl())) {
 D = D->getUnderlyingDecl();
 if (D->isInvalidDecl() || D->isImplicit())
   continue;
diff --git a/clang/test/SemaTemplate/nested-implicit-deduction-guides.cpp 
b/clang/test/SemaTemplate/nested-implicit-deduction-guides.cpp
new file mode 100644
index 000..4915c687cf4c4ef
--- /dev/null
+++ b/clang/test/SemaTemplate/nested-implicit-deduction-guides.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -std=c++17 -verify %s
+// expected-no-diagnostics
+
+template struct S {
+template struct N {
+N(T) {}
+N(T, U) {}
+template N(V, U) {}
+};
+};
+
+S::N x{"a", 1};

``




https://github.com/llvm/llvm-project/pull/68379
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][Sema] Use original template pattern when declaring implicit deduction guides for nested template classes (PR #68379)

2023-10-05 Thread via cfe-commits

https://github.com/antangelo created 
https://github.com/llvm/llvm-project/pull/68379

When a nested template is instantiated, the template pattern of the inner class 
is not copied into the outer class ClassTemplateSpecializationDecl. The 
specialization contains a ClassTemplateDecl with an empty record that points to 
the original template pattern instead.

As a result, when looking up the constructors of the inner class, no results 
are returned. This patch finds the original template pattern and uses that for 
the lookup instead.

Based on CWG2471 we must also substitute the known outer template arguments 
when creating deduction guides for the inner class.

Fixes #46200
Fixes #57812

>From e4f4a7bbaad90103e87ad6e6ba80f10fad1e0b58 Mon Sep 17 00:00:00 2001
From: Antonio Abbatangelo 
Date: Thu, 5 Oct 2023 21:07:37 -0400
Subject: [PATCH] [clang][Sema] Use original template pattern when declaring
 implicit deduction guides for nested template classes

When a nested template is instantiated, the template pattern of the
inner class is not copied into the outer class ClassTemplateSpecializationDecl.
The specialization contains a ClassTemplateDecl with an empty record
that points to the original template pattern instead.

As a result, when looking up the constructors of the inner class, no
results are returned. This patch finds the original template
pattern and uses that for the lookup instead.

Based on CWG2471 we must also substitute the known outer template arguments
when creating deduction guides for the inner class.

Fixes #46200
Fixes #57812
---
 clang/lib/Sema/SemaTemplate.cpp   | 22 ++-
 .../nested-implicit-deduction-guides.cpp  | 12 ++
 2 files changed, 33 insertions(+), 1 deletion(-)
 create mode 100644 clang/test/SemaTemplate/nested-implicit-deduction-guides.cpp

diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 080f005e04402cb..33907bd58b44fc4 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -2250,6 +2250,7 @@ struct ConvertConstructorToDeductionGuideTransform {
 
   Sema 
   ClassTemplateDecl *Template;
+  ClassTemplateDecl *NestedPattern = nullptr;
 
   DeclContext *DC = Template->getDeclContext();
   CXXRecordDecl *Primary = Template->getTemplatedDecl();
@@ -2327,6 +2328,8 @@ struct ConvertConstructorToDeductionGuideTransform {
 if (FTD) {
   Args.addOuterTemplateArguments(SubstArgs);
   Args.addOuterRetainedLevel();
+  if (NestedPattern)
+Args.addOuterRetainedLevels(NestedPattern->getTemplateDepth());
 }
 
 FunctionProtoTypeLoc FPTL = CD->getTypeSourceInfo()->getTypeLoc()
@@ -2438,10 +2441,17 @@ struct ConvertConstructorToDeductionGuideTransform {
 SmallVector ParamTypes;
 const FunctionProtoType *T = TL.getTypePtr();
 
+MultiLevelTemplateArgumentList OuterInstantiationArgs;
+if (NestedPattern)
+  OuterInstantiationArgs = SemaRef.getTemplateInstantiationArgs(Template);
+
 //-- The types of the function parameters are those of the constructor.
 for (auto *OldParam : TL.getParams()) {
   ParmVarDecl *NewParam =
   transformFunctionTypeParam(OldParam, Args, MaterializedTypedefs);
+  if (NestedPattern && NewParam)
+NewParam = transformFunctionTypeParam(NewParam, OuterInstantiationArgs,
+  MaterializedTypedefs);
   if (!NewParam)
 return QualType();
   ParamTypes.push_back(NewParam->getType());
@@ -2647,13 +2657,23 @@ void Sema::DeclareImplicitDeductionGuides(TemplateDecl 
*Template,
   if (BuildingDeductionGuides.isInvalid())
 return;
 
+  // If the template is nested, then we need to use the original
+  // pattern to iterate over the constructors.
+  ClassTemplateDecl *Pattern = Transform.Template;
+  while (Pattern->getInstantiatedFromMemberTemplate()) {
+if (Pattern->isMemberSpecialization())
+  break;
+Pattern = Pattern->getInstantiatedFromMemberTemplate();
+Transform.NestedPattern = Pattern;
+  }
+
   // Convert declared constructors into deduction guide templates.
   // FIXME: Skip constructors for which deduction must necessarily fail (those
   // for which some class template parameter without a default argument never
   // appears in a deduced context).
   llvm::SmallPtrSet ProcessedCtors;
   bool AddedAny = false;
-  for (NamedDecl *D : LookupConstructors(Transform.Primary)) {
+  for (NamedDecl *D : LookupConstructors(Pattern->getTemplatedDecl())) {
 D = D->getUnderlyingDecl();
 if (D->isInvalidDecl() || D->isImplicit())
   continue;
diff --git a/clang/test/SemaTemplate/nested-implicit-deduction-guides.cpp 
b/clang/test/SemaTemplate/nested-implicit-deduction-guides.cpp
new file mode 100644
index 000..4915c687cf4c4ef
--- /dev/null
+++ b/clang/test/SemaTemplate/nested-implicit-deduction-guides.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 -std=c++17 -verify %s
+// expected-no-diagnostics
+

[clang] [OpenMP][Clang] Force use of `num_teams` and `thread_limit` for bare kernel (PR #68373)

2023-10-05 Thread Shilei Tian via cfe-commits

shiltian wrote:

> Does `thread_limit` directly imply the number of threads? I thought that it 
> merely set an upper bound such that it cannot be increased beyond that via 
> environment variables.

Based on the spec, yes. However, here since `ompx_bare` is an extension, we can 
redefine semantics. For example, we already redefine the `target teams` region 
such that globalization is disabled. We can say, `thread_limit` in this mode is 
to set the block size. I'll have a follow-up patch to change the runtime 
behavior that if user's grid size can not be met in such kernel mode, crash 
directly, similar to CUDA/HIP.

https://github.com/llvm/llvm-project/pull/68373
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Specify Type and ExtQuals as having 16-byte alignment (PR #68377)

2023-10-05 Thread Vlad Serebrennikov via cfe-commits

https://github.com/Endilll updated 
https://github.com/llvm/llvm-project/pull/68377

>From 8503ff3e70e585a4a3597e3ee8111269f48105cc Mon Sep 17 00:00:00 2001
From: Vlad Serebrennikov 
Date: Thu, 5 Oct 2023 13:18:14 +0300
Subject: [PATCH 1/2] [clang] Align Type and ExtQuals on 16-byte boundary

---
 clang/include/clang/AST/Type.h | 17 ++---
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index a78d8f60462b231..4e98858f6e9432a 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -1482,7 +1482,7 @@ class ExtQualsTypeCommonBase {
 /// in three low bits on the QualType pointer; a fourth bit records whether
 /// the pointer is an ExtQuals node. The extended qualifiers (address spaces,
 /// Objective-C GC attributes) are much more rare.
-class ExtQuals : public ExtQualsTypeCommonBase, public llvm::FoldingSetNode {
+class alignas(TypeAlignment) ExtQuals : public ExtQualsTypeCommonBase, public 
llvm::FoldingSetNode {
   // NOTE: changing the fast qualifiers should be straightforward as
   // long as you don't make 'const' non-fast.
   // 1. Qualifiers:
@@ -1507,6 +1507,9 @@ class ExtQuals : public ExtQualsTypeCommonBase, public 
llvm::FoldingSetNode {
   : ExtQualsTypeCommonBase(baseType,
canon.isNull() ? QualType(this_(), 0) : canon),
 Quals(quals) {
+static_assert(alignof(decltype(*this)) % TypeAlignment == 0,
+  "Insufficient alignment!");
+
 assert(Quals.hasNonFastQualifiers()
&& "ExtQuals created with no fast qualifiers");
 assert(!Quals.hasFastQualifiers()
@@ -1594,7 +1597,7 @@ enum class AutoTypeKeyword {
 ///
 /// Types, once created, are immutable.
 ///
-class alignas(8) Type : public ExtQualsTypeCommonBase {
+class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase {
 public:
   enum TypeClass {
 #define TYPE(Class, Base) Class,
@@ -1982,9 +1985,9 @@ class alignas(8) Type : public ExtQualsTypeCommonBase {
   Type(TypeClass tc, QualType canon, TypeDependence Dependence)
   : ExtQualsTypeCommonBase(this,
canon.isNull() ? QualType(this_(), 0) : canon) {
-static_assert(sizeof(*this) <= 8 + sizeof(ExtQualsTypeCommonBase),
+static_assert(sizeof(*this) <= 16 + sizeof(ExtQualsTypeCommonBase),
   "changing bitfields changed sizeof(Type)!");
-static_assert(alignof(decltype(*this)) % sizeof(void *) == 0,
+static_assert(alignof(decltype(*this)) % TypeAlignment == 0,
   "Insufficient alignment!");
 TypeBits.TC = tc;
 TypeBits.Dependence = static_cast(Dependence);
@@ -5348,7 +5351,7 @@ class DeducedType : public Type {
 
 /// Represents a C++11 auto or C++14 decltype(auto) type, possibly constrained
 /// by a type-constraint.
-class alignas(8) AutoType : public DeducedType, public llvm::FoldingSetNode {
+class AutoType : public DeducedType, public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
 
   ConceptDecl *TypeConstraintConcept;
@@ -5456,7 +5459,7 @@ class DeducedTemplateSpecializationType : public 
DeducedType,
 /// TemplateArguments, followed by a QualType representing the
 /// non-canonical aliased type when the template is a type alias
 /// template.
-class alignas(8) TemplateSpecializationType
+class TemplateSpecializationType
 : public Type,
   public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
@@ -5872,7 +5875,7 @@ class DependentNameType : public TypeWithKeyword, public 
llvm::FoldingSetNode {
 /// Represents a template specialization type whose template cannot be
 /// resolved, e.g.
 ///   A::template B
-class alignas(8) DependentTemplateSpecializationType
+class DependentTemplateSpecializationType
 : public TypeWithKeyword,
   public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these

>From d08f8f92026026e9d02502307bd1810e516f4f06 Mon Sep 17 00:00:00 2001
From: Vlad Serebrennikov 
Date: Fri, 6 Oct 2023 06:32:27 +0300
Subject: [PATCH 2/2] Run clang-format

---
 clang/include/clang/AST/Type.h | 12 +---
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index 4e98858f6e9432a..2ba82d6624a 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -1482,7 +1482,8 @@ class ExtQualsTypeCommonBase {
 /// in three low bits on the QualType pointer; a fourth bit records whether
 /// the pointer is an ExtQuals node. The extended qualifiers (address spaces,
 /// Objective-C GC attributes) are much more rare.
-class alignas(TypeAlignment) ExtQuals : public ExtQualsTypeCommonBase, public 
llvm::FoldingSetNode {
+class alignas(TypeAlignment) ExtQuals : public ExtQualsTypeCommonBase,
+public llvm::FoldingSetNode {
   // NOTE: changing the fast qualifiers 

[clang] [clang][NFC] Specify Type and ExtQuals as having 16-byte alignment (PR #68377)

2023-10-05 Thread Vlad Serebrennikov via cfe-commits

Endilll wrote:

Relevant code snippets:
https://github.com/llvm/llvm-project/blob/777a6e6f10b2b90496d248b7fa904fce834484be/clang/lib/AST/ASTContext.cpp#L5813C1-L5816C33

https://github.com/llvm/llvm-project/blob/777a6e6f10b2b90496d248b7fa904fce834484be/clang/lib/AST/ASTContext.cpp#L4997C1-L5002C70

https://github.com/llvm/llvm-project/blob/777a6e6f10b2b90496d248b7fa904fce834484be/clang/lib/AST/ASTContext.cpp#L5192C1-L5195C66



https://github.com/llvm/llvm-project/pull/68377
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Specify Type and ExtQuals as having 16-byte alignment (PR #68377)

2023-10-05 Thread via cfe-commits

github-actions[bot] wrote:




:warning: C/C++ code formatter, clang-format found issues in your code. 
:warning:



You can test this locally with the following command:


``bash
git-clang-format --diff da0ce32cc3221686f30a6267f43d8c5dd469ef80 
8503ff3e70e585a4a3597e3ee8111269f48105cc -- clang/include/clang/AST/Type.h
``





View the diff from clang-format here.


``diff
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index 4e98858f6e94..2ba82d66 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -1482,7 +1482,8 @@ class ExtQualsTypeCommonBase {
 /// in three low bits on the QualType pointer; a fourth bit records whether
 /// the pointer is an ExtQuals node. The extended qualifiers (address spaces,
 /// Objective-C GC attributes) are much more rare.
-class alignas(TypeAlignment) ExtQuals : public ExtQualsTypeCommonBase, public 
llvm::FoldingSetNode {
+class alignas(TypeAlignment) ExtQuals : public ExtQualsTypeCommonBase,
+public llvm::FoldingSetNode {
   // NOTE: changing the fast qualifiers should be straightforward as
   // long as you don't make 'const' non-fast.
   // 1. Qualifiers:
@@ -5459,9 +5460,7 @@ public:
 /// TemplateArguments, followed by a QualType representing the
 /// non-canonical aliased type when the template is a type alias
 /// template.
-class TemplateSpecializationType
-: public Type,
-  public llvm::FoldingSetNode {
+class TemplateSpecializationType : public Type, public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
 
   /// The name of the template being specialized.  This is
@@ -5875,9 +5874,8 @@ public:
 /// Represents a template specialization type whose template cannot be
 /// resolved, e.g.
 ///   A::template B
-class DependentTemplateSpecializationType
-: public TypeWithKeyword,
-  public llvm::FoldingSetNode {
+class DependentTemplateSpecializationType : public TypeWithKeyword,
+public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
 
   /// The nested name specifier containing the qualifier.

``




https://github.com/llvm/llvm-project/pull/68377
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Specify Type and ExtQuals as having 16-byte alignment (PR #68377)

2023-10-05 Thread Vlad Serebrennikov via cfe-commits

Endilll wrote:

CC @zygoloid as the author of ee0ce302c5eb4f26738f334f2fd8b165fa65dfca

https://github.com/llvm/llvm-project/pull/68377
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Specify Type and ExtQuals as having 16-byte alignment (PR #68377)

2023-10-05 Thread Vlad Serebrennikov via cfe-commits

Endilll wrote:

My plan is to phase-out `TypeAlignment` in subsequent patches, because we have 
proper language support for `alignas` and `alignof` now. It's the only one of 
its kind passed to `Allocate()` (I inspected all references to this function).
CC @zygolod as the author of ee0ce302c5eb4f26738f334f2fd8b165fa65dfca

https://github.com/llvm/llvm-project/pull/68377
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Specify Type and ExtQuals as having 16-byte alignment (PR #68377)

2023-10-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang


Changes

While working on LLDB visualizer for `QualType`, I stumbled upon `Type` and 
`ExtQuals` defined with `alignas(8)`. Such alignment leaves only 3 lower bits 
available for pointer tagging, whereas `QualType` requires 4 (3 qualifiers + 
discriminator between `Type *` and `ExtQuals *`). Turns out `Type` and its 
derived classes are allocated with `TypeAlignment == 16` passed to 
`Allocate()`. So I'm removing misleading `alignas(8)` and fixing corresponding 
static asserts. Since they are already allocated with 16-byte alignment, this 
is a non-functional change.

---
Full diff: https://github.com/llvm/llvm-project/pull/68377.diff


1 Files Affected:

- (modified) clang/include/clang/AST/Type.h (+10-7) 


``diff
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index a78d8f60462b231..4e98858f6e9432a 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -1482,7 +1482,7 @@ class ExtQualsTypeCommonBase {
 /// in three low bits on the QualType pointer; a fourth bit records whether
 /// the pointer is an ExtQuals node. The extended qualifiers (address spaces,
 /// Objective-C GC attributes) are much more rare.
-class ExtQuals : public ExtQualsTypeCommonBase, public llvm::FoldingSetNode {
+class alignas(TypeAlignment) ExtQuals : public ExtQualsTypeCommonBase, public 
llvm::FoldingSetNode {
   // NOTE: changing the fast qualifiers should be straightforward as
   // long as you don't make 'const' non-fast.
   // 1. Qualifiers:
@@ -1507,6 +1507,9 @@ class ExtQuals : public ExtQualsTypeCommonBase, public 
llvm::FoldingSetNode {
   : ExtQualsTypeCommonBase(baseType,
canon.isNull() ? QualType(this_(), 0) : canon),
 Quals(quals) {
+static_assert(alignof(decltype(*this)) % TypeAlignment == 0,
+  "Insufficient alignment!");
+
 assert(Quals.hasNonFastQualifiers()
&& "ExtQuals created with no fast qualifiers");
 assert(!Quals.hasFastQualifiers()
@@ -1594,7 +1597,7 @@ enum class AutoTypeKeyword {
 ///
 /// Types, once created, are immutable.
 ///
-class alignas(8) Type : public ExtQualsTypeCommonBase {
+class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase {
 public:
   enum TypeClass {
 #define TYPE(Class, Base) Class,
@@ -1982,9 +1985,9 @@ class alignas(8) Type : public ExtQualsTypeCommonBase {
   Type(TypeClass tc, QualType canon, TypeDependence Dependence)
   : ExtQualsTypeCommonBase(this,
canon.isNull() ? QualType(this_(), 0) : canon) {
-static_assert(sizeof(*this) <= 8 + sizeof(ExtQualsTypeCommonBase),
+static_assert(sizeof(*this) <= 16 + sizeof(ExtQualsTypeCommonBase),
   "changing bitfields changed sizeof(Type)!");
-static_assert(alignof(decltype(*this)) % sizeof(void *) == 0,
+static_assert(alignof(decltype(*this)) % TypeAlignment == 0,
   "Insufficient alignment!");
 TypeBits.TC = tc;
 TypeBits.Dependence = static_cast(Dependence);
@@ -5348,7 +5351,7 @@ class DeducedType : public Type {
 
 /// Represents a C++11 auto or C++14 decltype(auto) type, possibly constrained
 /// by a type-constraint.
-class alignas(8) AutoType : public DeducedType, public llvm::FoldingSetNode {
+class AutoType : public DeducedType, public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
 
   ConceptDecl *TypeConstraintConcept;
@@ -5456,7 +5459,7 @@ class DeducedTemplateSpecializationType : public 
DeducedType,
 /// TemplateArguments, followed by a QualType representing the
 /// non-canonical aliased type when the template is a type alias
 /// template.
-class alignas(8) TemplateSpecializationType
+class TemplateSpecializationType
 : public Type,
   public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
@@ -5872,7 +5875,7 @@ class DependentNameType : public TypeWithKeyword, public 
llvm::FoldingSetNode {
 /// Represents a template specialization type whose template cannot be
 /// resolved, e.g.
 ///   A::template B
-class alignas(8) DependentTemplateSpecializationType
+class DependentTemplateSpecializationType
 : public TypeWithKeyword,
   public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these

``




https://github.com/llvm/llvm-project/pull/68377
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][NFC] Specify Type and ExtQuals as having 16-byte alignment (PR #68377)

2023-10-05 Thread Vlad Serebrennikov via cfe-commits

https://github.com/Endilll created 
https://github.com/llvm/llvm-project/pull/68377

While working on LLDB visualizer for `QualType`, I stumbled upon `Type` and 
`ExtQuals` defined with `alignas(8)`. Such alignment leaves only 3 lower bits 
available for pointer tagging, whereas `QualType` requires 4 (3 qualifiers + 
discriminator between `Type *` and `ExtQuals *`). Turns out `Type` and its 
derived classes are allocated with `TypeAlignment == 16` passed to 
`Allocate()`. So I'm removing misleading `alignas(8)` and fixing corresponding 
static asserts. Since they are already allocated with 16-byte alignment, this 
is a non-functional change.

>From 8503ff3e70e585a4a3597e3ee8111269f48105cc Mon Sep 17 00:00:00 2001
From: Vlad Serebrennikov 
Date: Thu, 5 Oct 2023 13:18:14 +0300
Subject: [PATCH] [clang] Align Type and ExtQuals on 16-byte boundary

---
 clang/include/clang/AST/Type.h | 17 ++---
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index a78d8f60462b231..4e98858f6e9432a 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -1482,7 +1482,7 @@ class ExtQualsTypeCommonBase {
 /// in three low bits on the QualType pointer; a fourth bit records whether
 /// the pointer is an ExtQuals node. The extended qualifiers (address spaces,
 /// Objective-C GC attributes) are much more rare.
-class ExtQuals : public ExtQualsTypeCommonBase, public llvm::FoldingSetNode {
+class alignas(TypeAlignment) ExtQuals : public ExtQualsTypeCommonBase, public 
llvm::FoldingSetNode {
   // NOTE: changing the fast qualifiers should be straightforward as
   // long as you don't make 'const' non-fast.
   // 1. Qualifiers:
@@ -1507,6 +1507,9 @@ class ExtQuals : public ExtQualsTypeCommonBase, public 
llvm::FoldingSetNode {
   : ExtQualsTypeCommonBase(baseType,
canon.isNull() ? QualType(this_(), 0) : canon),
 Quals(quals) {
+static_assert(alignof(decltype(*this)) % TypeAlignment == 0,
+  "Insufficient alignment!");
+
 assert(Quals.hasNonFastQualifiers()
&& "ExtQuals created with no fast qualifiers");
 assert(!Quals.hasFastQualifiers()
@@ -1594,7 +1597,7 @@ enum class AutoTypeKeyword {
 ///
 /// Types, once created, are immutable.
 ///
-class alignas(8) Type : public ExtQualsTypeCommonBase {
+class alignas(TypeAlignment) Type : public ExtQualsTypeCommonBase {
 public:
   enum TypeClass {
 #define TYPE(Class, Base) Class,
@@ -1982,9 +1985,9 @@ class alignas(8) Type : public ExtQualsTypeCommonBase {
   Type(TypeClass tc, QualType canon, TypeDependence Dependence)
   : ExtQualsTypeCommonBase(this,
canon.isNull() ? QualType(this_(), 0) : canon) {
-static_assert(sizeof(*this) <= 8 + sizeof(ExtQualsTypeCommonBase),
+static_assert(sizeof(*this) <= 16 + sizeof(ExtQualsTypeCommonBase),
   "changing bitfields changed sizeof(Type)!");
-static_assert(alignof(decltype(*this)) % sizeof(void *) == 0,
+static_assert(alignof(decltype(*this)) % TypeAlignment == 0,
   "Insufficient alignment!");
 TypeBits.TC = tc;
 TypeBits.Dependence = static_cast(Dependence);
@@ -5348,7 +5351,7 @@ class DeducedType : public Type {
 
 /// Represents a C++11 auto or C++14 decltype(auto) type, possibly constrained
 /// by a type-constraint.
-class alignas(8) AutoType : public DeducedType, public llvm::FoldingSetNode {
+class AutoType : public DeducedType, public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
 
   ConceptDecl *TypeConstraintConcept;
@@ -5456,7 +5459,7 @@ class DeducedTemplateSpecializationType : public 
DeducedType,
 /// TemplateArguments, followed by a QualType representing the
 /// non-canonical aliased type when the template is a type alias
 /// template.
-class alignas(8) TemplateSpecializationType
+class TemplateSpecializationType
 : public Type,
   public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
@@ -5872,7 +5875,7 @@ class DependentNameType : public TypeWithKeyword, public 
llvm::FoldingSetNode {
 /// Represents a template specialization type whose template cannot be
 /// resolved, e.g.
 ///   A::template B
-class alignas(8) DependentTemplateSpecializationType
+class DependentTemplateSpecializationType
 : public TypeWithKeyword,
   public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][Clang] Force use of `num_teams` and `thread_limit` for bare kernel (PR #68373)

2023-10-05 Thread Joseph Huber via cfe-commits

jhuber6 wrote:

Does `thread_limit` directly imply the number of threads? I thought that it 
merely set an upper bound such that it cannot be increased beyond that via 
environment variables.

https://github.com/llvm/llvm-project/pull/68373
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [mlir][sparse] introduce MapRef, unify conversion/codegen for reader (PR #68360)

2023-10-05 Thread Aart Bik via cfe-commits

https://github.com/aartbik updated 
https://github.com/llvm/llvm-project/pull/68360

>From 6094912685a0cfa5c13e023e8ec97238a84fca2f Mon Sep 17 00:00:00 2001
From: Aart Bik 
Date: Thu, 5 Oct 2023 13:22:28 -0700
Subject: [PATCH 1/4] [mlir][sparse] introduce MapRef, unify conversion/codegen
 for reader

This revision introduces a MapRef, which will support a future
generalization beyond permutations (e.g. block sparsity). This
revision also unifies the conversion/codegen paths for the
sparse_tensor.new operation from file (eg. the readers). Note
that more unification is planned as well as general affine
dim2lvl and lvl2dim (all marked with TODOs).
---
 .../mlir/ExecutionEngine/SparseTensor/File.h  | 156 ++--
 .../ExecutionEngine/SparseTensor/MapRef.h |  96 ++
 .../ExecutionEngine/SparseTensor/Storage.h| 108 +--
 .../ExecutionEngine/SparseTensorRuntime.h |   8 -
 .../SparseTensor/Transforms/CodegenUtils.cpp  |  89 +
 .../SparseTensor/Transforms/CodegenUtils.h|  18 ++
 .../Transforms/SparseTensorCodegen.cpp|  73 ++--
 .../Transforms/SparseTensorConversion.cpp | 111 ++-
 .../SparseTensor/CMakeLists.txt   |   1 +
 .../ExecutionEngine/SparseTensor/MapRef.cpp   |  52 ++
 .../ExecutionEngine/SparseTensorRuntime.cpp   |  60 +++---
 mlir/test/Dialect/SparseTensor/codegen.mlir   | 172 +-
 .../test/Dialect/SparseTensor/conversion.mlir |  18 +-
 13 files changed, 475 insertions(+), 487 deletions(-)
 create mode 100644 mlir/include/mlir/ExecutionEngine/SparseTensor/MapRef.h
 create mode 100644 mlir/lib/ExecutionEngine/SparseTensor/MapRef.cpp

diff --git a/mlir/include/mlir/ExecutionEngine/SparseTensor/File.h 
b/mlir/include/mlir/ExecutionEngine/SparseTensor/File.h
index 78c1a0544e3a521..9157bfa7e773239 100644
--- a/mlir/include/mlir/ExecutionEngine/SparseTensor/File.h
+++ b/mlir/include/mlir/ExecutionEngine/SparseTensor/File.h
@@ -20,6 +20,7 @@
 #ifndef MLIR_EXECUTIONENGINE_SPARSETENSOR_FILE_H
 #define MLIR_EXECUTIONENGINE_SPARSETENSOR_FILE_H
 
+#include "mlir/ExecutionEngine/SparseTensor/MapRef.h"
 #include "mlir/ExecutionEngine/SparseTensor/Storage.h"
 
 #include 
@@ -75,6 +76,10 @@ inline V readValue(char **linePtr, bool isPattern) {
 
 } // namespace detail
 
+//===--===//
+//
+//  Reader class.
+//
 
//===--===//
 
 /// This class abstracts over the information stored in file headers,
@@ -132,6 +137,7 @@ class SparseTensorReader final {
   /// Reads and parses the file's header.
   void readHeader();
 
+  /// Returns the stored value kind.
   ValueKind getValueKind() const { return valueKind_; }
 
   /// Checks if a header has been successfully read.
@@ -185,58 +191,37 @@ class SparseTensorReader final {
   /// valid after parsing the header.
   void assertMatchesShape(uint64_t rank, const uint64_t *shape) const;
 
-  /// Reads a sparse tensor element from the next line in the input file and
-  /// returns the value of the element. Stores the coordinates of the element
-  /// to the `dimCoords` array.
-  template 
-  V readElement(uint64_t dimRank, uint64_t *dimCoords) {
-assert(dimRank == getRank() && "rank mismatch");
-char *linePtr = readCoords(dimCoords);
-return detail::readValue(, isPattern());
-  }
-
-  /// Allocates a new COO object for `lvlSizes`, initializes it by reading
-  /// all the elements from the file and applying `dim2lvl` to their
-  /// dim-coordinates, and then closes the file. Templated on V only.
-  template 
-  SparseTensorCOO *readCOO(uint64_t lvlRank, const uint64_t *lvlSizes,
-  const uint64_t *dim2lvl);
-
   /// Allocates a new sparse-tensor storage object with the given encoding,
   /// initializes it by reading all the elements from the file, and then
   /// closes the file. Templated on P, I, and V.
   template 
   SparseTensorStorage *
   readSparseTensor(uint64_t lvlRank, const uint64_t *lvlSizes,
-   const DimLevelType *lvlTypes, const uint64_t *lvl2dim,
-   const uint64_t *dim2lvl) {
-auto *lvlCOO = readCOO(lvlRank, lvlSizes, dim2lvl);
+   const DimLevelType *lvlTypes, const uint64_t *dim2lvl,
+   const uint64_t *lvl2dim) {
+const uint64_t dimRank = getRank();
+MapRef map(dimRank, lvlRank, dim2lvl, lvl2dim);
+auto *coo = readCOO(map, lvlSizes);
 auto *tensor = SparseTensorStorage::newFromCOO(
-getRank(), getDimSizes(), lvlRank, lvlTypes, lvl2dim, *lvlCOO);
-delete lvlCOO;
+dimRank, getDimSizes(), lvlRank, lvlTypes, lvl2dim, *coo);
+delete coo;
 return tensor;
   }
 
   /// Reads the COO tensor from the file, stores the coordinates and values to
   /// the given buffers, returns a boolean value to indicate whether the COO
   /// elements are sorted.
-  /// Precondition: the buffers should 

[clang] 84cbd9f - [clang-format] Fix an error message

2023-10-05 Thread Owen Pan via cfe-commits

Author: Owen Pan
Date: 2023-10-05T19:24:08-07:00
New Revision: 84cbd9f4ffba17a74516d1afa442568dc54eabb1

URL: 
https://github.com/llvm/llvm-project/commit/84cbd9f4ffba17a74516d1afa442568dc54eabb1
DIFF: 
https://github.com/llvm/llvm-project/commit/84cbd9f4ffba17a74516d1afa442568dc54eabb1.diff

LOG: [clang-format] Fix an error message

Added: 


Modified: 
clang/lib/Format/Format.cpp

Removed: 




diff  --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 8a34b4d9431b62a..7b0ebe2cf621b17 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -3914,7 +3914,7 @@ llvm::Expected getStyle(StringRef StyleName, 
StringRef FileName,
 
   FormatStyle FallbackStyle = getNoStyle();
   if (!getPredefinedStyle(FallbackStyleName, Style.Language, ))
-return make_string_error("Invalid fallback style \"" + FallbackStyleName);
+return make_string_error("Invalid fallback style: " + FallbackStyleName);
 
   llvm::SmallVector, 1>
   ChildFormatTextToApply;



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Replace uses of CreatePointerBitCastOrAddrSpaceCast (NFC) (PR #68277)

2023-10-05 Thread Youngsuk Kim via cfe-commits

https://github.com/JOE1994 updated 
https://github.com/llvm/llvm-project/pull/68277

>From 2c3fb032e7fdefa553ed4833bbeed8852eb6a410 Mon Sep 17 00:00:00 2001
From: Youngsuk Kim 
Date: Mon, 2 Oct 2023 12:28:33 -0400
Subject: [PATCH 1/3] [clang] Replace uses of
 CreatePointerBitCastOrAddrSpaceCast (NFC)

With opaque pointers, CreatePointerBitCastOrAddrSpaceCast is same as 
CreateAddrSpaceCast.
Replace or remove uses of CreatePointerBitCastOrAddrSpaceCast.

Opaque pointer cleanup effort.
---
 clang/lib/CodeGen/CGCall.cpp  | 2 +-
 clang/lib/CodeGen/CodeGenFunction.cpp | 4 +---
 clang/lib/CodeGen/ItaniumCXXABI.cpp   | 3 ---
 clang/lib/CodeGen/TargetInfo.cpp  | 2 +-
 llvm/include/llvm/IR/IRBuilder.h  | 2 ++
 5 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index 93e16575042c4da..b0d1fcd26a5f413 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -1376,7 +1376,7 @@ static void CreateCoercedStore(llvm::Value *Src,
   llvm::PointerType *DstPtrTy = llvm::dyn_cast(DstTy);
   if (SrcPtrTy && DstPtrTy &&
   SrcPtrTy->getAddressSpace() != DstPtrTy->getAddressSpace()) {
-Src = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(Src, DstTy);
+Src = CGF.Builder.CreateAddrSpaceCast(Src, DstTy);
 CGF.Builder.CreateStore(Src, Dst, DstIsVolatile);
 return;
   }
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp 
b/clang/lib/CodeGen/CodeGenFunction.cpp
index 9b21f428b0af7f5..2f1954fad80f159 100644
--- a/clang/lib/CodeGen/CodeGenFunction.cpp
+++ b/clang/lib/CodeGen/CodeGenFunction.cpp
@@ -1123,9 +1123,7 @@ void CodeGenFunction::StartFunction(GlobalDecl GD, 
QualType RetTy,
 if (!CurFnInfo->getReturnInfo().getIndirectByVal()) {
   ReturnValuePointer =
   CreateDefaultAlignTempAlloca(Int8PtrTy, "result.ptr");
-  Builder.CreateStore(Builder.CreatePointerBitCastOrAddrSpaceCast(
-  ReturnValue.getPointer(), Int8PtrTy),
-  ReturnValuePointer);
+  Builder.CreateStore(ReturnValue.getPointer(), ReturnValuePointer);
 }
   } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::InAlloca &&
  !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp 
b/clang/lib/CodeGen/ItaniumCXXABI.cpp
index 0c89871420bdd3d..f7ef9503aa61033 100644
--- a/clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -3088,9 +3088,6 @@ void ItaniumCXXABI::EmitThreadLocalInitFuncs(
   CharUnits Align = CGM.getContext().getDeclAlign(VD);
   Val = Builder.CreateAlignedLoad(Var->getValueType(), Val, Align);
 }
-if (Val->getType() != Wrapper->getReturnType())
-  Val = Builder.CreatePointerBitCastOrAddrSpaceCast(
-  Val, Wrapper->getReturnType(), "");
 
 Builder.CreateRet(Val);
   }
diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp
index 3d79f92137abc79..60224d458f6a262 100644
--- a/clang/lib/CodeGen/TargetInfo.cpp
+++ b/clang/lib/CodeGen/TargetInfo.cpp
@@ -137,7 +137,7 @@ llvm::Value *TargetCodeGenInfo::performAddrSpaceCast(
   if (auto *C = dyn_cast(Src))
 return performAddrSpaceCast(CGF.CGM, C, SrcAddr, DestAddr, DestTy);
   // Try to preserve the source's name to make IR more readable.
-  return CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
+  return CGF.Builder.CreateAddrSpaceCast(
   Src, DestTy, Src->hasName() ? Src->getName() + ".ascast" : "");
 }
 
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index c9f243fdb12e404..a32ec9a66fedfa8 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -2138,6 +2138,8 @@ class IRBuilderBase {
 return Insert(CastInst::CreatePointerCast(V, DestTy), Name);
   }
 
+  // With opaque pointers enabled, this is same as CreateAddressSpaceCast.
+  // TODO: Replace uses of this method and remove the method itself.
   Value *CreatePointerBitCastOrAddrSpaceCast(Value *V, Type *DestTy,
  const Twine  = "") {
 if (V->getType() == DestTy)

>From 578bc43ac6bd066052803e76e1f3eb38b9798994 Mon Sep 17 00:00:00 2001
From: Youngsuk Kim 
Date: Thu, 5 Oct 2023 21:46:26 -0400
Subject: [PATCH 2/3] Update comment for CreatePointerBitCastOrAddrSpaceCast

---
 llvm/include/llvm/IR/IRBuilder.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index a32ec9a66fedfa8..a2fab842b1d0355 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -2138,7 +2138,7 @@ class IRBuilderBase {
 return Insert(CastInst::CreatePointerCast(V, DestTy), Name);
   }
 
-  // With opaque pointers enabled, this is same as CreateAddressSpaceCast.
+  // With opaque pointers enabled, this can be substituted with 
CreateAddrSpaceCast.
   // TODO: Replace uses of this method and 

[clang] [clang] Replace uses of CreatePointerBitCastOrAddrSpaceCast (NFC) (PR #68277)

2023-10-05 Thread Youngsuk Kim via cfe-commits

https://github.com/JOE1994 updated 
https://github.com/llvm/llvm-project/pull/68277

>From 2c3fb032e7fdefa553ed4833bbeed8852eb6a410 Mon Sep 17 00:00:00 2001
From: Youngsuk Kim 
Date: Mon, 2 Oct 2023 12:28:33 -0400
Subject: [PATCH 1/2] [clang] Replace uses of
 CreatePointerBitCastOrAddrSpaceCast (NFC)

With opaque pointers, CreatePointerBitCastOrAddrSpaceCast is same as 
CreateAddrSpaceCast.
Replace or remove uses of CreatePointerBitCastOrAddrSpaceCast.

Opaque pointer cleanup effort.
---
 clang/lib/CodeGen/CGCall.cpp  | 2 +-
 clang/lib/CodeGen/CodeGenFunction.cpp | 4 +---
 clang/lib/CodeGen/ItaniumCXXABI.cpp   | 3 ---
 clang/lib/CodeGen/TargetInfo.cpp  | 2 +-
 llvm/include/llvm/IR/IRBuilder.h  | 2 ++
 5 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp
index 93e16575042c4da..b0d1fcd26a5f413 100644
--- a/clang/lib/CodeGen/CGCall.cpp
+++ b/clang/lib/CodeGen/CGCall.cpp
@@ -1376,7 +1376,7 @@ static void CreateCoercedStore(llvm::Value *Src,
   llvm::PointerType *DstPtrTy = llvm::dyn_cast(DstTy);
   if (SrcPtrTy && DstPtrTy &&
   SrcPtrTy->getAddressSpace() != DstPtrTy->getAddressSpace()) {
-Src = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(Src, DstTy);
+Src = CGF.Builder.CreateAddrSpaceCast(Src, DstTy);
 CGF.Builder.CreateStore(Src, Dst, DstIsVolatile);
 return;
   }
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp 
b/clang/lib/CodeGen/CodeGenFunction.cpp
index 9b21f428b0af7f5..2f1954fad80f159 100644
--- a/clang/lib/CodeGen/CodeGenFunction.cpp
+++ b/clang/lib/CodeGen/CodeGenFunction.cpp
@@ -1123,9 +1123,7 @@ void CodeGenFunction::StartFunction(GlobalDecl GD, 
QualType RetTy,
 if (!CurFnInfo->getReturnInfo().getIndirectByVal()) {
   ReturnValuePointer =
   CreateDefaultAlignTempAlloca(Int8PtrTy, "result.ptr");
-  Builder.CreateStore(Builder.CreatePointerBitCastOrAddrSpaceCast(
-  ReturnValue.getPointer(), Int8PtrTy),
-  ReturnValuePointer);
+  Builder.CreateStore(ReturnValue.getPointer(), ReturnValuePointer);
 }
   } else if (CurFnInfo->getReturnInfo().getKind() == ABIArgInfo::InAlloca &&
  !hasScalarEvaluationKind(CurFnInfo->getReturnType())) {
diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp 
b/clang/lib/CodeGen/ItaniumCXXABI.cpp
index 0c89871420bdd3d..f7ef9503aa61033 100644
--- a/clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -3088,9 +3088,6 @@ void ItaniumCXXABI::EmitThreadLocalInitFuncs(
   CharUnits Align = CGM.getContext().getDeclAlign(VD);
   Val = Builder.CreateAlignedLoad(Var->getValueType(), Val, Align);
 }
-if (Val->getType() != Wrapper->getReturnType())
-  Val = Builder.CreatePointerBitCastOrAddrSpaceCast(
-  Val, Wrapper->getReturnType(), "");
 
 Builder.CreateRet(Val);
   }
diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp
index 3d79f92137abc79..60224d458f6a262 100644
--- a/clang/lib/CodeGen/TargetInfo.cpp
+++ b/clang/lib/CodeGen/TargetInfo.cpp
@@ -137,7 +137,7 @@ llvm::Value *TargetCodeGenInfo::performAddrSpaceCast(
   if (auto *C = dyn_cast(Src))
 return performAddrSpaceCast(CGF.CGM, C, SrcAddr, DestAddr, DestTy);
   // Try to preserve the source's name to make IR more readable.
-  return CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
+  return CGF.Builder.CreateAddrSpaceCast(
   Src, DestTy, Src->hasName() ? Src->getName() + ".ascast" : "");
 }
 
diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index c9f243fdb12e404..a32ec9a66fedfa8 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -2138,6 +2138,8 @@ class IRBuilderBase {
 return Insert(CastInst::CreatePointerCast(V, DestTy), Name);
   }
 
+  // With opaque pointers enabled, this is same as CreateAddressSpaceCast.
+  // TODO: Replace uses of this method and remove the method itself.
   Value *CreatePointerBitCastOrAddrSpaceCast(Value *V, Type *DestTy,
  const Twine  = "") {
 if (V->getType() == DestTy)

>From 578bc43ac6bd066052803e76e1f3eb38b9798994 Mon Sep 17 00:00:00 2001
From: Youngsuk Kim 
Date: Thu, 5 Oct 2023 21:46:26 -0400
Subject: [PATCH 2/2] Update comment for CreatePointerBitCastOrAddrSpaceCast

---
 llvm/include/llvm/IR/IRBuilder.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h
index a32ec9a66fedfa8..a2fab842b1d0355 100644
--- a/llvm/include/llvm/IR/IRBuilder.h
+++ b/llvm/include/llvm/IR/IRBuilder.h
@@ -2138,7 +2138,7 @@ class IRBuilderBase {
 return Insert(CastInst::CreatePointerCast(V, DestTy), Name);
   }
 
-  // With opaque pointers enabled, this is same as CreateAddressSpaceCast.
+  // With opaque pointers enabled, this can be substituted with 
CreateAddrSpaceCast.
   // TODO: Replace uses of this method and 

[clang] [NVPTX] Improve lowering of v4i8 (PR #67866)

2023-10-05 Thread Thomas Raoux via cfe-commits

https://github.com/ThomasRaoux approved this pull request.

Looks like it required quite a lot of cases to be handled :( 
Thanks for doing this, it solves some of the problems triton had with latest 
LLVM. Changes look good to me.

https://github.com/llvm/llvm-project/pull/67866
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [NVPTX] Improve lowering of v4i8 (PR #67866)

2023-10-05 Thread Thomas Raoux via cfe-commits

https://github.com/ThomasRaoux edited 
https://github.com/llvm/llvm-project/pull/67866
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [NVPTX] Improve lowering of v4i8 (PR #67866)

2023-10-05 Thread Thomas Raoux via cfe-commits


@@ -0,0 +1,1248 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 
UTC_ARGS: --version 3
+; ## Support i16x2 instructions
+; RUN: llc < %s -mtriple=nvptx64-nvidia-cuda -mcpu=sm_90 -mattr=+ptx80 \
+; RUN:  -O0 -disable-post-ra -frame-pointer=all -verify-machineinstrs \
+; RUN: | FileCheck -allow-deprecated-dag-overlap %s
+; RUN: %if ptxas %{   \
+; RUN:   llc < %s -mtriple=nvptx64-nvidia-cuda -mcpu=sm_90 \
+; RUN:  -O0 -disable-post-ra -frame-pointer=all -verify-machineinstrs \
+; RUN:   | %ptxas-verify -arch=sm_90  \
+; RUN: %}
+
+target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
+
+define <4 x i8> @test_ret_const() #0 {
+; CHECK-LABEL: test_ret_const(
+; CHECK:   {
+; CHECK-NEXT:.reg .b32 %r<3>;
+; CHECK-EMPTY:
+; CHECK-NEXT:  // %bb.0:
+; CHECK-NEXT:mov.u32 %r1, 67305985;
+; CHECK-NEXT:st.param.b32 [func_retval0+0], %r1;
+; CHECK-NEXT:ret;
+  ret <4 x i8> 
+}
+
+define i8 @test_extract_0(<4 x i8> %a) #0 {
+; CHECK-LABEL: test_extract_0(
+; CHECK:   {
+; CHECK-NEXT:.reg .b32 %r<3>;
+; CHECK-EMPTY:
+; CHECK-NEXT:  // %bb.0:
+; CHECK-NEXT:ld.param.u32 %r1, [test_extract_0_param_0];

ThomasRaoux wrote:

is it expected that the script checks for the hardcoded variable name?

https://github.com/llvm/llvm-project/pull/67866
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [NVPTX] Improve lowering of v4i8 (PR #67866)

2023-10-05 Thread Thomas Raoux via cfe-commits

https://github.com/ThomasRaoux approved this pull request.

Looks like it required quite a lot of cases to be handled :( 
Thanks for doing this, it solves some of the problems triton had with latest 
LLVM. Changes look good to me.

https://github.com/llvm/llvm-project/pull/67866
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][Clang] Force use of `num_teams` and `thread_limit` for bare kernel (PR #68373)

2023-10-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang


Changes

This patch makes `num_teams` and `thread_limit` mandatory for bare kernels,
similar to a reguar kernel language that when launching a kernel, the grid size
has to be set explicitly.


---

Patch is 34.10 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/68373.diff


4 Files Affected:

- (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+2) 
- (modified) clang/lib/Sema/SemaOpenMP.cpp (+20) 
- (modified) clang/test/OpenMP/ompx_bare_messages.c (+5-2) 
- (modified) clang/test/OpenMP/target_teams_codegen.cpp (+119-111) 


``diff
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 28f1db29e62fa91..e9f3f65491fd9f8 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -11307,6 +11307,8 @@ def err_openmp_vla_in_task_untied : Error<
 def warn_omp_unterminated_declare_target : Warning<
   "expected '#pragma omp end declare target' at end of file to match '#pragma 
omp %0'">,
   InGroup;
+def err_ompx_bare_no_grid : Error<
+  "'ompx_bare' clauses requires explicit grid size via 'num_teams' and 
'thread_limit' clauses">;
 } // end of OpenMP category
 
 let CategoryName = "Related Result Type Issue" in {
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index eb755e2a0c45408..f18c3ec547bc5e8 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -14633,6 +14633,26 @@ StmtResult 
Sema::ActOnOpenMPTargetTeamsDirective(ArrayRef Clauses,
   }
   setFunctionHasBranchProtectedScope();
 
+  bool HasBareClause = false;
+  bool HasThreadLimitClause = false;
+  bool HasNumTeamsClause = false;
+  OMPClause *BareClause = nullptr;
+
+  for (auto *C : Clauses) {
+if (isa(C)) {
+  BareClause = C;
+  HasBareClause = true;
+} else if (isa(C))
+  HasNumTeamsClause = true;
+else if (isa(C))
+  HasThreadLimitClause = true;
+  }
+
+  if (HasBareClause && !(HasNumTeamsClause && HasThreadLimitClause)) {
+Diag(BareClause->getBeginLoc(), diag::err_ompx_bare_no_grid);
+return StmtError();
+  }
+
   return OMPTargetTeamsDirective::Create(Context, StartLoc, EndLoc, Clauses,
  AStmt);
 }
diff --git a/clang/test/OpenMP/ompx_bare_messages.c 
b/clang/test/OpenMP/ompx_bare_messages.c
index a1b3c380285287d..19ceee5625feecc 100644
--- a/clang/test/OpenMP/ompx_bare_messages.c
+++ b/clang/test/OpenMP/ompx_bare_messages.c
@@ -1,6 +1,6 @@
 // RUN: %clang_cc1 -verify -fopenmp -triple x86_64-unknown-unknown %s
- // RUN: %clang_cc1 -verify -fopenmp-simd -triple x86_64-unknown-unknown %s
- // RUN: %clang_cc1 -verify -fopenmp -triple x86_64-unknown-unknown 
-fopenmp-targets=nvptx64 %s
+// RUN: %clang_cc1 -verify -fopenmp-simd -triple x86_64-unknown-unknown %s
+// RUN: %clang_cc1 -verify -fopenmp -triple x86_64-unknown-unknown 
-fopenmp-targets=nvptx64 %s
 
 void foo() {
 }
@@ -18,4 +18,7 @@ void bar() {
 #pragma omp target
 #pragma omp teams ompx_bare // expected-error {{unexpected OpenMP clause 
'ompx_bare' in directive '#pragma omp teams'}} expected-note {{OpenMP extension 
clause 'ompx_bare' only allowed with '#pragma omp target teams'}}
   foo();
+
+#pragma omp target teams ompx_bare // expected-error {{'ompx_bare' clauses 
requires explicit grid size via 'num_teams' and 'thread_limit' clauses}}
+  foo();
 }
diff --git a/clang/test/OpenMP/target_teams_codegen.cpp 
b/clang/test/OpenMP/target_teams_codegen.cpp
index 3185d90b5ef14ce..13060754366ce0a 100644
--- a/clang/test/OpenMP/target_teams_codegen.cpp
+++ b/clang/test/OpenMP/target_teams_codegen.cpp
@@ -121,7 +121,7 @@ int foo(int n) {
 aa += 1;
   }
 
-  #pragma omp target teams ompx_bare
+  #pragma omp target teams ompx_bare num_teams(1) thread_limit(1)
   {
 a += 1;
 aa += 1;
@@ -588,12 +588,12 @@ int bar(int n){
 // CHECK1-NEXT:[[TMP116:%.*]] = getelementptr inbounds 
[[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS21]], i32 0, i32 9
 // CHECK1-NEXT:store i64 0, ptr [[TMP116]], align 8
 // CHECK1-NEXT:[[TMP117:%.*]] = getelementptr inbounds 
[[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS21]], i32 0, i32 10
-// CHECK1-NEXT:store [3 x i32] zeroinitializer, ptr [[TMP117]], align 4
+// CHECK1-NEXT:store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP117]], 
align 4
 // CHECK1-NEXT:[[TMP118:%.*]] = getelementptr inbounds 
[[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS21]], i32 0, i32 11
-// CHECK1-NEXT:store [3 x i32] zeroinitializer, ptr [[TMP118]], align 4
+// CHECK1-NEXT:store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP118]], 
align 4
 // CHECK1-NEXT:[[TMP119:%.*]] = getelementptr inbounds 
[[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS21]], i32 0, i32 12
 // CHECK1-NEXT:store i32 0, ptr [[TMP119]], align 4
-// CHECK1-NEXT:[[TMP120:%.*]] = call i32 

[clang] [OpenMP][Clang] Force use of `num_teams` and `thread_limit` for bare kernel (PR #68373)

2023-10-05 Thread Shilei Tian via cfe-commits

https://github.com/shiltian created 
https://github.com/llvm/llvm-project/pull/68373

This patch makes `num_teams` and `thread_limit` mandatory for bare kernels,
similar to a reguar kernel language that when launching a kernel, the grid size
has to be set explicitly.


>From 3f88ed4ca8df5e0432afdabea60d6edf842430e1 Mon Sep 17 00:00:00 2001
From: Shilei Tian 
Date: Thu, 5 Oct 2023 21:37:53 -0400
Subject: [PATCH] [OpenMP][Clang] Force use of `num_teams` and `thread_limit`
 for bare kernel

This patch makes `num_teams` and `thread_limit` mandatory for bare kernels,
similar to a reguar kernel language that when launching a kernel, the grid size
has to be set explicitly.
---
 .../clang/Basic/DiagnosticSemaKinds.td|   2 +
 clang/lib/Sema/SemaOpenMP.cpp |  20 ++
 clang/test/OpenMP/ompx_bare_messages.c|   7 +-
 clang/test/OpenMP/target_teams_codegen.cpp| 230 +-
 4 files changed, 146 insertions(+), 113 deletions(-)

diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 28f1db29e62fa91..e9f3f65491fd9f8 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -11307,6 +11307,8 @@ def err_openmp_vla_in_task_untied : Error<
 def warn_omp_unterminated_declare_target : Warning<
   "expected '#pragma omp end declare target' at end of file to match '#pragma 
omp %0'">,
   InGroup;
+def err_ompx_bare_no_grid : Error<
+  "'ompx_bare' clauses requires explicit grid size via 'num_teams' and 
'thread_limit' clauses">;
 } // end of OpenMP category
 
 let CategoryName = "Related Result Type Issue" in {
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index eb755e2a0c45408..f18c3ec547bc5e8 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -14633,6 +14633,26 @@ StmtResult 
Sema::ActOnOpenMPTargetTeamsDirective(ArrayRef Clauses,
   }
   setFunctionHasBranchProtectedScope();
 
+  bool HasBareClause = false;
+  bool HasThreadLimitClause = false;
+  bool HasNumTeamsClause = false;
+  OMPClause *BareClause = nullptr;
+
+  for (auto *C : Clauses) {
+if (isa(C)) {
+  BareClause = C;
+  HasBareClause = true;
+} else if (isa(C))
+  HasNumTeamsClause = true;
+else if (isa(C))
+  HasThreadLimitClause = true;
+  }
+
+  if (HasBareClause && !(HasNumTeamsClause && HasThreadLimitClause)) {
+Diag(BareClause->getBeginLoc(), diag::err_ompx_bare_no_grid);
+return StmtError();
+  }
+
   return OMPTargetTeamsDirective::Create(Context, StartLoc, EndLoc, Clauses,
  AStmt);
 }
diff --git a/clang/test/OpenMP/ompx_bare_messages.c 
b/clang/test/OpenMP/ompx_bare_messages.c
index a1b3c380285287d..19ceee5625feecc 100644
--- a/clang/test/OpenMP/ompx_bare_messages.c
+++ b/clang/test/OpenMP/ompx_bare_messages.c
@@ -1,6 +1,6 @@
 // RUN: %clang_cc1 -verify -fopenmp -triple x86_64-unknown-unknown %s
- // RUN: %clang_cc1 -verify -fopenmp-simd -triple x86_64-unknown-unknown %s
- // RUN: %clang_cc1 -verify -fopenmp -triple x86_64-unknown-unknown 
-fopenmp-targets=nvptx64 %s
+// RUN: %clang_cc1 -verify -fopenmp-simd -triple x86_64-unknown-unknown %s
+// RUN: %clang_cc1 -verify -fopenmp -triple x86_64-unknown-unknown 
-fopenmp-targets=nvptx64 %s
 
 void foo() {
 }
@@ -18,4 +18,7 @@ void bar() {
 #pragma omp target
 #pragma omp teams ompx_bare // expected-error {{unexpected OpenMP clause 
'ompx_bare' in directive '#pragma omp teams'}} expected-note {{OpenMP extension 
clause 'ompx_bare' only allowed with '#pragma omp target teams'}}
   foo();
+
+#pragma omp target teams ompx_bare // expected-error {{'ompx_bare' clauses 
requires explicit grid size via 'num_teams' and 'thread_limit' clauses}}
+  foo();
 }
diff --git a/clang/test/OpenMP/target_teams_codegen.cpp 
b/clang/test/OpenMP/target_teams_codegen.cpp
index 3185d90b5ef14ce..13060754366ce0a 100644
--- a/clang/test/OpenMP/target_teams_codegen.cpp
+++ b/clang/test/OpenMP/target_teams_codegen.cpp
@@ -121,7 +121,7 @@ int foo(int n) {
 aa += 1;
   }
 
-  #pragma omp target teams ompx_bare
+  #pragma omp target teams ompx_bare num_teams(1) thread_limit(1)
   {
 a += 1;
 aa += 1;
@@ -588,12 +588,12 @@ int bar(int n){
 // CHECK1-NEXT:[[TMP116:%.*]] = getelementptr inbounds 
[[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS21]], i32 0, i32 9
 // CHECK1-NEXT:store i64 0, ptr [[TMP116]], align 8
 // CHECK1-NEXT:[[TMP117:%.*]] = getelementptr inbounds 
[[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS21]], i32 0, i32 10
-// CHECK1-NEXT:store [3 x i32] zeroinitializer, ptr [[TMP117]], align 4
+// CHECK1-NEXT:store [3 x i32] [i32 1, i32 0, i32 0], ptr [[TMP117]], 
align 4
 // CHECK1-NEXT:[[TMP118:%.*]] = getelementptr inbounds 
[[STRUCT___TGT_KERNEL_ARGUMENTS]], ptr [[KERNEL_ARGS21]], i32 0, i32 11
-// CHECK1-NEXT:store [3 x i32] zeroinitializer, ptr [[TMP118]], align 4
+// 

[clang] [NVPTX] Improve lowering of v4i8 (PR #67866)

2023-10-05 Thread Thomas Raoux via cfe-commits

ThomasRaoux wrote:

I ran the patch on our triton kernels and I don't see any functional problems 
left.

https://github.com/llvm/llvm-project/pull/67866
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [CodeGen][arm64e] Add methods and data members to Address, which are needed to authenticate signed pointers (PR #67454)

2023-10-05 Thread Akira Hatanaka via cfe-commits

https://github.com/ahatanak edited 
https://github.com/llvm/llvm-project/pull/67454
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [CodeGen][arm64e] Add methods and data members to Address, which are needed to authenticate signed pointers (PR #67454)

2023-10-05 Thread Akira Hatanaka via cfe-commits

https://github.com/ahatanak edited 
https://github.com/llvm/llvm-project/pull/67454
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Replace uses of CreatePointerBitCastOrAddrSpaceCast (NFC) (PR #68277)

2023-10-05 Thread Sergei Barannikov via cfe-commits

https://github.com/s-barannikov approved this pull request.

LGTM with the suggestion applied.


https://github.com/llvm/llvm-project/pull/68277
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Replace uses of CreatePointerBitCastOrAddrSpaceCast (NFC) (PR #68277)

2023-10-05 Thread Sergei Barannikov via cfe-commits


@@ -3088,9 +3088,6 @@ void ItaniumCXXABI::EmitThreadLocalInitFuncs(
   CharUnits Align = CGM.getContext().getDeclAlign(VD);
   Val = Builder.CreateAlignedLoad(Var->getValueType(), Val, Align);
 }
-if (Val->getType() != Wrapper->getReturnType())
-  Val = Builder.CreatePointerBitCastOrAddrSpaceCast(

s-barannikov wrote:

I'm in favor of stripping it. In the end, codebase simplification is the whole 
point of opaque pointers.
This check was added in https://reviews.llvm.org/D5353, which has nothing to do 
with address spaces.
If it ever breaks, it should be easy to fix.


https://github.com/llvm/llvm-project/pull/68277
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Clang] Fix missing diagnostic for non-standard layout type in `offsetof` (PR #65246)

2023-10-05 Thread via cfe-commits

https://github.com/kasuga-fj updated 
https://github.com/llvm/llvm-project/pull/65246

>From 01ca65833b2248547f1fb4f7d739517e619ac4cd Mon Sep 17 00:00:00 2001
From: "kasuga.ryotaro" 
Date: Wed, 30 Aug 2023 13:26:31 +0900
Subject: [PATCH] [Clang] Fix missing diagnostic for non-standard layout type
 in `offsetof`

Fixes #64619

Clang warns diagnostic for non-standard layout types in `offsetof` only
if they are in evaluated context. With this patch, you'll also get
diagnostic if you use `offsetof` on non-standard layout types in any
other contexts
---
 clang/docs/ReleaseNotes.rst   |  2 +
 clang/lib/Sema/SemaExpr.cpp   |  9 ++-
 clang/test/SemaCXX/class-layout.cpp   | 62 +--
 clang/test/SemaCXX/ms_struct.cpp  |  6 +-
 clang/test/SemaCXX/offsetof.cpp   |  9 +--
 libcxx/include/__type_traits/datasizeof.h |  5 ++
 .../non_trivial_copy_move_ABI.pass.cpp|  2 +-
 .../pairs.pair/trivial_copy_move_ABI.pass.cpp |  1 +
 8 files changed, 52 insertions(+), 44 deletions(-)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index ae67a783c2fa2d5..eef9a119bcb41a0 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -270,6 +270,8 @@ Improvements to Clang's diagnostics
 source:1:24: note: expression evaluates to ''\n' (0x0A, 10) == U'' 
(0x1F30D, 127757)'
 1 | static_assert("A\n"[1] == U'');
   |   ~^~~~
+- Clang now always diagnoses when using non-standard layout types in 
``offsetof`` .
+  (`#64619: `_)
 
 Bug Fixes in This Version
 -
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 9c5f96eebd04165..15e2a7978f6b723 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -16796,12 +16796,11 @@ ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation 
BuiltinLoc,
 LangOpts.CPlusPlus11? diag::ext_offsetof_non_standardlayout_type
 : diag::ext_offsetof_non_pod_type;
 
-  if (!IsSafe && !DidWarnAboutNonPOD &&
-  DiagRuntimeBehavior(BuiltinLoc, nullptr,
-  PDiag(DiagID)
-  << SourceRange(Components[0].LocStart, OC.LocEnd)
-  << CurrentType))
+  if (!IsSafe && !DidWarnAboutNonPOD && !isUnevaluatedContext()) {
+Diag(BuiltinLoc, DiagID)
+<< SourceRange(Components[0].LocStart, OC.LocEnd) << CurrentType;
 DidWarnAboutNonPOD = true;
+  }
 }
 
 // Look for the field.
diff --git a/clang/test/SemaCXX/class-layout.cpp 
b/clang/test/SemaCXX/class-layout.cpp
index 9782ff08100b2d6..22fb34b8419c583 100644
--- a/clang/test/SemaCXX/class-layout.cpp
+++ b/clang/test/SemaCXX/class-layout.cpp
@@ -1,34 +1,34 @@
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify 
-std=c++98 -Wno-inaccessible-base -Wno-c++11-extensions
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base
-// RUN: %clang_cc1 -triple x86_64-apple-darwin%s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -DCLANG_ABI_COMPAT=15
-// RUN: %clang_cc1 -triple x86_64-scei-ps4%s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -DCLANG_ABI_COMPAT=6
-// RUN: %clang_cc1 -triple x86_64-sie-ps5 %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -DCLANG_ABI_COMPAT=6
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -fclang-abi-compat=6 -DCLANG_ABI_COMPAT=6
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -fclang-abi-compat=14 -DCLANG_ABI_COMPAT=14
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -fclang-abi-compat=15 -DCLANG_ABI_COMPAT=15
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -fclang-abi-compat=16 -DCLANG_ABI_COMPAT=16
-// RUN: %clang_cc1 -triple powerpc-ibm-aix7.3.0.0 %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -DCLANG_ABI_COMPAT=15
-// RUN: %clang_cc1 -triple powerpc-ibm-aix7.3.0.0 %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -fclang-abi-compat=15 -DCLANG_ABI_COMPAT=15
-// RUN: %clang_cc1 -triple powerpc64-ibm-aix7.3.0.0 %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -DCLANG_ABI_COMPAT=15
-// RUN: %clang_cc1 -triple powerpc64-ibm-aix7.3.0.0 %s -fsyntax-only -verify 
-std=c++11 -Wno-inaccessible-base -fclang-abi-compat=15 -DCLANG_ABI_COMPAT=15
-// RUN: %clang_cc1 -triple s390x-none-zos %s -fsyntax-only -verify -std=c++11 
-Wno-inaccessible-base
-// RUN: %clang_cc1 -triple s390x-none-zos %s -fsyntax-only -verify -std=c++11 
-Wno-inaccessible-base -fclang-abi-compat=15 -DCLANG_ABI_COMPAT=15
-
-// RUN: %clang_cc1 

[clang] [analyzer] Compute length of string literal initializers (#66990) (PR #68368)

2023-10-05 Thread via cfe-commits

https://github.com/luamfb created 
https://github.com/llvm/llvm-project/pull/68368

Fix issue https://github.com/llvm/llvm-project/issues/66990

>From 1f0249fdb0cf7b1799eb9e532bfbb4a3ffe983b0 Mon Sep 17 00:00:00 2001
From: luamfb 
Date: Thu, 5 Oct 2023 21:50:10 -0300
Subject: [PATCH] [analyzer] Compute length of string literal initializers
 (#66990)

---
 .../StaticAnalyzer/Checkers/CStringChecker.cpp  | 17 -
 clang/test/Analysis/string.c| 11 +++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp 
b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
index f1539f2733298d9..b3b15c35450acdc 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
@@ -930,9 +930,24 @@ SVal CStringChecker::getCStringLength(CheckerContext , 
ProgramStateRef ,
 const StringLiteral *strLit = cast(MR)->getStringLiteral();
 return svalBuilder.makeIntVal(strLit->getLength(), sizeTy);
   }
+  case MemRegion::NonParamVarRegionKind: {
+// If we have a global constant with a string literal initializer,
+// compute the initializer's length.
+const VarDecl *decl = cast(MR)->getDecl();
+if (decl->hasGlobalStorage()) {
+  if (const Expr *init = decl->getInit()) {
+if (auto *strLit = dyn_cast(init)) {
+  SValBuilder  = C.getSValBuilder();
+  QualType sizeTy = svalBuilder.getContext().getSizeType();
+  return svalBuilder.makeIntVal(strLit->getLength(), sizeTy);
+}
+  }
+}
+// Otherwise, fallback to this.
+return getCStringLengthForRegion(C, state, Ex, MR, hypothetical);
+  }
   case MemRegion::SymbolicRegionKind:
   case MemRegion::AllocaRegionKind:
-  case MemRegion::NonParamVarRegionKind:
   case MemRegion::ParamVarRegionKind:
   case MemRegion::FieldRegionKind:
   case MemRegion::ObjCIvarRegionKind:
diff --git a/clang/test/Analysis/string.c b/clang/test/Analysis/string.c
index d369ee9f7d854a1..8da905b33145562 100644
--- a/clang/test/Analysis/string.c
+++ b/clang/test/Analysis/string.c
@@ -97,6 +97,17 @@ void strlen_constant2(char x) {
   clang_analyzer_eval(strlen(a) == 3); // expected-warning{{UNKNOWN}}
 }
 
+const char *const global_str_ptr = "abcd";
+const char global_str_arr[] = "efgh";
+
+void strlen_global_constant_ptr(void) {
+  clang_analyzer_eval(strlen(global_str_ptr) == 4); // expected-warning{{TRUE}}
+}
+
+void strlen_global_constant_arr(void) {
+  clang_analyzer_eval(strlen(global_str_arr) == 4); // expected-warning{{TRUE}}
+}
+
 size_t strlen_null(void) {
   return strlen(0); // expected-warning{{Null pointer passed as 1st argument 
to string length function}}
 }

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D157331: [clang] Implement C23

2023-10-05 Thread Zijun Zhao via Phabricator via cfe-commits
ZijunZhao updated this revision to Diff 557622.
ZijunZhao added a comment.

1. set `--triple=x86-64` as the first argument
2. run the script for the tests


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D157331/new/

https://reviews.llvm.org/D157331

Files:
  clang/docs/ReleaseNotes.rst
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/lib/Headers/CMakeLists.txt
  clang/lib/Headers/stdckdint.h
  clang/lib/Lex/PPDirectives.cpp
  clang/lib/Sema/SemaChecking.cpp
  clang/test/C/C2x/n2359.c
  clang/test/C/C2x/n2683.c
  clang/test/C/C2x/n2683_2.c
  clang/test/Headers/stdckdint.c
  clang/test/Sema/builtins-overflow.c
  clang/www/c_status.html

Index: clang/www/c_status.html
===
--- clang/www/c_status.html
+++ clang/www/c_status.html
@@ -887,6 +887,11 @@
   https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2672.pdf;>N2672
   Yes
 
+
+  Towards Integer Safety
+  https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2683.pdf;>N2683
+  Clang 18
+
 
   Adding Fundamental Type for N-bit Integers
 
Index: clang/test/Sema/builtins-overflow.c
===
--- clang/test/Sema/builtins-overflow.c
+++ clang/test/Sema/builtins-overflow.c
@@ -14,11 +14,11 @@
   __builtin_add_overflow();  // expected-error {{too few arguments to function call, expected 3, have 0}}
   __builtin_add_overflow(1, 1, 1, 1);  // expected-error {{too many arguments to function call, expected 3, have 4}}
 
-  __builtin_add_overflow(c, 1, );  // expected-error {{operand argument to overflow builtin must be an integer ('const char *' invalid)}}
-  __builtin_add_overflow(1, c, );  // expected-error {{operand argument to overflow builtin must be an integer ('const char *' invalid)}}
-  __builtin_add_overflow(1, 1, 3);  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer ('int' invalid)}}
-  __builtin_add_overflow(1, 1, );  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer ('float *' invalid)}}
-  __builtin_add_overflow(1, 1, );  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer ('const unsigned int *' invalid)}}
+  __builtin_add_overflow(c, 1, );  // expected-error {{operand argument to overflow builtin must be an integer type ('const char *' invalid)}}
+  __builtin_add_overflow(1, c, );  // expected-error {{operand argument to overflow builtin must be an integer type ('const char *' invalid)}}
+  __builtin_add_overflow(1, 1, 3);  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer type ('int' invalid)}}
+  __builtin_add_overflow(1, 1, );  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer type ('float *' invalid)}}
+  __builtin_add_overflow(1, 1, );  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer type ('const unsigned int *' invalid)}}
 
   {
 _BitInt(128) x = 1;
Index: clang/test/Headers/stdckdint.c
===
--- /dev/null
+++ clang/test/Headers/stdckdint.c
@@ -0,0 +1,51 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 3
+// RUN: %clang_cc1 -triple=x86_64 -emit-llvm -verify -std=c23 %s -o - | FileCheck %s
+// expected-no-diagnostics
+#include 
+
+_Static_assert(__STDC_VERSION_STDCKDINT_H__ == 202311L, "");
+
+// CHECK-LABEL: define dso_local zeroext i1 @test_ckd_add(
+// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:[[RESULT:%.*]] = alloca i32, align 4
+// CHECK-NEXT:[[TMP0:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 -1073741826, i32 -1073741826)
+// CHECK-NEXT:[[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1
+// CHECK-NEXT:[[TMP2:%.*]] = extractvalue { i32, i1 } [[TMP0]], 0
+// CHECK-NEXT:store i32 [[TMP2]], ptr [[RESULT]], align 4
+// CHECK-NEXT:ret i1 [[TMP1]]
+//
+bool test_ckd_add() {
+  int result;
+  return ckd_add(, -1073741826, -1073741826);
+}
+
+// CHECK-LABEL: define dso_local zeroext i1 @test_ckd_sub(
+// CHECK-SAME: ) #[[ATTR0]] {
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:[[RESULT:%.*]] = alloca i32, align 4
+// CHECK-NEXT:[[TMP0:%.*]] = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 -1073741826, i32 1073741826)
+// CHECK-NEXT:[[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1
+// CHECK-NEXT:[[TMP2:%.*]] = extractvalue { i32, i1 } [[TMP0]], 0
+// CHECK-NEXT:store i32 [[TMP2]], ptr [[RESULT]], align 4
+// CHECK-NEXT:ret i1 [[TMP1]]
+//
+bool test_ckd_sub() {
+  int result;
+  return ckd_sub(, -1073741826, 1073741826);
+}
+
+// CHECK-LABEL: define dso_local zeroext i1 @test_ckd_mul(
+// CHECK-SAME: ) #[[ATTR0]] {
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:  

[PATCH] D157331: [clang] Implement C23

2023-10-05 Thread Jessica Clarke via Phabricator via cfe-commits
jrtc27 added inline comments.



Comment at: clang/test/C/C2x/n2683_2.c:5-6
+#include 
+#include 
+// CHECK-LABEL: define dso_local void @test_add_overflow_to64(
+// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {

UTC won't insert such a blank line if it doesn't exist in the input


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D157331/new/

https://reviews.llvm.org/D157331

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [mlir][llvm] Fix elem type passing into `getelementptr` (PR #68136)

2023-10-05 Thread Mehdi Amini via cfe-commits

joker-eph wrote:

Reverted, the bots have been broken all day.

https://github.com/llvm/llvm-project/pull/68136
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [MLIR][Presburger] Fix reduce bug in Fraction class and add tests (PR #68298)

2023-10-05 Thread Arjun P via cfe-commits


@@ -0,0 +1,51 @@
+#include "mlir/Analysis/Presburger/Fraction.h"
+#include "./Utils.h"
+#include 
+#include 
+
+using namespace mlir;
+using namespace presburger;
+
+TEST(FractionTest, getAsInteger) {
+  Fraction f(3, 1);
+  EXPECT_EQ(f.getAsInteger(), MPInt(3));
+}
+
+TEST(FractionTest, nearIntegers) {
+  Fraction f(52, 14);
+
+  EXPECT_EQ(floor(f), 3);
+  EXPECT_EQ(ceil(f), 4);
+}
+
+TEST(FractionTest, reduce) {
+  Fraction f(20, 35), g(-56, 63);
+  EXPECT_EQ(f, Fraction(4, 7));
+  EXPECT_EQ(g, Fraction(-8, 9));
+}
+
+TEST(FractionTest, arithmetic) {
+  Fraction f(3, 4), g(-2, 3);
+
+  EXPECT_EQ(f / g, Fraction(-9, 8));
+  EXPECT_EQ(f * g, Fraction(-1, 2));
+  EXPECT_EQ(f + g, Fraction(1, 12));
+  EXPECT_EQ(f - g, Fraction(17, 12));
+
+  f /= g;
+  EXPECT_EQ(f, Fraction(-9, 8));
+  f *= g;
+  EXPECT_EQ(f, Fraction(3, 4));
+  f += g;
+  EXPECT_EQ(f, Fraction(Fraction(1, 12)));
+  f -= g;
+  EXPECT_EQ(f, Fraction(3, 4));
+}
+
+TEST(FractionTest, relational) {
+  Fraction f(2, 5), g(3, 7);
+  ASSERT_TRUE(f < g);
+  ASSERT_FALSE(g < f);

Superty wrote:

You can use EXPECT_TRUE/EXPECT_FALSE here

https://github.com/llvm/llvm-project/pull/68298
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [MLIR][Presburger] Fix reduce bug in Fraction class and add tests (PR #68298)

2023-10-05 Thread Arjun P via cfe-commits

https://github.com/Superty requested changes to this pull request.


https://github.com/llvm/llvm-project/pull/68298
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [MLIR][Presburger] Fix reduce bug in Fraction class and add tests (PR #68298)

2023-10-05 Thread Arjun P via cfe-commits


@@ -0,0 +1,51 @@
+#include "mlir/Analysis/Presburger/Fraction.h"
+#include "./Utils.h"
+#include 
+#include 
+
+using namespace mlir;
+using namespace presburger;
+
+TEST(FractionTest, getAsInteger) {
+  Fraction f(3, 1);
+  EXPECT_EQ(f.getAsInteger(), MPInt(3));
+}
+
+TEST(FractionTest, nearIntegers) {
+  Fraction f(52, 14);
+
+  EXPECT_EQ(floor(f), 3);
+  EXPECT_EQ(ceil(f), 4);
+}
+
+TEST(FractionTest, reduce) {
+  Fraction f(20, 35), g(-56, 63);
+  EXPECT_EQ(f, Fraction(4, 7));
+  EXPECT_EQ(g, Fraction(-8, 9));
+}
+
+TEST(FractionTest, arithmetic) {
+  Fraction f(3, 4), g(-2, 3);
+
+  EXPECT_EQ(f / g, Fraction(-9, 8));
+  EXPECT_EQ(f * g, Fraction(-1, 2));
+  EXPECT_EQ(f + g, Fraction(1, 12));
+  EXPECT_EQ(f - g, Fraction(17, 12));
+
+  f /= g;
+  EXPECT_EQ(f, Fraction(-9, 8));
+  f *= g;
+  EXPECT_EQ(f, Fraction(3, 4));
+  f += g;
+  EXPECT_EQ(f, Fraction(Fraction(1, 12)));
+  f -= g;
+  EXPECT_EQ(f, Fraction(3, 4));
+}
+
+TEST(FractionTest, relational) {
+  Fraction f(2, 5), g(3, 7);
+  ASSERT_TRUE(f < g);
+  ASSERT_FALSE(g < f);

Superty wrote:

You can use EXPECT_TRUE/EXPECT_FALSE here

https://github.com/llvm/llvm-project/pull/68298
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [MLIR][Presburger] Fix reduce bug in Fraction class and add tests (PR #68298)

2023-10-05 Thread Arjun P via cfe-commits

https://github.com/Superty edited 
https://github.com/llvm/llvm-project/pull/68298
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [MLIR][Presburger] Fix reduce bug in Fraction class and add tests (PR #68298)

2023-10-05 Thread Arjun P via cfe-commits


@@ -0,0 +1,51 @@
+#include "mlir/Analysis/Presburger/Fraction.h"
+#include "./Utils.h"
+#include 
+#include 
+
+using namespace mlir;
+using namespace presburger;
+
+TEST(FractionTest, getAsInteger) {
+  Fraction f(3, 1);
+  EXPECT_EQ(f.getAsInteger(), MPInt(3));
+}
+
+TEST(FractionTest, nearIntegers) {
+  Fraction f(52, 14);
+
+  EXPECT_EQ(floor(f), 3);
+  EXPECT_EQ(ceil(f), 4);
+}
+
+TEST(FractionTest, reduce) {
+  Fraction f(20, 35), g(-56, 63);
+  EXPECT_EQ(f, Fraction(4, 7));
+  EXPECT_EQ(g, Fraction(-8, 9));
+}
+
+TEST(FractionTest, arithmetic) {
+  Fraction f(3, 4), g(-2, 3);
+
+  EXPECT_EQ(f / g, Fraction(-9, 8));
+  EXPECT_EQ(f * g, Fraction(-1, 2));
+  EXPECT_EQ(f + g, Fraction(1, 12));
+  EXPECT_EQ(f - g, Fraction(17, 12));
+
+  f /= g;
+  EXPECT_EQ(f, Fraction(-9, 8));
+  f *= g;
+  EXPECT_EQ(f, Fraction(3, 4));
+  f += g;
+  EXPECT_EQ(f, Fraction(Fraction(1, 12)));
+  f -= g;
+  EXPECT_EQ(f, Fraction(3, 4));
+}
+
+TEST(FractionTest, relational) {
+  Fraction f(2, 5), g(3, 7);
+  ASSERT_TRUE(f < g);
+  ASSERT_FALSE(g < f);
+
+  EXPECT_EQ(f, Fraction(4, 10));
+}

Superty wrote:

please add a new line to the end of the file

https://github.com/llvm/llvm-project/pull/68298
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [MLIR][Presburger] Fix reduce bug in Fraction class and add tests (PR #68298)

2023-10-05 Thread Arjun P via cfe-commits


@@ -0,0 +1,51 @@
+#include "mlir/Analysis/Presburger/Fraction.h"
+#include "./Utils.h"
+#include 
+#include 
+
+using namespace mlir;
+using namespace presburger;
+
+TEST(FractionTest, getAsInteger) {
+  Fraction f(3, 1);
+  EXPECT_EQ(f.getAsInteger(), MPInt(3));
+}
+
+TEST(FractionTest, nearIntegers) {
+  Fraction f(52, 14);
+
+  EXPECT_EQ(floor(f), 3);
+  EXPECT_EQ(ceil(f), 4);
+}
+
+TEST(FractionTest, reduce) {
+  Fraction f(20, 35), g(-56, 63);
+  EXPECT_EQ(f, Fraction(4, 7));
+  EXPECT_EQ(g, Fraction(-8, 9));
+}
+
+TEST(FractionTest, arithmetic) {
+  Fraction f(3, 4), g(-2, 3);
+
+  EXPECT_EQ(f / g, Fraction(-9, 8));
+  EXPECT_EQ(f * g, Fraction(-1, 2));
+  EXPECT_EQ(f + g, Fraction(1, 12));
+  EXPECT_EQ(f - g, Fraction(17, 12));
+
+  f /= g;
+  EXPECT_EQ(f, Fraction(-9, 8));
+  f *= g;
+  EXPECT_EQ(f, Fraction(3, 4));
+  f += g;
+  EXPECT_EQ(f, Fraction(Fraction(1, 12)));
+  f -= g;
+  EXPECT_EQ(f, Fraction(3, 4));
+}
+
+TEST(FractionTest, relational) {
+  Fraction f(2, 5), g(3, 7);
+  ASSERT_TRUE(f < g);
+  ASSERT_FALSE(g < f);
+
+  EXPECT_EQ(f, Fraction(4, 10));
+}

Superty wrote:

please add a new line to the end of the file

https://github.com/llvm/llvm-project/pull/68298
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [MLIR][Presburger] Fix reduce bug in Fraction class and add tests (PR #68298)

2023-10-05 Thread Arjun P via cfe-commits

https://github.com/Superty requested changes to this pull request.


https://github.com/llvm/llvm-project/pull/68298
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Replace uses of CreatePointerBitCastOrAddrSpaceCast (NFC) (PR #68277)

2023-10-05 Thread Youngsuk Kim via cfe-commits


@@ -3088,9 +3088,6 @@ void ItaniumCXXABI::EmitThreadLocalInitFuncs(
   CharUnits Align = CGM.getContext().getDeclAlign(VD);
   Val = Builder.CreateAlignedLoad(Var->getValueType(), Val, Align);
 }
-if (Val->getType() != Wrapper->getReturnType())
-  Val = Builder.CreatePointerBitCastOrAddrSpaceCast(

JOE1994 wrote:

Maybe I should play safe by just replacing the call to `CreateAddrSpaceCast` 
instead of stripping it entirely.



https://github.com/llvm/llvm-project/pull/68277
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Replace uses of CreatePointerBitCastOrAddrSpaceCast (NFC) (PR #68277)

2023-10-05 Thread Youngsuk Kim via cfe-commits


@@ -2138,6 +2138,8 @@ class IRBuilderBase {
 return Insert(CastInst::CreatePointerCast(V, DestTy), Name);
   }
 
+  // With opaque pointers enabled, this is same as CreateAddressSpaceCast.

JOE1994 wrote:

```suggestion
  // With opaque pointers enabled, this can be substituted with 
CreateAddrSpaceCast.
```

https://github.com/llvm/llvm-project/pull/68277
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Replace uses of CreatePointerBitCastOrAddrSpaceCast (NFC) (PR #68277)

2023-10-05 Thread Youngsuk Kim via cfe-commits


@@ -2138,6 +2138,8 @@ class IRBuilderBase {
 return Insert(CastInst::CreatePointerCast(V, DestTy), Name);
   }
 
+  // With opaque pointers enabled, this is same as CreateAddressSpaceCast.

JOE1994 wrote:

> If the types (= address spaces) are the same, 
> CreatePointerBitCastOrAddrSpaceCast does nothing, while 
> CreateAddressSpaceCast aborts. That is, they are equivalent iff the types are 
> different.

Thank you for the clarification!

So `CreateAddrSpaceCast` and `CreatePointerBitCastOrAddrSpaceCast` aren't 
strict equivalents,
but it still seems that uses of `CreatePointerBitCastOrAddrSpaceCast` can be 
substituted with `CreateAddrSpaceCast`.

https://github.com/llvm/llvm-project/pull/68277
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Ensure fixed point conversions work in C++ (PR #68344)

2023-10-05 Thread John McCall via cfe-commits

https://github.com/rjmccall edited 
https://github.com/llvm/llvm-project/pull/68344
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Ensure fixed point conversions work in C++ (PR #68344)

2023-10-05 Thread John McCall via cfe-commits


@@ -156,7 +156,8 @@ ImplicitConversionRank 
clang::GetConversionRank(ImplicitConversionKind Kind) {
  // it was omitted by the patch that added
  // ICK_Zero_Queue_Conversion
 ICR_C_Conversion,
-ICR_C_Conversion_Extension
+ICR_C_Conversion_Extension,
+ICR_C_Conversion_Extension,

rjmccall wrote:

What's the consequence of using `ICR_C_Conversion_Extension` here instead of 
just an ordinary conversion?  In a sense, this isn't an extension in the same 
way that some of the other conversions are — these are just fundamental types 
that C++ hasn't incorporated into the standard yet.

https://github.com/llvm/llvm-project/pull/68344
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Ensure fixed point conversions work in C++ (PR #68344)

2023-10-05 Thread John McCall via cfe-commits


@@ -2192,6 +2194,9 @@ static bool IsStandardConversion(Sema , Expr* From, 
QualType ToType,
  From->isIntegerConstantExpr(S.getASTContext())) {
 SCS.Second = ICK_Compatible_Conversion;
 FromType = ToType;
+  } else if (ToType->isFixedPointType() || FromType->isFixedPointType()) {
+SCS.Second = ICK_Fixed_Point_Conversion;

rjmccall wrote:

I guess there's not really any value in breaking this down here?  Seems 
reasonable.

https://github.com/llvm/llvm-project/pull/68344
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Replace uses of CreatePointerBitCastOrAddrSpaceCast (NFC) (PR #68277)

2023-10-05 Thread Sergei Barannikov via cfe-commits


@@ -2138,6 +2138,8 @@ class IRBuilderBase {
 return Insert(CastInst::CreatePointerCast(V, DestTy), Name);
   }
 
+  // With opaque pointers enabled, this is same as CreateAddressSpaceCast.

s-barannikov wrote:

I'll try to rephrase @arsenm comment.
If the types (= address spaces) are the same, 
CreatePointerBitCastOrAddrSpaceCast does nothing, while CreateAddressSpaceCast 
aborts. That is, they are equivalent iff the types are different.


https://github.com/llvm/llvm-project/pull/68277
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Replace uses of CreatePointerBitCastOrAddrSpaceCast (NFC) (PR #68277)

2023-10-05 Thread Sergei Barannikov via cfe-commits


@@ -3088,9 +3088,6 @@ void ItaniumCXXABI::EmitThreadLocalInitFuncs(
   CharUnits Align = CGM.getContext().getDeclAlign(VD);
   Val = Builder.CreateAlignedLoad(Var->getValueType(), Val, Align);
 }
-if (Val->getType() != Wrapper->getReturnType())
-  Val = Builder.CreatePointerBitCastOrAddrSpaceCast(

s-barannikov wrote:

I couldn't break it with something like:
```
using int_as1 = int __attribute((address_space(1)));
using int_as2 = int __attribute((address_space(2)));

extern int_as1 foo();

//thread_local const int_as2  = foo(); // error
//thread_local const int_as1  = foo(); // error (?)
thread_local const int & __attribute((address_space(1))) r = foo(); // compiles 
(?)
```
The behavior is not intuitive to me, however.


https://github.com/llvm/llvm-project/pull/68277
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [llvm-profdata] Do not create numerical strings for MD5 function names read from a Sample Profile. (PR #66164)

2023-10-05 Thread William Junda Huang via cfe-commits

huangjd wrote:

It looks like after using HashKeyMap, the purpose of SymbolMap and 
GUIDToFuncNameMap can be merged. SymbolMap maps StringRef to Function*, 
GUIDToFuncNameMap maps ProfileFuncRef's hash code to StringRef, and it's almost 
exclusively cascaded to SymbolMap lookup, so we can actually combine two maps 
into one, saving a lot of time. 

https://github.com/llvm/llvm-project/pull/66164
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm-profdata] Do not create numerical strings for MD5 function names read from a Sample Profile. (PR #66164)

2023-10-05 Thread William Junda Huang via cfe-commits

huangjd wrote:

It looks like after using HashKeyMap, the purpose of SymbolMap and 
GUIDToFuncNameMap can be merged. SymbolMap maps StringRef to Function*, 
GUIDToFuncNameMap maps ProfileFuncRef's hash code to StringRef, and it's almost 
exclusively cascaded to SymbolMap lookup, so we can actually combine two maps 
into one, saving a lot of time. 

https://github.com/llvm/llvm-project/pull/66164
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [IRPGO][ValueProfile] Instrument virtual table address that could be used to do virtual table address comparision for indirect-call-promotion. (PR #66825)

2023-10-05 Thread via cfe-commits

https://github.com/modiking edited 
https://github.com/llvm/llvm-project/pull/66825
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [IRPGO][ValueProfile] Instrument virtual table address that could be used to do virtual table address comparision for indirect-call-promotion. (PR #66825)

2023-10-05 Thread via cfe-commits


@@ -19,20 +19,38 @@ namespace llvm {
 // Visitor class that finds all indirect call.
 struct PGOIndirectCallVisitor : public InstVisitor {
   std::vector IndirectCalls;
+  std::vector VTableAddrs;
   PGOIndirectCallVisitor() = default;
 
   void visitCallBase(CallBase ) {
 if (Call.isIndirectCall())
-  IndirectCalls.push_back();
+  if (Call.isIndirectCall()) {
+IndirectCalls.push_back();
+
+LoadInst *LI = dyn_cast(Call.getCalledOperand());

modiking wrote:

True, detection would need to be done in Clang. Maybe a better way to think 
about/document this is that this particular feature of IRPGO is enabled when 
`-fwhole-program-vtables` is enabled and otherwise disabled. The backend flag 
can still exist but more as an opt-out option.

https://github.com/llvm/llvm-project/pull/66825
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [OpenMPIRBuilder] Add ThreadLimit and NumTeamsUpper clauses to teams clause (PR #68364)

2023-10-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-flang-openmp


Changes

This patch adds support for `thread_limit` and upperbound on `num_teams` clause 
for the teams construct in OpenMP.

Added testcases for the same.

---
Full diff: https://github.com/llvm/llvm-project/pull/68364.diff


3 Files Affected:

- (modified) llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h (+6-1) 
- (modified) llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp (+13-1) 
- (modified) llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp (+157) 


``diff
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h 
b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
index 75da461cfd8d95e..95f30d4a0d5cd5d 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
@@ -1917,8 +1917,13 @@ class OpenMPIRBuilder {
   ///
   /// \param Loc The location where the teams construct was encountered.
   /// \param BodyGenCB Callback that will generate the region code.
+  /// \param NumTeamsUpper Upper bound on the number of teams.
+  /// \param ThreadLimit on the number of threads that may participate in a
+  ///contention group created by each team.
   InsertPointTy createTeams(const LocationDescription ,
-BodyGenCallbackTy BodyGenCB);
+BodyGenCallbackTy BodyGenCB,
+Value *NumTeamsUpper = nullptr,
+Value *ThreadLimit = nullptr);
 
   /// Generate conditional branch and relevant BasicBlocks through which 
private
   /// threads copy the 'copyin' variables from Master copy to threadprivate
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp 
b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 72e1af55fe63f60..b6d79e068f61e6e 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -5733,7 +5733,8 @@ OpenMPIRBuilder::InsertPointTy 
OpenMPIRBuilder::createAtomicCompare(
 
 OpenMPIRBuilder::InsertPointTy
 OpenMPIRBuilder::createTeams(const LocationDescription ,
- BodyGenCallbackTy BodyGenCB) {
+ BodyGenCallbackTy BodyGenCB, Value *NumTeamsUpper,
+ Value *ThreadLimit) {
   if (!updateToLocation(Loc))
 return InsertPointTy();
 
@@ -5771,6 +5772,17 @@ OpenMPIRBuilder::createTeams(const LocationDescription 
,
   BasicBlock *AllocaBB =
   splitBB(Builder, /*CreateBranch=*/true, "teams.alloca");
 
+  // Push num_teams
+  if (NumTeamsUpper || ThreadLimit) {
+NumTeamsUpper =
+NumTeamsUpper == nullptr ? Builder.getInt32(0) : NumTeamsUpper;
+ThreadLimit = ThreadLimit == nullptr ? Builder.getInt32(0) : ThreadLimit;
+Value *ThreadNum = getOrCreateThreadID(Ident);
+Builder.CreateCall(
+getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams),
+{Ident, ThreadNum, NumTeamsUpper, ThreadLimit});
+  }
+
   OutlineInfo OI;
   OI.EntryBB = AllocaBB;
   OI.ExitBB = ExitBB;
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp 
b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index fd524f6067ee0ea..fb87389023910c2 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -4082,6 +4082,163 @@ TEST_F(OpenMPIRBuilderTest, CreateTeams) {
  [](Instruction ) { return isa(); }));
 }
 
+TEST_F(OpenMPIRBuilderTest, CreateTeamsWithThreadLimit) {
+  using InsertPointTy = OpenMPIRBuilder::InsertPointTy;
+  OpenMPIRBuilder OMPBuilder(*M);
+  OMPBuilder.initialize();
+  F->setName("func");
+  IRBuilder<>  = OMPBuilder.Builder;
+  Builder.SetInsertPoint(BB);
+
+  Function *FakeFunction =
+  Function::Create(FunctionType::get(Builder.getVoidTy(), false),
+   GlobalValue::ExternalLinkage, "fakeFunction", M.get());
+
+  auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+Builder.restoreIP(CodeGenIP);
+Builder.CreateCall(FakeFunction, {});
+  };
+
+  OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
+  Builder.restoreIP(
+  OMPBuilder.createTeams(Builder, BodyGenCB, nullptr, F->arg_begin()));
+
+  Builder.CreateRetVoid();
+  OMPBuilder.finalize();
+
+  ASSERT_FALSE(verifyModule(*M));
+
+  Function *PushNumTeamsRTL =
+  OMPBuilder.getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams);
+  EXPECT_EQ(PushNumTeamsRTL->getNumUses(), 1U);
+
+  CallInst *PushNumTeamsCallInst =
+  findSingleCall(F, OMPRTL___kmpc_push_num_teams, OMPBuilder);
+  ASSERT_NE(PushNumTeamsCallInst, nullptr);
+
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(2), Builder.getInt32(0));
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(3), &*F->arg_begin());
+
+  // Verifying that the next instruction to execute is kmpc_fork_teams
+  BranchInst *BrInst =
+  dyn_cast(PushNumTeamsCallInst->getNextNonDebugInstruction());
+  ASSERT_NE(BrInst, nullptr);
+  ASSERT_EQ(BrInst->getNumSuccessors(), 1U);
+  

[libclc] [OpenMPIRBuilder] Add ThreadLimit and NumTeamsUpper clauses to teams clause (PR #68364)

2023-10-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-flang-openmp


Changes

This patch adds support for `thread_limit` and upperbound on `num_teams` clause 
for the teams construct in OpenMP.

Added testcases for the same.

---
Full diff: https://github.com/llvm/llvm-project/pull/68364.diff


3 Files Affected:

- (modified) llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h (+6-1) 
- (modified) llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp (+13-1) 
- (modified) llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp (+157) 


``diff
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h 
b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
index 75da461cfd8d95e..95f30d4a0d5cd5d 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
@@ -1917,8 +1917,13 @@ class OpenMPIRBuilder {
   ///
   /// \param Loc The location where the teams construct was encountered.
   /// \param BodyGenCB Callback that will generate the region code.
+  /// \param NumTeamsUpper Upper bound on the number of teams.
+  /// \param ThreadLimit on the number of threads that may participate in a
+  ///contention group created by each team.
   InsertPointTy createTeams(const LocationDescription ,
-BodyGenCallbackTy BodyGenCB);
+BodyGenCallbackTy BodyGenCB,
+Value *NumTeamsUpper = nullptr,
+Value *ThreadLimit = nullptr);
 
   /// Generate conditional branch and relevant BasicBlocks through which 
private
   /// threads copy the 'copyin' variables from Master copy to threadprivate
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp 
b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 72e1af55fe63f60..b6d79e068f61e6e 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -5733,7 +5733,8 @@ OpenMPIRBuilder::InsertPointTy 
OpenMPIRBuilder::createAtomicCompare(
 
 OpenMPIRBuilder::InsertPointTy
 OpenMPIRBuilder::createTeams(const LocationDescription ,
- BodyGenCallbackTy BodyGenCB) {
+ BodyGenCallbackTy BodyGenCB, Value *NumTeamsUpper,
+ Value *ThreadLimit) {
   if (!updateToLocation(Loc))
 return InsertPointTy();
 
@@ -5771,6 +5772,17 @@ OpenMPIRBuilder::createTeams(const LocationDescription 
,
   BasicBlock *AllocaBB =
   splitBB(Builder, /*CreateBranch=*/true, "teams.alloca");
 
+  // Push num_teams
+  if (NumTeamsUpper || ThreadLimit) {
+NumTeamsUpper =
+NumTeamsUpper == nullptr ? Builder.getInt32(0) : NumTeamsUpper;
+ThreadLimit = ThreadLimit == nullptr ? Builder.getInt32(0) : ThreadLimit;
+Value *ThreadNum = getOrCreateThreadID(Ident);
+Builder.CreateCall(
+getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams),
+{Ident, ThreadNum, NumTeamsUpper, ThreadLimit});
+  }
+
   OutlineInfo OI;
   OI.EntryBB = AllocaBB;
   OI.ExitBB = ExitBB;
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp 
b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index fd524f6067ee0ea..fb87389023910c2 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -4082,6 +4082,163 @@ TEST_F(OpenMPIRBuilderTest, CreateTeams) {
  [](Instruction ) { return isa(); }));
 }
 
+TEST_F(OpenMPIRBuilderTest, CreateTeamsWithThreadLimit) {
+  using InsertPointTy = OpenMPIRBuilder::InsertPointTy;
+  OpenMPIRBuilder OMPBuilder(*M);
+  OMPBuilder.initialize();
+  F->setName("func");
+  IRBuilder<>  = OMPBuilder.Builder;
+  Builder.SetInsertPoint(BB);
+
+  Function *FakeFunction =
+  Function::Create(FunctionType::get(Builder.getVoidTy(), false),
+   GlobalValue::ExternalLinkage, "fakeFunction", M.get());
+
+  auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+Builder.restoreIP(CodeGenIP);
+Builder.CreateCall(FakeFunction, {});
+  };
+
+  OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
+  Builder.restoreIP(
+  OMPBuilder.createTeams(Builder, BodyGenCB, nullptr, F->arg_begin()));
+
+  Builder.CreateRetVoid();
+  OMPBuilder.finalize();
+
+  ASSERT_FALSE(verifyModule(*M));
+
+  Function *PushNumTeamsRTL =
+  OMPBuilder.getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams);
+  EXPECT_EQ(PushNumTeamsRTL->getNumUses(), 1U);
+
+  CallInst *PushNumTeamsCallInst =
+  findSingleCall(F, OMPRTL___kmpc_push_num_teams, OMPBuilder);
+  ASSERT_NE(PushNumTeamsCallInst, nullptr);
+
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(2), Builder.getInt32(0));
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(3), &*F->arg_begin());
+
+  // Verifying that the next instruction to execute is kmpc_fork_teams
+  BranchInst *BrInst =
+  dyn_cast(PushNumTeamsCallInst->getNextNonDebugInstruction());
+  ASSERT_NE(BrInst, nullptr);
+  ASSERT_EQ(BrInst->getNumSuccessors(), 1U);
+  

[clang] [Sema] Add check for bitfield assignments to larger integral types (PR #68276)

2023-10-05 Thread via cfe-commits

https://github.com/vabridgers edited 
https://github.com/llvm/llvm-project/pull/68276
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMPIRBuilder] Add ThreadLimit and NumTeamsUpper clauses to teams clause (PR #68364)

2023-10-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-flang-openmp


Changes

This patch adds support for `thread_limit` and upperbound on `num_teams` clause 
for the teams construct in OpenMP.

Added testcases for the same.

---
Full diff: https://github.com/llvm/llvm-project/pull/68364.diff


3 Files Affected:

- (modified) llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h (+6-1) 
- (modified) llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp (+13-1) 
- (modified) llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp (+157) 


``diff
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h 
b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
index 75da461cfd8d95e..95f30d4a0d5cd5d 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
@@ -1917,8 +1917,13 @@ class OpenMPIRBuilder {
   ///
   /// \param Loc The location where the teams construct was encountered.
   /// \param BodyGenCB Callback that will generate the region code.
+  /// \param NumTeamsUpper Upper bound on the number of teams.
+  /// \param ThreadLimit on the number of threads that may participate in a
+  ///contention group created by each team.
   InsertPointTy createTeams(const LocationDescription ,
-BodyGenCallbackTy BodyGenCB);
+BodyGenCallbackTy BodyGenCB,
+Value *NumTeamsUpper = nullptr,
+Value *ThreadLimit = nullptr);
 
   /// Generate conditional branch and relevant BasicBlocks through which 
private
   /// threads copy the 'copyin' variables from Master copy to threadprivate
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp 
b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 72e1af55fe63f60..b6d79e068f61e6e 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -5733,7 +5733,8 @@ OpenMPIRBuilder::InsertPointTy 
OpenMPIRBuilder::createAtomicCompare(
 
 OpenMPIRBuilder::InsertPointTy
 OpenMPIRBuilder::createTeams(const LocationDescription ,
- BodyGenCallbackTy BodyGenCB) {
+ BodyGenCallbackTy BodyGenCB, Value *NumTeamsUpper,
+ Value *ThreadLimit) {
   if (!updateToLocation(Loc))
 return InsertPointTy();
 
@@ -5771,6 +5772,17 @@ OpenMPIRBuilder::createTeams(const LocationDescription 
,
   BasicBlock *AllocaBB =
   splitBB(Builder, /*CreateBranch=*/true, "teams.alloca");
 
+  // Push num_teams
+  if (NumTeamsUpper || ThreadLimit) {
+NumTeamsUpper =
+NumTeamsUpper == nullptr ? Builder.getInt32(0) : NumTeamsUpper;
+ThreadLimit = ThreadLimit == nullptr ? Builder.getInt32(0) : ThreadLimit;
+Value *ThreadNum = getOrCreateThreadID(Ident);
+Builder.CreateCall(
+getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams),
+{Ident, ThreadNum, NumTeamsUpper, ThreadLimit});
+  }
+
   OutlineInfo OI;
   OI.EntryBB = AllocaBB;
   OI.ExitBB = ExitBB;
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp 
b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index fd524f6067ee0ea..fb87389023910c2 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -4082,6 +4082,163 @@ TEST_F(OpenMPIRBuilderTest, CreateTeams) {
  [](Instruction ) { return isa(); }));
 }
 
+TEST_F(OpenMPIRBuilderTest, CreateTeamsWithThreadLimit) {
+  using InsertPointTy = OpenMPIRBuilder::InsertPointTy;
+  OpenMPIRBuilder OMPBuilder(*M);
+  OMPBuilder.initialize();
+  F->setName("func");
+  IRBuilder<>  = OMPBuilder.Builder;
+  Builder.SetInsertPoint(BB);
+
+  Function *FakeFunction =
+  Function::Create(FunctionType::get(Builder.getVoidTy(), false),
+   GlobalValue::ExternalLinkage, "fakeFunction", M.get());
+
+  auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+Builder.restoreIP(CodeGenIP);
+Builder.CreateCall(FakeFunction, {});
+  };
+
+  OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
+  Builder.restoreIP(
+  OMPBuilder.createTeams(Builder, BodyGenCB, nullptr, F->arg_begin()));
+
+  Builder.CreateRetVoid();
+  OMPBuilder.finalize();
+
+  ASSERT_FALSE(verifyModule(*M));
+
+  Function *PushNumTeamsRTL =
+  OMPBuilder.getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams);
+  EXPECT_EQ(PushNumTeamsRTL->getNumUses(), 1U);
+
+  CallInst *PushNumTeamsCallInst =
+  findSingleCall(F, OMPRTL___kmpc_push_num_teams, OMPBuilder);
+  ASSERT_NE(PushNumTeamsCallInst, nullptr);
+
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(2), Builder.getInt32(0));
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(3), &*F->arg_begin());
+
+  // Verifying that the next instruction to execute is kmpc_fork_teams
+  BranchInst *BrInst =
+  dyn_cast(PushNumTeamsCallInst->getNextNonDebugInstruction());
+  ASSERT_NE(BrInst, nullptr);
+  ASSERT_EQ(BrInst->getNumSuccessors(), 1U);
+  

[clang-tools-extra] [OpenMPIRBuilder] Add ThreadLimit and NumTeamsUpper clauses to teams clause (PR #68364)

2023-10-05 Thread via cfe-commits

https://github.com/shraiysh created 
https://github.com/llvm/llvm-project/pull/68364

This patch adds support for `thread_limit` and upperbound on `num_teams` clause 
for the teams construct in OpenMP.

Added testcases for the same.

>From 2d3b34476df53f39d6cc6b7eee02b9d0d33e7a04 Mon Sep 17 00:00:00 2001
From: Shraiysh Vaishay 
Date: Wed, 4 Oct 2023 15:55:55 -0500
Subject: [PATCH 1/3] [OpenMPIRBuilder] Add clauses to teams

This patch adds `num_teams` (upperbound) and `thread_limit` clauses to
`OpenMPIRBuilder`.
---
 .../llvm/Frontend/OpenMP/OMPIRBuilder.h   |   7 +-
 llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp |  14 ++-
 .../Frontend/OpenMPIRBuilderTest.cpp  | 115 ++
 3 files changed, 134 insertions(+), 2 deletions(-)

diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h 
b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
index 1699ed3aeab7661..8745b6df9e86330 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
@@ -1893,8 +1893,13 @@ class OpenMPIRBuilder {
   ///
   /// \param Loc The location where the teams construct was encountered.
   /// \param BodyGenCB Callback that will generate the region code.
+  /// \param NumTeamsUpper Upper bound on the number of teams.
+  /// \param ThreadLimit on the number of threads that may participate in a
+  ///contention group created by each team.
   InsertPointTy createTeams(const LocationDescription ,
-BodyGenCallbackTy BodyGenCB);
+BodyGenCallbackTy BodyGenCB,
+Value *NumTeamsUpper = nullptr,
+Value *ThreadLimit = nullptr);
 
   /// Generate conditional branch and relevant BasicBlocks through which 
private
   /// threads copy the 'copyin' variables from Master copy to threadprivate
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp 
b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 9c70d384e55db2b..62bc7b3d40ca43a 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -5733,7 +5733,8 @@ OpenMPIRBuilder::InsertPointTy 
OpenMPIRBuilder::createAtomicCompare(
 
 OpenMPIRBuilder::InsertPointTy
 OpenMPIRBuilder::createTeams(const LocationDescription ,
- BodyGenCallbackTy BodyGenCB) {
+ BodyGenCallbackTy BodyGenCB, Value *NumTeamsUpper,
+ Value *ThreadLimit) {
   if (!updateToLocation(Loc))
 return InsertPointTy();
 
@@ -5771,6 +5772,17 @@ OpenMPIRBuilder::createTeams(const LocationDescription 
,
   BasicBlock *AllocaBB =
   splitBB(Builder, /*CreateBranch=*/true, "teams.alloca");
 
+  // Push num_teams
+  if (NumTeamsUpper || ThreadLimit) {
+NumTeamsUpper =
+NumTeamsUpper == nullptr ? Builder.getInt32(0) : NumTeamsUpper;
+ThreadLimit = ThreadLimit == nullptr ? Builder.getInt32(0) : ThreadLimit;
+Value *ThreadNum = getOrCreateThreadID(Ident);
+Builder.CreateCall(
+getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams),
+{Ident, ThreadNum, NumTeamsUpper, ThreadLimit});
+  }
+
   OutlineInfo OI;
   OI.EntryBB = AllocaBB;
   OI.ExitBB = ExitBB;
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp 
b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index fd524f6067ee0ea..88b7e4b397e46de 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -4082,6 +4082,121 @@ TEST_F(OpenMPIRBuilderTest, CreateTeams) {
  [](Instruction ) { return isa(); }));
 }
 
+TEST_F(OpenMPIRBuilderTest, CreateTeamsWithThreadLimit) {
+  using InsertPointTy = OpenMPIRBuilder::InsertPointTy;
+  OpenMPIRBuilder OMPBuilder(*M);
+  OMPBuilder.initialize();
+  F->setName("func");
+  IRBuilder<>  = OMPBuilder.Builder;
+  Builder.SetInsertPoint(BB);
+
+  Function *FakeFunction =
+  Function::Create(FunctionType::get(Builder.getVoidTy(), false),
+   GlobalValue::ExternalLinkage, "fakeFunction", M.get());
+
+  auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+Builder.restoreIP(CodeGenIP);
+Builder.CreateCall(FakeFunction, {});
+  };
+
+  OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
+  Builder.restoreIP(
+  OMPBuilder.createTeams(Builder, BodyGenCB, nullptr, F->arg_begin()));
+
+  Builder.CreateRetVoid();
+  OMPBuilder.finalize();
+
+  ASSERT_FALSE(verifyModule(*M));
+
+  Function *PushNumTeamsRTL =
+  OMPBuilder.getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams);
+  EXPECT_EQ(PushNumTeamsRTL->getNumUses(), 1U);
+
+  CallInst *PushNumTeamsCallInst =
+  findSingleCall(F, OMPRTL___kmpc_push_num_teams, OMPBuilder);
+  ASSERT_NE(PushNumTeamsCallInst, nullptr);
+
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(2), Builder.getInt32(0));
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(3), &*F->arg_begin());
+
+  // 

[libclc] [OpenMPIRBuilder] Add ThreadLimit and NumTeamsUpper clauses to teams clause (PR #68364)

2023-10-05 Thread via cfe-commits

https://github.com/shraiysh created 
https://github.com/llvm/llvm-project/pull/68364

This patch adds support for `thread_limit` and upperbound on `num_teams` clause 
for the teams construct in OpenMP.

Added testcases for the same.

>From 2d3b34476df53f39d6cc6b7eee02b9d0d33e7a04 Mon Sep 17 00:00:00 2001
From: Shraiysh Vaishay 
Date: Wed, 4 Oct 2023 15:55:55 -0500
Subject: [PATCH 1/3] [OpenMPIRBuilder] Add clauses to teams

This patch adds `num_teams` (upperbound) and `thread_limit` clauses to
`OpenMPIRBuilder`.
---
 .../llvm/Frontend/OpenMP/OMPIRBuilder.h   |   7 +-
 llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp |  14 ++-
 .../Frontend/OpenMPIRBuilderTest.cpp  | 115 ++
 3 files changed, 134 insertions(+), 2 deletions(-)

diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h 
b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
index 1699ed3aeab7661..8745b6df9e86330 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
@@ -1893,8 +1893,13 @@ class OpenMPIRBuilder {
   ///
   /// \param Loc The location where the teams construct was encountered.
   /// \param BodyGenCB Callback that will generate the region code.
+  /// \param NumTeamsUpper Upper bound on the number of teams.
+  /// \param ThreadLimit on the number of threads that may participate in a
+  ///contention group created by each team.
   InsertPointTy createTeams(const LocationDescription ,
-BodyGenCallbackTy BodyGenCB);
+BodyGenCallbackTy BodyGenCB,
+Value *NumTeamsUpper = nullptr,
+Value *ThreadLimit = nullptr);
 
   /// Generate conditional branch and relevant BasicBlocks through which 
private
   /// threads copy the 'copyin' variables from Master copy to threadprivate
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp 
b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 9c70d384e55db2b..62bc7b3d40ca43a 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -5733,7 +5733,8 @@ OpenMPIRBuilder::InsertPointTy 
OpenMPIRBuilder::createAtomicCompare(
 
 OpenMPIRBuilder::InsertPointTy
 OpenMPIRBuilder::createTeams(const LocationDescription ,
- BodyGenCallbackTy BodyGenCB) {
+ BodyGenCallbackTy BodyGenCB, Value *NumTeamsUpper,
+ Value *ThreadLimit) {
   if (!updateToLocation(Loc))
 return InsertPointTy();
 
@@ -5771,6 +5772,17 @@ OpenMPIRBuilder::createTeams(const LocationDescription 
,
   BasicBlock *AllocaBB =
   splitBB(Builder, /*CreateBranch=*/true, "teams.alloca");
 
+  // Push num_teams
+  if (NumTeamsUpper || ThreadLimit) {
+NumTeamsUpper =
+NumTeamsUpper == nullptr ? Builder.getInt32(0) : NumTeamsUpper;
+ThreadLimit = ThreadLimit == nullptr ? Builder.getInt32(0) : ThreadLimit;
+Value *ThreadNum = getOrCreateThreadID(Ident);
+Builder.CreateCall(
+getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams),
+{Ident, ThreadNum, NumTeamsUpper, ThreadLimit});
+  }
+
   OutlineInfo OI;
   OI.EntryBB = AllocaBB;
   OI.ExitBB = ExitBB;
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp 
b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index fd524f6067ee0ea..88b7e4b397e46de 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -4082,6 +4082,121 @@ TEST_F(OpenMPIRBuilderTest, CreateTeams) {
  [](Instruction ) { return isa(); }));
 }
 
+TEST_F(OpenMPIRBuilderTest, CreateTeamsWithThreadLimit) {
+  using InsertPointTy = OpenMPIRBuilder::InsertPointTy;
+  OpenMPIRBuilder OMPBuilder(*M);
+  OMPBuilder.initialize();
+  F->setName("func");
+  IRBuilder<>  = OMPBuilder.Builder;
+  Builder.SetInsertPoint(BB);
+
+  Function *FakeFunction =
+  Function::Create(FunctionType::get(Builder.getVoidTy(), false),
+   GlobalValue::ExternalLinkage, "fakeFunction", M.get());
+
+  auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+Builder.restoreIP(CodeGenIP);
+Builder.CreateCall(FakeFunction, {});
+  };
+
+  OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
+  Builder.restoreIP(
+  OMPBuilder.createTeams(Builder, BodyGenCB, nullptr, F->arg_begin()));
+
+  Builder.CreateRetVoid();
+  OMPBuilder.finalize();
+
+  ASSERT_FALSE(verifyModule(*M));
+
+  Function *PushNumTeamsRTL =
+  OMPBuilder.getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams);
+  EXPECT_EQ(PushNumTeamsRTL->getNumUses(), 1U);
+
+  CallInst *PushNumTeamsCallInst =
+  findSingleCall(F, OMPRTL___kmpc_push_num_teams, OMPBuilder);
+  ASSERT_NE(PushNumTeamsCallInst, nullptr);
+
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(2), Builder.getInt32(0));
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(3), &*F->arg_begin());
+
+  // 

[clang] [OpenMPIRBuilder] Add ThreadLimit and NumTeamsUpper clauses to teams clause (PR #68364)

2023-10-05 Thread via cfe-commits

https://github.com/shraiysh created 
https://github.com/llvm/llvm-project/pull/68364

This patch adds support for `thread_limit` and upperbound on `num_teams` clause 
for the teams construct in OpenMP.

Added testcases for the same.

>From 2d3b34476df53f39d6cc6b7eee02b9d0d33e7a04 Mon Sep 17 00:00:00 2001
From: Shraiysh Vaishay 
Date: Wed, 4 Oct 2023 15:55:55 -0500
Subject: [PATCH 1/3] [OpenMPIRBuilder] Add clauses to teams

This patch adds `num_teams` (upperbound) and `thread_limit` clauses to
`OpenMPIRBuilder`.
---
 .../llvm/Frontend/OpenMP/OMPIRBuilder.h   |   7 +-
 llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp |  14 ++-
 .../Frontend/OpenMPIRBuilderTest.cpp  | 115 ++
 3 files changed, 134 insertions(+), 2 deletions(-)

diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h 
b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
index 1699ed3aeab7661..8745b6df9e86330 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPIRBuilder.h
@@ -1893,8 +1893,13 @@ class OpenMPIRBuilder {
   ///
   /// \param Loc The location where the teams construct was encountered.
   /// \param BodyGenCB Callback that will generate the region code.
+  /// \param NumTeamsUpper Upper bound on the number of teams.
+  /// \param ThreadLimit on the number of threads that may participate in a
+  ///contention group created by each team.
   InsertPointTy createTeams(const LocationDescription ,
-BodyGenCallbackTy BodyGenCB);
+BodyGenCallbackTy BodyGenCB,
+Value *NumTeamsUpper = nullptr,
+Value *ThreadLimit = nullptr);
 
   /// Generate conditional branch and relevant BasicBlocks through which 
private
   /// threads copy the 'copyin' variables from Master copy to threadprivate
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp 
b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 9c70d384e55db2b..62bc7b3d40ca43a 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -5733,7 +5733,8 @@ OpenMPIRBuilder::InsertPointTy 
OpenMPIRBuilder::createAtomicCompare(
 
 OpenMPIRBuilder::InsertPointTy
 OpenMPIRBuilder::createTeams(const LocationDescription ,
- BodyGenCallbackTy BodyGenCB) {
+ BodyGenCallbackTy BodyGenCB, Value *NumTeamsUpper,
+ Value *ThreadLimit) {
   if (!updateToLocation(Loc))
 return InsertPointTy();
 
@@ -5771,6 +5772,17 @@ OpenMPIRBuilder::createTeams(const LocationDescription 
,
   BasicBlock *AllocaBB =
   splitBB(Builder, /*CreateBranch=*/true, "teams.alloca");
 
+  // Push num_teams
+  if (NumTeamsUpper || ThreadLimit) {
+NumTeamsUpper =
+NumTeamsUpper == nullptr ? Builder.getInt32(0) : NumTeamsUpper;
+ThreadLimit = ThreadLimit == nullptr ? Builder.getInt32(0) : ThreadLimit;
+Value *ThreadNum = getOrCreateThreadID(Ident);
+Builder.CreateCall(
+getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams),
+{Ident, ThreadNum, NumTeamsUpper, ThreadLimit});
+  }
+
   OutlineInfo OI;
   OI.EntryBB = AllocaBB;
   OI.ExitBB = ExitBB;
diff --git a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp 
b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
index fd524f6067ee0ea..88b7e4b397e46de 100644
--- a/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
+++ b/llvm/unittests/Frontend/OpenMPIRBuilderTest.cpp
@@ -4082,6 +4082,121 @@ TEST_F(OpenMPIRBuilderTest, CreateTeams) {
  [](Instruction ) { return isa(); }));
 }
 
+TEST_F(OpenMPIRBuilderTest, CreateTeamsWithThreadLimit) {
+  using InsertPointTy = OpenMPIRBuilder::InsertPointTy;
+  OpenMPIRBuilder OMPBuilder(*M);
+  OMPBuilder.initialize();
+  F->setName("func");
+  IRBuilder<>  = OMPBuilder.Builder;
+  Builder.SetInsertPoint(BB);
+
+  Function *FakeFunction =
+  Function::Create(FunctionType::get(Builder.getVoidTy(), false),
+   GlobalValue::ExternalLinkage, "fakeFunction", M.get());
+
+  auto BodyGenCB = [&](InsertPointTy AllocaIP, InsertPointTy CodeGenIP) {
+Builder.restoreIP(CodeGenIP);
+Builder.CreateCall(FakeFunction, {});
+  };
+
+  OpenMPIRBuilder::LocationDescription Loc({Builder.saveIP(), DL});
+  Builder.restoreIP(
+  OMPBuilder.createTeams(Builder, BodyGenCB, nullptr, F->arg_begin()));
+
+  Builder.CreateRetVoid();
+  OMPBuilder.finalize();
+
+  ASSERT_FALSE(verifyModule(*M));
+
+  Function *PushNumTeamsRTL =
+  OMPBuilder.getOrCreateRuntimeFunctionPtr(OMPRTL___kmpc_push_num_teams);
+  EXPECT_EQ(PushNumTeamsRTL->getNumUses(), 1U);
+
+  CallInst *PushNumTeamsCallInst =
+  findSingleCall(F, OMPRTL___kmpc_push_num_teams, OMPBuilder);
+  ASSERT_NE(PushNumTeamsCallInst, nullptr);
+
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(2), Builder.getInt32(0));
+  EXPECT_EQ(PushNumTeamsCallInst->getArgOperand(3), &*F->arg_begin());
+
+  // 

[clang] [Sema] Add check for bitfield assignments to larger integral types (PR #68276)

2023-10-05 Thread via cfe-commits

https://github.com/vabridgers updated 
https://github.com/llvm/llvm-project/pull/68276

>From 83dd0fa7956942b6cffefb12caf5f070196b4ca3 Mon Sep 17 00:00:00 2001
From: Vince Bridgers 
Date: Thu, 5 Oct 2023 02:39:12 +0200
Subject: [PATCH] [Sema] Add check for bitfield assignments to integral types

We noticed that clang does not check for bitfield assignment widths,
while gcc does check this.

gcc produced a warning like so for it's -Wconversion flag:

$ gcc -Wconversion -c test.c
test.c: In function 'foo':
test.c:10:15: warning: conversion from 'int' to 'signed char:7' may
change value [-Wconversion]
   10 |  vxx.bf = x; // no warning
  |   ^

This change simply adds this for integral types under the -Wconversion
compiler option.
---
 .../clang/Basic/DiagnosticSemaKinds.td|  3 ++
 clang/lib/Sema/SemaChecking.cpp   | 14 
 clang/test/SemaCXX/bitfield-width.c   | 36 +++
 3 files changed, 53 insertions(+)
 create mode 100644 clang/test/SemaCXX/bitfield-width.c

diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 28f1db29e62fa91..ec0004d545357b7 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -6171,6 +6171,9 @@ def warn_signed_bitfield_enum_conversion : Warning<
   "signed bit-field %0 needs an extra bit to represent the largest positive "
   "enumerators of %1">,
   InGroup, DefaultIgnore;
+def warn_bitfield_too_small_for_integral_type : Warning<
+  "bit-field %0 (%1 bits) is not wide enough to store type of %2 ">,
+  InGroup, DefaultIgnore;
 def note_change_bitfield_sign : Note<
   "consider making the bitfield type %select{unsigned|signed}0">;
 
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 446e35218bff0ad..4a664eb1b4fb032 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -14299,6 +14299,19 @@ static bool AnalyzeBitFieldAssignment(Sema , 
FieldDecl *Bitfield, Expr *Init,
 S.Diag(WidthExpr->getExprLoc(), diag::note_widen_bitfield)
 << BitsNeeded << ED << WidthExpr->getSourceRange();
   }
+} else if (OriginalInit->getType()->isIntegralType(S.Context)) {
+  IntRange LikelySourceRange =
+  GetExprRange(S.Context, Init, S.isConstantEvaluatedContext(),
+   /*Approximate=*/true);
+
+  if (LikelySourceRange.Width > FieldWidth) {
+Expr *WidthExpr = Bitfield->getBitWidth();
+S.Diag(InitLoc, diag::warn_bitfield_too_small_for_integral_type)
+<< Bitfield << FieldWidth << OriginalInit->getType();
+S.Diag(WidthExpr->getExprLoc(), diag::note_widen_bitfield)
+<< LikelySourceRange.Width << OriginalInit->getType()
+<< WidthExpr->getSourceRange();
+  }
 }
 
 return false;
@@ -15224,6 +15237,7 @@ static void CheckImplicitConversion(Sema , Expr *E, 
QualType T,
 if (TargetRange.Width == 32 && S.Context.getIntWidth(E->getType()) == 64)
   return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_64_32,
  /* pruneControlFlow */ true);
+
 return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_precision);
   }
 
diff --git a/clang/test/SemaCXX/bitfield-width.c 
b/clang/test/SemaCXX/bitfield-width.c
new file mode 100644
index 000..cf6fd9231f9d439
--- /dev/null
+++ b/clang/test/SemaCXX/bitfield-width.c
@@ -0,0 +1,36 @@
+// RUN: %clang_cc1 -Wconversion -fsyntax-only -verify %s
+
+typedef struct _xx {
+ int bf:9; // expected-note{{widen this field to 32 bits to store all 
values of 'int'}}
+ // expected-note@-1{{widen this field to 16 bits to store all values of 
'short'}}
+ // expected-note@-2{{widen this field to 32 bits to store all values of 
'int'}}
+ // expected-note@-3{{widen this field to 10 bits to store all values of 
'int'}}
+ } xx, *pxx; 
+
+ xx vxx;
+
+ void foo1(int x) { 
+ vxx.bf = x; // expected-warning{{bit-field 'bf' (9 bits) is not wide 
enough to store type of 'int'}}
+ } 
+ void foo2(short x) { 
+ vxx.bf = x; // expected-warning{{bit-field 'bf' (9 bits) is not wide 
enough to store type of 'short'}}
+ } 
+ void foo3(char x) { 
+ vxx.bf = x; // no warning expected
+ } 
+ void foo5(void * x) { 
+ vxx.bf = (int)x; // expected-warning{{cast to smaller integer type 'int' 
from 'void *'}}
+ // expected-warning@-1{{bit-field 'bf' (9 bits) is not wide enough to 
store type of 'int'}}
+ } 
+ void foo6(short x) { 
+ vxx.bf = 0xff & x; // no warning expected 
+ } 
+ void foo7(short x) { 
+ vxx.bf = 0x1ff & x; // no warning expected 
+ } 
+ void foo8(short x) { 
+ vxx.bf = 0x3ff & x; // expected-warning{{bit-field 'bf' (9 bits) is not 
wide enough to store type of 'int'}} 
+ } 
+ int fee(void) {
+ return 0;
+ }

___
cfe-commits 

[clang] [Driver] Group together usage of AddAllArgs (PR #68349)

2023-10-05 Thread Brad Smith via cfe-commits

https://github.com/brad0 updated https://github.com/llvm/llvm-project/pull/68349

>From c333fbefacc648600fbf84466a60a20cb2331fc3 Mon Sep 17 00:00:00 2001
From: Brad Smith 
Date: Thu, 5 Oct 2023 16:09:04 -0400
Subject: [PATCH] [Driver] Group together usage of AddAllArgs

---
 clang/lib/Driver/ToolChains/DragonFly.cpp  | 3 +--
 clang/lib/Driver/ToolChains/FreeBSD.cpp| 8 +++-
 clang/lib/Driver/ToolChains/Fuchsia.cpp| 3 +--
 clang/lib/Driver/ToolChains/Gnu.cpp| 3 +--
 clang/lib/Driver/ToolChains/NaCl.cpp   | 3 +--
 clang/lib/Driver/ToolChains/NetBSD.cpp | 9 +++--
 clang/lib/Driver/ToolChains/PS4CPU.cpp | 8 +++-
 clang/lib/Driver/ToolChains/RISCVToolchain.cpp | 5 +++--
 clang/lib/Driver/ToolChains/WebAssembly.cpp| 4 ++--
 clang/lib/Driver/ToolChains/ZOS.cpp| 5 ++---
 10 files changed, 20 insertions(+), 31 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/DragonFly.cpp 
b/clang/lib/Driver/ToolChains/DragonFly.cpp
index a1e4937231572b7..da8b1f0cf04c138 100644
--- a/clang/lib/Driver/ToolChains/DragonFly.cpp
+++ b/clang/lib/Driver/ToolChains/DragonFly.cpp
@@ -115,8 +115,7 @@ void dragonfly::Linker::ConstructJob(Compilation , const 
JobAction ,
   Args.MakeArgString(getToolChain().GetFilePath("crtbegin.o")));
   }
 
-  Args.AddAllArgs(CmdArgs,
-  {options::OPT_L, options::OPT_T_Group});
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group});
 
   AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
 
diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp 
b/clang/lib/Driver/ToolChains/FreeBSD.cpp
index ff4d94c56f0d0ff..6b857203531c154 100644
--- a/clang/lib/Driver/ToolChains/FreeBSD.cpp
+++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp
@@ -262,11 +262,9 @@ void freebsd::Linker::ConstructJob(Compilation , const 
JobAction ,
 
   Args.AddAllArgs(CmdArgs, options::OPT_L);
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
-  Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
-  Args.AddAllArgs(CmdArgs, options::OPT_s);
-  Args.AddAllArgs(CmdArgs, options::OPT_t);
-  Args.AddAllArgs(CmdArgs, options::OPT_Z_Flag);
-  Args.AddAllArgs(CmdArgs, options::OPT_r);
+  Args.AddAllArgs(CmdArgs,
+  {options::OPT_T_Group, options::OPT_s, options::OPT_t,
+   options::OPT_Z_Flag, options::OPT_r});
 
   if (D.isUsingLTO()) {
 assert(!Inputs.empty() && "Must have at least one input.");
diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp 
b/clang/lib/Driver/ToolChains/Fuchsia.cpp
index 55c966ff39cd451..b16d834dc2c7d44 100644
--- a/clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -133,8 +133,7 @@ void fuchsia::Linker::ConstructJob(Compilation , const 
JobAction ,
 }
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp 
b/clang/lib/Driver/ToolChains/Gnu.cpp
index 5949d9872c54f72..ae2824690a4f3aa 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -530,8 +530,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation , 
const JobAction ,
 ToolChain.addFastMathRuntimeIfAvailable(Args, CmdArgs);
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/NaCl.cpp 
b/clang/lib/Driver/ToolChains/NaCl.cpp
index 38151735ee51fa6..a17142fa3beab54 100644
--- a/clang/lib/Driver/ToolChains/NaCl.cpp
+++ b/clang/lib/Driver/ToolChains/NaCl.cpp
@@ -120,8 +120,7 @@ void nacltools::Linker::ConstructJob(Compilation , const 
JobAction ,
 CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin)));
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp 
b/clang/lib/Driver/ToolChains/NetBSD.cpp
index 54b76ae8c8553ce..9381f3620df85ce 100644
--- a/clang/lib/Driver/ToolChains/NetBSD.cpp
+++ b/clang/lib/Driver/ToolChains/NetBSD.cpp
@@ -266,12 +266,9 @@ void netbsd::Linker::ConstructJob(Compilation , const 
JobAction ,
 }
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
-  Args.AddAllArgs(CmdArgs, options::OPT_s);
-  Args.AddAllArgs(CmdArgs, options::OPT_t);
-  Args.AddAllArgs(CmdArgs, options::OPT_Z_Flag);
-  Args.AddAllArgs(CmdArgs, options::OPT_r);
+  Args.AddAllArgs(CmdArgs,
+  {options::OPT_L, options::OPT_T_Group, options::OPT_s,
+   options::OPT_t, options::OPT_Z_Flag, options::OPT_r});
 
   bool 

[clang] [clang] Correct behavior of `LLVM_UNREACHABLE_OPTIMIZE=OFF` for `Release` builds (PR #68284)

2023-10-05 Thread Arvind Mukund via cfe-commits

MasterAwesome wrote:

> > > > @erichkeane @AaronBallman, I've added the release notes and rebased the 
> > > > change on `main`. Does this need to be backported to 17.x? 16.x doesn't 
> > > > have this issue
> > > 
> > > 
> > > Yeah, I think we should probably backport this to 17.x. We have 
> > > instructions on how to kick that off here: 
> > > https://www.llvm.org/docs/GitHub.html#backporting-fixes-to-the-release-branches
> > >  but I can get the ball rolling by adding the magic comment to the issue.
> > 
> > Thanks for doing it! I'll work on cherry-picking this to Rust's fork of 
> > llvm :)
> 
> You're welcome, but it seems there's a problem with trying to cherry-pick 
> this over to 17.x and the pick will be more involved because of merge 
> conflicts with the release notes. Would you mind taking over the pick to 
> 17.x? If not, that's okay! (I'm mostly asking because I'm pretty swamped with 
> reviews and I don't want the backport to fall through the cracks by accident.)

I gotchu! The PR created by llvmbot is at 
https://github.com/llvm/llvm-project-release-prs/pull/726

https://github.com/llvm/llvm-project/pull/68284
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] use absolute path for builtin headers during module compilation (PR #68023)

2023-10-05 Thread Jan Svoboda via cfe-commits

jansvoboda11 wrote:

> > I was going to suggest keeping Header::PathRelativeToRootModuleDirectory as 
> > "float.h", and generating this into the  buffer
> 
> Wouldn't this work without the pragma? Isn't the resource directory always 
> added to the header search paths, so the header should be found correctly if 
> we set PathRelativeToRootModuleDirectory relative to the resource dir for 
> builtin headers?

Yeah, the driver adds `-internal-isystem /include` to the `-cc1` 
invocation (on Darwin). From your test-case I assumed you wanted the 
compilation to succeed even without this include path. If that's not the case 
then yes, you can simply put `#include "float.h"` into the `` 
buffer by storing `UnresolvedHeaderDirective::FileName` to 
`Header::PathRelativeToRootModuleDirectory` and then fixing the module map 
header resolution by doing this in `ModuleMap::findHeader()`:

```c++
auto Directory = Header.HasBuiltinHeader ? BuiltinIncludeDir : M->Directory;
```

Which effectively mimics what we already do in 
`ModuleMap::resolveAsBuiltinHeader()`.

https://github.com/llvm/llvm-project/pull/68023
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] 1d959f9 - [OpenMP] Prevent AMDGPU from overriding visibility on DT_nohost variables (#68264)

2023-10-05 Thread via cfe-commits

Author: Joseph Huber
Date: 2023-10-05T17:10:03-05:00
New Revision: 1d959f932752b39cd535cb22f04e348a4b01

URL: 
https://github.com/llvm/llvm-project/commit/1d959f932752b39cd535cb22f04e348a4b01
DIFF: 
https://github.com/llvm/llvm-project/commit/1d959f932752b39cd535cb22f04e348a4b01.diff

LOG: [OpenMP] Prevent AMDGPU from overriding visibility on DT_nohost variables 
(#68264)

Summary:
There's some logic in the AMDGPU target that manually resets the
requested visibility of certain variables. This was triggering when we
set a constant variable in OpenMP. However, we shouldn't do this for
OpenMP when the variable has the `nohost` type. That implies that the
variable is not visible to the host and therefore does not need to be
visible, so we should respect the original value of it.

Added: 


Modified: 
clang/lib/CodeGen/CodeGenModule.cpp
clang/lib/CodeGen/Targets/AMDGPU.cpp
clang/test/OpenMP/declare_target_codegen.cpp
clang/test/OpenMP/declare_target_constexpr_codegen.cpp
clang/test/OpenMP/target_visibility.cpp

Removed: 




diff  --git a/clang/lib/CodeGen/CodeGenModule.cpp 
b/clang/lib/CodeGen/CodeGenModule.cpp
index f078a68231448ae..cae9dd93bc55921 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1390,6 +1390,19 @@ void 
CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
   }
   if (!D)
 return;
+
+  // OpenMP declare target variables must be visible to the host so they can
+  // be registered. We require protected visibility unless the variable has
+  // the DT_nohost modifier and does not need to be registered.
+  if (Context.getLangOpts().OpenMP &&
+  Context.getLangOpts().OpenMPIsTargetDevice && isa(D) &&
+  D->hasAttr() &&
+  D->getAttr()->getDevType() !=
+  OMPDeclareTargetDeclAttr::DT_NoHost) {
+GV->setVisibility(llvm::GlobalValue::ProtectedVisibility);
+return;
+  }
+
   // Set visibility for definitions, and for declarations if requested globally
   // or set explicitly.
   LinkageInfo LV = D->getLinkageAndVisibility();

diff  --git a/clang/lib/CodeGen/Targets/AMDGPU.cpp 
b/clang/lib/CodeGen/Targets/AMDGPU.cpp
index dc628b7345f59fd..f6a614b3e4d54dd 100644
--- a/clang/lib/CodeGen/Targets/AMDGPU.cpp
+++ b/clang/lib/CodeGen/Targets/AMDGPU.cpp
@@ -308,12 +308,13 @@ static bool requiresAMDGPUProtectedVisibility(const Decl 
*D,
   if (GV->getVisibility() != llvm::GlobalValue::HiddenVisibility)
 return false;
 
-  return D->hasAttr() ||
- (isa(D) && D->hasAttr()) ||
- (isa(D) &&
-  (D->hasAttr() || D->hasAttr() ||
-   cast(D)->getType()->isCUDADeviceBuiltinSurfaceType() ||
-   cast(D)->getType()->isCUDADeviceBuiltinTextureType()));
+  return !D->hasAttr() &&
+ (D->hasAttr() ||
+  (isa(D) && D->hasAttr()) ||
+  (isa(D) &&
+   (D->hasAttr() || D->hasAttr() ||
+cast(D)->getType()->isCUDADeviceBuiltinSurfaceType() ||
+cast(D)->getType()->isCUDADeviceBuiltinTextureType(;
 }
 
 void AMDGPUTargetCodeGenInfo::setFunctionDeclAttributes(

diff  --git a/clang/test/OpenMP/declare_target_codegen.cpp 
b/clang/test/OpenMP/declare_target_codegen.cpp
index 71c742198af6bff..225695feae95151 100644
--- a/clang/test/OpenMP/declare_target_codegen.cpp
+++ b/clang/test/OpenMP/declare_target_codegen.cpp
@@ -31,7 +31,7 @@
 // CHECK-DAG: @dy = {{protected | }}global i32 0,
 // CHECK-DAG: @bbb = {{protected | }}global i32 0,
 // CHECK-DAG: weak constant %struct.__tgt_offload_entry { ptr @bbb,
-// CHECK-DAG: @ccc = external global i32,
+// CHECK-DAG: @ccc = external {{protected | }}global i32,
 // CHECK-DAG: @ddd = {{protected | }}global i32 0,
 // CHECK-DAG: @hhh_decl_tgt_ref_ptr = weak global ptr null
 // CHECK-DAG: @ggg_decl_tgt_ref_ptr = weak global ptr null

diff  --git a/clang/test/OpenMP/declare_target_constexpr_codegen.cpp 
b/clang/test/OpenMP/declare_target_constexpr_codegen.cpp
index 0acd98129394b8a..2b256cd6a4c7f09 100644
--- a/clang/test/OpenMP/declare_target_constexpr_codegen.cpp
+++ b/clang/test/OpenMP/declare_target_constexpr_codegen.cpp
@@ -16,7 +16,7 @@ class A {
 public:
   static constexpr double pi = 3.141592653589793116;
 //.
-// CHECK: @_ZN1A2piE = linkonce_odr constant double 0x400921FB54442D18, 
comdat, align 8
+// CHECK: @_ZN1A2piE = linkonce_odr protected constant double 
0x400921FB54442D18, comdat, align 8
 // CHECK: @_ZL9anotherPi = internal constant double 3.14e+00, align 8
 // CHECK: @llvm.compiler.used = appending global [2 x ptr] [ptr 
@"__ZN1A2piE$ref", ptr @"__ZL9anotherPi$ref"], section "llvm.metadata"
 //.

diff  --git a/clang/test/OpenMP/target_visibility.cpp 
b/clang/test/OpenMP/target_visibility.cpp
index 938d164df89bffb..2554f653170b94f 100644
--- a/clang/test/OpenMP/target_visibility.cpp
+++ b/clang/test/OpenMP/target_visibility.cpp
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 

[clang] [OpenMP] Prevent AMDGPU from overriding visibility on DT_nohost variables (PR #68264)

2023-10-05 Thread Joseph Huber via cfe-commits

https://github.com/jhuber6 closed 
https://github.com/llvm/llvm-project/pull/68264
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [mlir][llvm] Fix elem type passing into `getelementptr` (PR #68136)

2023-10-05 Thread Aart Bik via cfe-commits

aartbik wrote:

This broke the bot?

https://lab.llvm.org/buildbot/#/builders/61/builds/50100

https://github.com/llvm/llvm-project/pull/68136
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread via cfe-commits

https://github.com/michaelrj-google updated 
https://github.com/llvm/llvm-project/pull/68134

>From baf9d8e19d2b064c05527757c6173f875b59b286 Mon Sep 17 00:00:00 2001
From: Michael Jones 
Date: Tue, 3 Oct 2023 10:39:02 -0700
Subject: [PATCH 1/4] [clang-tidy][libc] Fix namespace check with macro

The name of the namespace for LLVM's libc is now provided by a macro.
The ImplementationNamespaceCheck was updated to handle this, but the
CalleeNamespaceCheck was missed. This patch updates the
CalleeNamespaceCheck to handle the macro.
---
 .../clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp   | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp 
b/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp
index 98ae857b589fd64..7ad4b5fb7f043ab 100644
--- a/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp
@@ -45,9 +45,10 @@ void CalleeNamespaceCheck::check(const 
MatchFinder::MatchResult ) {
   if (FuncDecl->getBuiltinID() != 0)
 return;
 
-  // If the outermost namespace of the function is __llvm_libc, we're good.
+  // If the outermost namespace of the function starts with __llvm_libc, we're
+  // good.
   const auto *NS = dyn_cast(getOutermostNamespace(FuncDecl));
-  if (NS && NS->getName() == "__llvm_libc")
+  if (NS && NS->getName().starts_with("__llvm_libc"))
 return;
 
   const DeclarationName  = FuncDecl->getDeclName();
@@ -55,8 +56,9 @@ void CalleeNamespaceCheck::check(const 
MatchFinder::MatchResult ) {
   IgnoredFunctions.contains(Name.getAsIdentifierInfo()->getName()))
 return;
 
-  diag(UsageSiteExpr->getBeginLoc(), "%0 must resolve to a function declared "
- "within the '__llvm_libc' namespace")
+  diag(UsageSiteExpr->getBeginLoc(),
+   "%0 must resolve to a function declared "
+   "within the '__llvm_libc' namespace (use macro `LIBC_NAMESPACE`)")
   << FuncDecl;
 
   diag(FuncDecl->getLocation(), "resolves to this declaration",

>From b3c710beda5b45dc18a5cbd74e141c1169971450 Mon Sep 17 00:00:00 2001
From: Michael Jones 
Date: Tue, 3 Oct 2023 15:35:32 -0700
Subject: [PATCH 2/4] update release notes

---
 clang-tools-extra/docs/ReleaseNotes.rst | 5 +
 1 file changed, 5 insertions(+)

diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 8fc28c090341802..36cc58f4ab91b21 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -321,6 +321,11 @@ Changes in existing checks
   ` check to
   identify calls to static member functions with out-of-class inline 
definitions.
 
+- Improved :doc:`llvmlibc-callee-namespace
+  ` to support
+  customizable namespace. This matches the change made to implementation in
+  namespace.
+
 Removed checks
 ^^
 

>From 8258d9861e3e0ed63adabed9fc584bd2a90739e2 Mon Sep 17 00:00:00 2001
From: Michael Jones 
Date: Thu, 5 Oct 2023 12:56:28 -0700
Subject: [PATCH 3/4] Correct docs, adjust checks, and add tests

---
 .../llvmlibc/CalleeNamespaceCheck.cpp | 10 +++--
 .../ImplementationInNamespaceCheck.cpp|  4 +-
 .../clang-tidy/llvmlibc/NamespaceConstants.h  | 16 +++
 clang-tools-extra/docs/ReleaseNotes.rst   |  9 ++--
 .../checks/llvmlibc/callee-namespace.rst  | 12 +++--
 .../checkers/llvmlibc/callee-namespace.cpp| 44 ++-
 6 files changed, 68 insertions(+), 27 deletions(-)
 create mode 100644 clang-tools-extra/clang-tidy/llvmlibc/NamespaceConstants.h

diff --git a/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp 
b/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp
index 7ad4b5fb7f043ab..bfd0abd3fe59ae1 100644
--- a/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/llvmlibc/CalleeNamespaceCheck.cpp
@@ -7,6 +7,7 @@
 
//===--===//
 
 #include "CalleeNamespaceCheck.h"
+#include "NamespaceConstants.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
 
@@ -45,10 +46,11 @@ void CalleeNamespaceCheck::check(const 
MatchFinder::MatchResult ) {
   if (FuncDecl->getBuiltinID() != 0)
 return;
 
-  // If the outermost namespace of the function starts with __llvm_libc, we're
-  // good.
+  // If the outermost namespace of the function is a macro that starts with
+  // __llvm_libc, we're good.
   const auto *NS = dyn_cast(getOutermostNamespace(FuncDecl));
-  if (NS && NS->getName().starts_with("__llvm_libc"))
+  if (NS && Result.SourceManager->isMacroBodyExpansion(NS->getLocation()) &&
+  NS->getName().starts_with(RequiredNamespaceStart))
 return;
 
   const DeclarationName  = FuncDecl->getDeclName();
@@ -58,7 +60,7 @@ void CalleeNamespaceCheck::check(const 
MatchFinder::MatchResult ) {
 
   

[clang-tools-extra] [clang-tidy] Improve `ExceptionSpecAnalyzer`s handling of conditional noexcept expressions (PR #68359)

2023-10-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-tidy


Changes

The previous code was pretty messy and treated value dependant expressions 
which could not be evaluated the same as if they evaluted to `false`. Which was 
obviously not correct.

We now check if we can evaluate the dependant expressions and if not we 
truthfully return that we don't know if the function is declared as `noexcept` 
or not.

This fixes #68101

---
Full diff: https://github.com/llvm/llvm-project/pull/68359.diff


4 Files Affected:

- (modified) clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp 
(+15-6) 
- (modified) clang-tools-extra/docs/ReleaseNotes.rst (+6) 
- (modified) 
clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-move-constructor.cpp
 (+18) 
- (modified) 
clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-swap.cpp 
(+21-7) 


``diff
diff --git a/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp 
b/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp
index 4dd4a95f880aca0..1dde0490517852d 100644
--- a/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp
+++ b/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp
@@ -142,13 +142,22 @@ ExceptionSpecAnalyzer::analyzeFunctionEST(const 
FunctionDecl *FuncDecl,
 return State::NotThrowing;
   case CT_Dependent: {
 const Expr *NoexceptExpr = FuncProto->getNoexceptExpr();
+if (!NoexceptExpr)
+  return State::NotThrowing;
+
+// We can't resolve value dependence so just return unknown
+if (NoexceptExpr->isValueDependent())
+  return State::Unknown;
+
+// Try to evaluate the expression to a boolean value
 bool Result = false;
-return (NoexceptExpr && !NoexceptExpr->isValueDependent() &&
-NoexceptExpr->EvaluateAsBooleanCondition(
-Result, FuncDecl->getASTContext(), true) &&
-Result)
-   ? State::NotThrowing
-   : State::Throwing;
+if (NoexceptExpr->EvaluateAsBooleanCondition(
+Result, FuncDecl->getASTContext(), true))
+  return Result ? State::NotThrowing : State::Throwing;
+
+// The noexcept expression is not value dependent but we can't evaluate it
+// as a boolean condition so we have no idea if its throwing or not
+return State::Unknown;
   }
   default:
 return State::Throwing;
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 0ecf786e73bc413..ee8576827696cec 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -284,6 +284,12 @@ Changes in existing checks
   ` check to properly escape
   single quotes.
 
+- Improved :doc:`performance-noexcept-move-constructor
+  ` and
+  :doc:`performance-noexcept-swap`
+  to better handle conditional noexcept expressions, eliminating
+  false-positives.
+
 - Improved :doc:`performance-noexcept-swap
   ` check to enforce a stricter
   match with the swap function signature, eliminating false-positives.
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-move-constructor.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-move-constructor.cpp
index 60596c2876c0a34..347a1e3220061af 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-move-constructor.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-move-constructor.cpp
@@ -1,5 +1,14 @@
 // RUN: %check_clang_tidy %s performance-noexcept-move-constructor %t -- -- 
-fexceptions
 
+namespace std
+{
+  template 
+  struct is_nothrow_move_constructible
+  {
+static constexpr bool value = __is_nothrow_constructible(T, 
__add_rvalue_reference(T));
+  };
+} // namespace std
+
 struct Empty
 {};
 
@@ -379,3 +388,12 @@ struct OK31 {
   OK31(OK31 &&) noexcept(TrueT::value) = default;
   OK31& operator=(OK31 &&) noexcept(TrueT::value) = default;
 };
+
+namespace gh68101
+{
+  template 
+  class Container {
+ public:
+  Container(Container&&) 
noexcept(std::is_nothrow_move_constructible::value);
+  };
+} // namespace gh68101
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-swap.cpp 
b/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-swap.cpp
index 392b5d17d456e71..dfc71a2bb9ab370 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-swap.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-swap.cpp
@@ -1,5 +1,14 @@
 // RUN: %check_clang_tidy %s performance-noexcept-swap %t -- -- -fexceptions
 
+namespace std
+{
+  template 
+  struct is_nothrow_move_constructible
+  {
+static constexpr bool value = __is_nothrow_constructible(T, 
__add_rvalue_reference(T));
+  };
+} // namespace std
+
 void throwing_function() noexcept(false);
 void noexcept_function() noexcept;
 
@@ -54,9 +63,6 @@ struct D {
   // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: noexcept specifier on swap 
function evaluates to 'false' 

[clang-tools-extra] [clang-tidy] Improve `ExceptionSpecAnalyzer`s handling of conditional noexcept expressions (PR #68359)

2023-10-05 Thread via cfe-commits

https://github.com/AMS21 created https://github.com/llvm/llvm-project/pull/68359

The previous code was pretty messy and treated value dependant expressions 
which could not be evaluated the same as if they evaluted to `false`. Which was 
obviously not correct.

We now check if we can evaluate the dependant expressions and if not we 
truthfully return that we don't know if the function is declared as `noexcept` 
or not.

This fixes #68101

>From 059787bc41764280ca34f22796b0768567ca840c Mon Sep 17 00:00:00 2001
From: AMS21 
Date: Thu, 5 Oct 2023 23:39:42 +0200
Subject: [PATCH] [clang-tidy] Improve `ExceptionSpecAnalyzer`s handling of
 conditional noexcept expressions

The previous code was pretty messy and treated value dependant
expressions which could not be evaluated the same as if they evaluted to
`false`. Which was obviously not correct.

We now check if we can evaluate the dependant expressions and if not we
truthfully return that we don't know if the function is declared as
`noexcept` or not.

This fixes #68101
---
 .../utils/ExceptionSpecAnalyzer.cpp   | 21 ++
 clang-tools-extra/docs/ReleaseNotes.rst   |  6 
 .../performance/noexcept-move-constructor.cpp | 18 
 .../checkers/performance/noexcept-swap.cpp| 28 ++-
 4 files changed, 60 insertions(+), 13 deletions(-)

diff --git a/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp 
b/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp
index 4dd4a95f880aca0..1dde0490517852d 100644
--- a/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp
+++ b/clang-tools-extra/clang-tidy/utils/ExceptionSpecAnalyzer.cpp
@@ -142,13 +142,22 @@ ExceptionSpecAnalyzer::analyzeFunctionEST(const 
FunctionDecl *FuncDecl,
 return State::NotThrowing;
   case CT_Dependent: {
 const Expr *NoexceptExpr = FuncProto->getNoexceptExpr();
+if (!NoexceptExpr)
+  return State::NotThrowing;
+
+// We can't resolve value dependence so just return unknown
+if (NoexceptExpr->isValueDependent())
+  return State::Unknown;
+
+// Try to evaluate the expression to a boolean value
 bool Result = false;
-return (NoexceptExpr && !NoexceptExpr->isValueDependent() &&
-NoexceptExpr->EvaluateAsBooleanCondition(
-Result, FuncDecl->getASTContext(), true) &&
-Result)
-   ? State::NotThrowing
-   : State::Throwing;
+if (NoexceptExpr->EvaluateAsBooleanCondition(
+Result, FuncDecl->getASTContext(), true))
+  return Result ? State::NotThrowing : State::Throwing;
+
+// The noexcept expression is not value dependent but we can't evaluate it
+// as a boolean condition so we have no idea if its throwing or not
+return State::Unknown;
   }
   default:
 return State::Throwing;
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 0ecf786e73bc413..ee8576827696cec 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -284,6 +284,12 @@ Changes in existing checks
   ` check to properly escape
   single quotes.
 
+- Improved :doc:`performance-noexcept-move-constructor
+  ` and
+  :doc:`performance-noexcept-swap`
+  to better handle conditional noexcept expressions, eliminating
+  false-positives.
+
 - Improved :doc:`performance-noexcept-swap
   ` check to enforce a stricter
   match with the swap function signature, eliminating false-positives.
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-move-constructor.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-move-constructor.cpp
index 60596c2876c0a34..347a1e3220061af 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-move-constructor.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-move-constructor.cpp
@@ -1,5 +1,14 @@
 // RUN: %check_clang_tidy %s performance-noexcept-move-constructor %t -- -- 
-fexceptions
 
+namespace std
+{
+  template 
+  struct is_nothrow_move_constructible
+  {
+static constexpr bool value = __is_nothrow_constructible(T, 
__add_rvalue_reference(T));
+  };
+} // namespace std
+
 struct Empty
 {};
 
@@ -379,3 +388,12 @@ struct OK31 {
   OK31(OK31 &&) noexcept(TrueT::value) = default;
   OK31& operator=(OK31 &&) noexcept(TrueT::value) = default;
 };
+
+namespace gh68101
+{
+  template 
+  class Container {
+ public:
+  Container(Container&&) 
noexcept(std::is_nothrow_move_constructible::value);
+  };
+} // namespace gh68101
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-swap.cpp 
b/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-swap.cpp
index 392b5d17d456e71..dfc71a2bb9ab370 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-swap.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/performance/noexcept-swap.cpp
@@ -1,5 +1,14 @@
 // RUN: 

[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread via cfe-commits


@@ -45,18 +46,21 @@ void CalleeNamespaceCheck::check(const 
MatchFinder::MatchResult ) {
   if (FuncDecl->getBuiltinID() != 0)
 return;
 
-  // If the outermost namespace of the function is __llvm_libc, we're good.
+  // If the outermost namespace of the function is a macro that starts with
+  // __llvm_libc, we're good.
   const auto *NS = dyn_cast(getOutermostNamespace(FuncDecl));
-  if (NS && NS->getName() == "__llvm_libc")
+  if (NS && Result.SourceManager->isMacroBodyExpansion(NS->getLocation()) &&

michaelrj-google wrote:

I'm not entirely sure what you mean here. I tried adding 
`unless(isExpandedFromMacro(RequiredNamespaceMacroName.str()))` to the 
`declRefExpr` above, but it caused the matcher to fail the 
`wrong_name_macro_func` check.

https://github.com/llvm/llvm-project/pull/68134
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D157331: [clang] Implement C23

2023-10-05 Thread Zijun Zhao via Phabricator via cfe-commits
ZijunZhao updated this revision to Diff 557621.
ZijunZhao added a comment.

Add --triple=x86_64 into the tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D157331/new/

https://reviews.llvm.org/D157331

Files:
  clang/docs/ReleaseNotes.rst
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/lib/Headers/CMakeLists.txt
  clang/lib/Headers/stdckdint.h
  clang/lib/Lex/PPDirectives.cpp
  clang/lib/Sema/SemaChecking.cpp
  clang/test/C/C2x/n2359.c
  clang/test/C/C2x/n2683.c
  clang/test/C/C2x/n2683_2.c
  clang/test/Headers/stdckdint.c
  clang/test/Sema/builtins-overflow.c
  clang/www/c_status.html

Index: clang/www/c_status.html
===
--- clang/www/c_status.html
+++ clang/www/c_status.html
@@ -887,6 +887,11 @@
   https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2672.pdf;>N2672
   Yes
 
+
+  Towards Integer Safety
+  https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2683.pdf;>N2683
+  Clang 18
+
 
   Adding Fundamental Type for N-bit Integers
 
Index: clang/test/Sema/builtins-overflow.c
===
--- clang/test/Sema/builtins-overflow.c
+++ clang/test/Sema/builtins-overflow.c
@@ -14,11 +14,11 @@
   __builtin_add_overflow();  // expected-error {{too few arguments to function call, expected 3, have 0}}
   __builtin_add_overflow(1, 1, 1, 1);  // expected-error {{too many arguments to function call, expected 3, have 4}}
 
-  __builtin_add_overflow(c, 1, );  // expected-error {{operand argument to overflow builtin must be an integer ('const char *' invalid)}}
-  __builtin_add_overflow(1, c, );  // expected-error {{operand argument to overflow builtin must be an integer ('const char *' invalid)}}
-  __builtin_add_overflow(1, 1, 3);  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer ('int' invalid)}}
-  __builtin_add_overflow(1, 1, );  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer ('float *' invalid)}}
-  __builtin_add_overflow(1, 1, );  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer ('const unsigned int *' invalid)}}
+  __builtin_add_overflow(c, 1, );  // expected-error {{operand argument to overflow builtin must be an integer type ('const char *' invalid)}}
+  __builtin_add_overflow(1, c, );  // expected-error {{operand argument to overflow builtin must be an integer type ('const char *' invalid)}}
+  __builtin_add_overflow(1, 1, 3);  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer type ('int' invalid)}}
+  __builtin_add_overflow(1, 1, );  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer type ('float *' invalid)}}
+  __builtin_add_overflow(1, 1, );  // expected-error {{result argument to overflow builtin must be a pointer to a non-const integer type ('const unsigned int *' invalid)}}
 
   {
 _BitInt(128) x = 1;
Index: clang/test/Headers/stdckdint.c
===
--- /dev/null
+++ clang/test/Headers/stdckdint.c
@@ -0,0 +1,51 @@
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 3
+// RUN: %clang_cc1 -emit-llvm -verify -std=c23 -triple=x86_64 %s -o - | FileCheck %s
+// expected-no-diagnostics
+#include 
+
+_Static_assert(__STDC_VERSION_STDCKDINT_H__ == 202311L, "");
+
+// CHECK-LABEL: define dso_local zeroext i1 @test_ckd_add(
+// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:[[RESULT:%.*]] = alloca i32, align 4
+// CHECK-NEXT:[[TMP0:%.*]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 -1073741826, i32 -1073741826)
+// CHECK-NEXT:[[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1
+// CHECK-NEXT:[[TMP2:%.*]] = extractvalue { i32, i1 } [[TMP0]], 0
+// CHECK-NEXT:store i32 [[TMP2]], ptr [[RESULT]], align 4
+// CHECK-NEXT:ret i1 [[TMP1]]
+//
+bool test_ckd_add() {
+  int result;
+  return ckd_add(, -1073741826, -1073741826);
+}
+
+// CHECK-LABEL: define dso_local zeroext i1 @test_ckd_sub(
+// CHECK-SAME: ) #[[ATTR0]] {
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:[[RESULT:%.*]] = alloca i32, align 4
+// CHECK-NEXT:[[TMP0:%.*]] = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 -1073741826, i32 1073741826)
+// CHECK-NEXT:[[TMP1:%.*]] = extractvalue { i32, i1 } [[TMP0]], 1
+// CHECK-NEXT:[[TMP2:%.*]] = extractvalue { i32, i1 } [[TMP0]], 0
+// CHECK-NEXT:store i32 [[TMP2]], ptr [[RESULT]], align 4
+// CHECK-NEXT:ret i1 [[TMP1]]
+//
+bool test_ckd_sub() {
+  int result;
+  return ckd_sub(, -1073741826, 1073741826);
+}
+
+// CHECK-LABEL: define dso_local zeroext i1 @test_ckd_mul(
+// CHECK-SAME: ) #[[ATTR0]] {
+// CHECK-NEXT:  entry:
+// CHECK-NEXT:[[RESULT:%.*]] = alloca i32, align 4
+// 

[clang] [clang][driver] Fix an issue where clang does not correctly resolve the system header if invoked via symlink (on MacOS) (PR #68091)

2023-10-05 Thread Liviu Ionescu via cfe-commits

ilg-ul wrote:

@jansvoboda11, as Martin showed before, Apple clang did not fix this, so this 
patch applies to it too.

https://github.com/llvm/llvm-project/pull/68091
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Ensure fixed point conversions work in C++ (PR #68344)

2023-10-05 Thread via cfe-commits

https://github.com/PiJoules updated 
https://github.com/llvm/llvm-project/pull/68344

>From 1eb1638a12c619febf1fe9830f34e51a56d4c20e Mon Sep 17 00:00:00 2001
From: Leonard Chan 
Date: Thu, 5 Oct 2023 19:19:47 +
Subject: [PATCH] [clang] Ensure fixed point conversions work in C++

---
 clang/include/clang/Sema/Overload.h   |  3 ++
 clang/lib/Sema/SemaDecl.cpp   |  3 ++
 clang/lib/Sema/SemaExprCXX.cpp| 30 +++
 clang/lib/Sema/SemaOverload.cpp   | 10 +--
 clang/test/Frontend/fixed_point_conversions.c | 14 +++--
 5 files changed, 56 insertions(+), 4 deletions(-)

diff --git a/clang/include/clang/Sema/Overload.h 
b/clang/include/clang/Sema/Overload.h
index a97968dc7b20967..09a3686a1f9 100644
--- a/clang/include/clang/Sema/Overload.h
+++ b/clang/include/clang/Sema/Overload.h
@@ -192,6 +192,9 @@ class Sema;
 /// C-only conversion between pointers with incompatible types
 ICK_Incompatible_Pointer_Conversion,
 
+/// Fixed point type conversions according to N1169.
+ICK_Fixed_Point_Conversion,
+
 /// The number of conversion kinds
 ICK_Num_Conversion_Kinds,
   };
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 6ac02df193976a9..52cbd5c7593d9ce 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -148,6 +148,9 @@ bool Sema::isSimpleTypeSpecifier(tok::TokenKind Kind) const 
{
   case tok::kw___ibm128:
   case tok::kw_wchar_t:
   case tok::kw_bool:
+  case tok::kw__Accum:
+  case tok::kw__Fract:
+  case tok::kw__Sat:
 #define TRANSFORM_TYPE_TRAIT_DEF(_, Trait) case tok::kw___##Trait:
 #include "clang/Basic/TransformTypeTraits.def"
   case tok::kw___auto_type:
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 1153049496d129f..e15d8e01f934bd6 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -4478,6 +4478,36 @@ Sema::PerformImplicitConversion(Expr *From, QualType 
ToType,
  .get();
 break;
 
+  case ICK_Fixed_Point_Conversion:
+assert((FromType->isFixedPointType() || ToType->isFixedPointType()) &&
+   "Attempting implicit fixed point conversion without a fixed "
+   "point operand");
+if (FromType->isFloatingType())
+  From = ImpCastExprToType(From, ToType, CK_FloatingToFixedPoint,
+   VK_PRValue,
+   /*BasePath=*/nullptr, CCK).get();
+else if (ToType->isFloatingType())
+  From = ImpCastExprToType(From, ToType, CK_FixedPointToFloating,
+   VK_PRValue,
+   /*BasePath=*/nullptr, CCK).get();
+else if (FromType->isIntegralType(Context))
+  From = ImpCastExprToType(From, ToType, CK_IntegralToFixedPoint,
+   VK_PRValue,
+   /*BasePath=*/nullptr, CCK).get();
+else if (ToType->isIntegralType(Context))
+  From = ImpCastExprToType(From, ToType, CK_FixedPointToIntegral,
+   VK_PRValue,
+   /*BasePath=*/nullptr, CCK).get();
+else if (ToType->isBooleanType())
+  From = ImpCastExprToType(From, ToType, CK_FixedPointToBoolean,
+   VK_PRValue,
+   /*BasePath=*/nullptr, CCK).get();
+else
+  From = ImpCastExprToType(From, ToType, CK_FixedPointCast,
+   VK_PRValue,
+   /*BasePath=*/nullptr, CCK).get();
+break;
+
   case ICK_Compatible_Conversion:
 From = ImpCastExprToType(From, ToType, CK_NoOp, From->getValueKind(),
  /*BasePath=*/nullptr, CCK).get();
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index ce78994e6553814..f5cc8a6ee6e3b9f 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -156,7 +156,8 @@ ImplicitConversionRank 
clang::GetConversionRank(ImplicitConversionKind Kind) {
  // it was omitted by the patch that added
  // ICK_Zero_Queue_Conversion
 ICR_C_Conversion,
-ICR_C_Conversion_Extension
+ICR_C_Conversion_Extension,
+ICR_C_Conversion_Extension,
   };
   static_assert(std::size(Rank) == (int)ICK_Num_Conversion_Kinds);
   return Rank[(int)Kind];
@@ -195,7 +196,8 @@ static const char* 
GetImplicitConversionName(ImplicitConversionKind Kind) {
 "OpenCL Zero Event Conversion",
 "OpenCL Zero Queue Conversion",
 "C specific type conversion",
-"Incompatible pointer conversion"
+"Incompatible pointer conversion",
+"Fixed point conversion",
   };
   static_assert(std::size(Name) == (int)ICK_Num_Conversion_Kinds);
   return Name[Kind];
@@ -2192,6 +2194,9 @@ static bool IsStandardConversion(Sema , Expr* From, 
QualType ToType,
  From->isIntegerConstantExpr(S.getASTContext())) {
 SCS.Second = 

[clang] [clang] Ensure fixed point conversions work in C++ (PR #68344)

2023-10-05 Thread via cfe-commits


@@ -1,6 +1,8 @@
 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
-// RUN: %clang_cc1 -ffixed-point -triple x86_64-unknown-linux-gnu -S 
-emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,SIGNED
-// RUN: %clang_cc1 -ffixed-point -triple x86_64-unknown-linux-gnu -S 
-emit-llvm %s -o - -fpadding-on-unsigned-fixed-point | FileCheck %s 
--check-prefixes=CHECK,UNSIGNED
+// RUN: %clang_cc1 -x c -ffixed-point -triple x86_64-unknown-linux-gnu -S 
-emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK,SIGNED
+// RUN: %clang_cc1 -x c -ffixed-point -triple x86_64-unknown-linux-gnu -S 
-emit-llvm %s -o - -fpadding-on-unsigned-fixed-point | FileCheck %s 
--check-prefixes=CHECK,UNSIGNED
+// RUN: %clang_cc1 -x c++ -ffixed-point -triple x86_64-unknown-linux-gnu -S 
-emit-llvm %s -o - | FileCheck %s --check-prefixes=CHECK-CXX,SIGNED-CXX
+// RUN: %clang_cc1 -x c++ -ffixed-point -triple x86_64-unknown-linux-gnu -S 
-emit-llvm %s -o - -fpadding-on-unsigned-fixed-point | FileCheck %s 
--check-prefixes=CHECK-CXX,UNSIGNED-CXX
 

PiJoules wrote:

Ah,  I did not consider that option.

https://github.com/llvm/llvm-project/pull/68344
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP] Prevent AMDGPU from overriding visibility on DT_nohost variables (PR #68264)

2023-10-05 Thread Joseph Huber via cfe-commits

https://github.com/jhuber6 updated 
https://github.com/llvm/llvm-project/pull/68264

>From 5010ba6ec2f7370d2efc01d2fafb86d55c4dd883 Mon Sep 17 00:00:00 2001
From: Joseph Huber 
Date: Wed, 4 Oct 2023 16:50:20 -0500
Subject: [PATCH] [OpenMP] Prevent AMDGPU from overriding visibility on
 DT_nohost variables

Summary:
There's some logic in the AMDGPU target that manually resets the
requested visibility of certain variables. This was triggering when we
set a constant variable in OpenMP. However, we shouldn't do this for
OpenMP when the variable has the `nohost` type. That implies that the
variable is not visible to the host and therefore does not need to be
visible, so we should respect the original value of it.
---
 clang/lib/CodeGen/CodeGenModule.cpp | 13 +
 clang/lib/CodeGen/Targets/AMDGPU.cpp| 13 +++--
 clang/test/OpenMP/declare_target_codegen.cpp|  2 +-
 .../OpenMP/declare_target_constexpr_codegen.cpp |  2 +-
 clang/test/OpenMP/target_visibility.cpp | 10 +-
 5 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/clang/lib/CodeGen/CodeGenModule.cpp 
b/clang/lib/CodeGen/CodeGenModule.cpp
index f078a68231448ae..cae9dd93bc55921 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1390,6 +1390,19 @@ void 
CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
   }
   if (!D)
 return;
+
+  // OpenMP declare target variables must be visible to the host so they can
+  // be registered. We require protected visibility unless the variable has
+  // the DT_nohost modifier and does not need to be registered.
+  if (Context.getLangOpts().OpenMP &&
+  Context.getLangOpts().OpenMPIsTargetDevice && isa(D) &&
+  D->hasAttr() &&
+  D->getAttr()->getDevType() !=
+  OMPDeclareTargetDeclAttr::DT_NoHost) {
+GV->setVisibility(llvm::GlobalValue::ProtectedVisibility);
+return;
+  }
+
   // Set visibility for definitions, and for declarations if requested globally
   // or set explicitly.
   LinkageInfo LV = D->getLinkageAndVisibility();
diff --git a/clang/lib/CodeGen/Targets/AMDGPU.cpp 
b/clang/lib/CodeGen/Targets/AMDGPU.cpp
index dc628b7345f59fd..f6a614b3e4d54dd 100644
--- a/clang/lib/CodeGen/Targets/AMDGPU.cpp
+++ b/clang/lib/CodeGen/Targets/AMDGPU.cpp
@@ -308,12 +308,13 @@ static bool requiresAMDGPUProtectedVisibility(const Decl 
*D,
   if (GV->getVisibility() != llvm::GlobalValue::HiddenVisibility)
 return false;
 
-  return D->hasAttr() ||
- (isa(D) && D->hasAttr()) ||
- (isa(D) &&
-  (D->hasAttr() || D->hasAttr() ||
-   cast(D)->getType()->isCUDADeviceBuiltinSurfaceType() ||
-   cast(D)->getType()->isCUDADeviceBuiltinTextureType()));
+  return !D->hasAttr() &&
+ (D->hasAttr() ||
+  (isa(D) && D->hasAttr()) ||
+  (isa(D) &&
+   (D->hasAttr() || D->hasAttr() ||
+cast(D)->getType()->isCUDADeviceBuiltinSurfaceType() ||
+cast(D)->getType()->isCUDADeviceBuiltinTextureType(;
 }
 
 void AMDGPUTargetCodeGenInfo::setFunctionDeclAttributes(
diff --git a/clang/test/OpenMP/declare_target_codegen.cpp 
b/clang/test/OpenMP/declare_target_codegen.cpp
index 71c742198af6bff..225695feae95151 100644
--- a/clang/test/OpenMP/declare_target_codegen.cpp
+++ b/clang/test/OpenMP/declare_target_codegen.cpp
@@ -31,7 +31,7 @@
 // CHECK-DAG: @dy = {{protected | }}global i32 0,
 // CHECK-DAG: @bbb = {{protected | }}global i32 0,
 // CHECK-DAG: weak constant %struct.__tgt_offload_entry { ptr @bbb,
-// CHECK-DAG: @ccc = external global i32,
+// CHECK-DAG: @ccc = external {{protected | }}global i32,
 // CHECK-DAG: @ddd = {{protected | }}global i32 0,
 // CHECK-DAG: @hhh_decl_tgt_ref_ptr = weak global ptr null
 // CHECK-DAG: @ggg_decl_tgt_ref_ptr = weak global ptr null
diff --git a/clang/test/OpenMP/declare_target_constexpr_codegen.cpp 
b/clang/test/OpenMP/declare_target_constexpr_codegen.cpp
index 0acd98129394b8a..2b256cd6a4c7f09 100644
--- a/clang/test/OpenMP/declare_target_constexpr_codegen.cpp
+++ b/clang/test/OpenMP/declare_target_constexpr_codegen.cpp
@@ -16,7 +16,7 @@ class A {
 public:
   static constexpr double pi = 3.141592653589793116;
 //.
-// CHECK: @_ZN1A2piE = linkonce_odr constant double 0x400921FB54442D18, 
comdat, align 8
+// CHECK: @_ZN1A2piE = linkonce_odr protected constant double 
0x400921FB54442D18, comdat, align 8
 // CHECK: @_ZL9anotherPi = internal constant double 3.14e+00, align 8
 // CHECK: @llvm.compiler.used = appending global [2 x ptr] [ptr 
@"__ZN1A2piE$ref", ptr @"__ZL9anotherPi$ref"], section "llvm.metadata"
 //.
diff --git a/clang/test/OpenMP/target_visibility.cpp 
b/clang/test/OpenMP/target_visibility.cpp
index 938d164df89bffb..2554f653170b94f 100644
--- a/clang/test/OpenMP/target_visibility.cpp
+++ b/clang/test/OpenMP/target_visibility.cpp
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -debug-info-kind=limited -verify -fopenmp -x c++ -triple 

[clang] [OpenMP] Prevent AMDGPU from overriding visibility on DT_nohost variables (PR #68264)

2023-10-05 Thread Johannes Doerfert via cfe-commits

https://github.com/jdoerfert approved this pull request.

LG if others don't object

https://github.com/llvm/llvm-project/pull/68264
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP] Prevent AMDGPU from overriding visibility on DT_nohost variables (PR #68264)

2023-10-05 Thread Johannes Doerfert via cfe-commits

jdoerfert wrote:

Seems reasonable to me. 

https://github.com/llvm/llvm-project/pull/68264
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread via cfe-commits


@@ -45,18 +46,21 @@ void CalleeNamespaceCheck::check(const 
MatchFinder::MatchResult ) {
   if (FuncDecl->getBuiltinID() != 0)
 return;
 
-  // If the outermost namespace of the function is __llvm_libc, we're good.
+  // If the outermost namespace of the function is a macro that starts with
+  // __llvm_libc, we're good.
   const auto *NS = dyn_cast(getOutermostNamespace(FuncDecl));
-  if (NS && NS->getName() == "__llvm_libc")
+  if (NS && Result.SourceManager->isMacroBodyExpansion(NS->getLocation()) &&
+  NS->getName().starts_with(RequiredNamespaceStart))

michaelrj-google wrote:

Yes, the plan for the namespace macro is for it to start with `__llvm_libc` and 
then be followed by user defined information. By default the `LIBC_NAMESPACE` 
macro is set to 
`__llvm_libc_${LLVM_VERSION_MAJOR}_${LLVM_VERSION_MINOR}_${LLVM_VERSION_PATCH}_${LLVM_VERSION_SUFFIX}`.

https://github.com/llvm/llvm-project/pull/68134
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][MBD] set up module build daemon infrastructure (PR #67562)

2023-10-05 Thread Steven Wu via cfe-commits


@@ -0,0 +1,302 @@
+//===--- cc1modbuildd_main.cpp - Clang CC1 Module Build Daemon 
===//
+//
+// 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
+//
+//===--===//
+
+#include "clang/Tooling/ModuleBuildDaemon/SocketMsgSupport.h"
+#include "clang/Tooling/ModuleBuildDaemon/SocketSupport.h"
+#include "clang/Tooling/ModuleBuildDaemon/Utils.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/Support/Program.h"
+#include "llvm/Support/ThreadPool.h"
+#include "llvm/Support/Threading.h"
+#include "llvm/Support/YAMLParser.h"
+#include "llvm/Support/YAMLTraits.h"
+
+// TODO: Make portable
+#if LLVM_ON_UNIX
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+using namespace llvm;
+using namespace clang;
+using namespace cc1modbuildd;
+
+// Create unbuffered STDOUT stream so that any logging done by module build
+// daemon can be viewed without having to terminate the process
+static raw_fd_ostream _outs() {
+  static raw_fd_ostream S(STDOUT_FILENO, false, true);
+  return S;
+}
+
+namespace {
+
+struct ClientConnection {
+  int ClientFD;
+  std::string Buffer;
+};
+
+class ModuleBuildDaemonServer {
+public:
+  SmallString<256> SocketPath;
+  SmallString<256> STDERR;
+  SmallString<256> STDOUT;
+
+  ModuleBuildDaemonServer(StringRef Path, ArrayRef Argv)
+  : SocketPath(Path), STDERR(Path), STDOUT(Path) {
+llvm::sys::path::append(SocketPath, SOCKET_FILE_NAME);
+llvm::sys::path::append(STDOUT, STDOUT_FILE_NAME);
+llvm::sys::path::append(STDERR, STDERR_FILE_NAME);
+  }
+
+  ~ModuleBuildDaemonServer() { shutdownDaemon(); }
+
+  int forkDaemon();
+  int createDaemonSocket();
+  int listenForClients();
+
+  static void handleClient(ClientConnection Connection);
+
+  void shutdownDaemon() {
+int SocketFD = ListenSocketFD.load();
+
+unlink(SocketPath.c_str());
+shutdown(SocketFD, SHUT_RD);
+close(SocketFD);
+exit(EXIT_SUCCESS);

cachemeifyoucan wrote:

Right, I like a soft shutdown mode, which daemon can still finish jobs that are 
in process but not accepting new jobs, at the same time, allows a new daemon to 
spawn and start working before it completely terminates itself.

https://github.com/llvm/llvm-project/pull/67562
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL approved this pull request.

>From functional point of view looks fine, could be more strict but should 
>still work.

https://github.com/llvm/llvm-project/pull/68134
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL edited 
https://github.com/llvm/llvm-project/pull/68134
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL edited 
https://github.com/llvm/llvm-project/pull/68134
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL edited 
https://github.com/llvm/llvm-project/pull/68134
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][MBD] set up module build daemon infrastructure (PR #67562)

2023-10-05 Thread Steven Wu via cfe-commits

https://github.com/cachemeifyoucan commented:

I haven't read the PR in details but one thing we found difficult to do is how 
to write a test for daemon spawning logic, because if anything went wrong, you 
left an unbounded daemon process on CI node.

The strategy in this PR (try to kill it after the test finishes) definitely 
doesn't work because 1. if anything failed, you will not hit kill. 2. you are 
going to kill the daemon from a different test that runs in parallel.

Other things we tried and know didn't work:
* explicitly start/stop daemon with command: you might not hit stop due to 
failure
* have a timeout and let the daemon terminate after that: you can have some 
infinite loop that prevents daemon cleanup

What we ended up is to have a server process that spawns clang job that needs 
to talk to it. We eliminated the run off daemons but we don't really have 
coverage for how clang spawns a daemon when needed.

https://github.com/llvm/llvm-project/pull/67562
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][driver] Fix an issue where clang does not correctly resolve the system header if invoked via symlink (on MacOS) (PR #68091)

2023-10-05 Thread Jan Svoboda via cfe-commits

jansvoboda11 wrote:

> @jansvoboda11, since the Apple clang already fixed this bug, could you 
> suggest how to proceed? Could you backport the Apple patch to upstream?

I'm not familiar with this, but @yln might.

https://github.com/llvm/llvm-project/pull/68091
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread Piotr Zegar via cfe-commits


@@ -45,18 +46,21 @@ void CalleeNamespaceCheck::check(const 
MatchFinder::MatchResult ) {
   if (FuncDecl->getBuiltinID() != 0)
 return;
 
-  // If the outermost namespace of the function is __llvm_libc, we're good.
+  // If the outermost namespace of the function is a macro that starts with
+  // __llvm_libc, we're good.
   const auto *NS = dyn_cast(getOutermostNamespace(FuncDecl));
-  if (NS && NS->getName() == "__llvm_libc")
+  if (NS && Result.SourceManager->isMacroBodyExpansion(NS->getLocation()) &&
+  NS->getName().starts_with(RequiredNamespaceStart))

PiotrZSL wrote:

Thing that I was concern here, were mainly why starts_with instead of just 
operator=, are there some other namespaces like __llvm_libc_xyz ? If yes then 
this is fine, if not then maybe we do not need to change this.

https://github.com/llvm/llvm-project/pull/68134
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread Piotr Zegar via cfe-commits


@@ -45,18 +46,21 @@ void CalleeNamespaceCheck::check(const 
MatchFinder::MatchResult ) {
   if (FuncDecl->getBuiltinID() != 0)
 return;
 
-  // If the outermost namespace of the function is __llvm_libc, we're good.
+  // If the outermost namespace of the function is a macro that starts with
+  // __llvm_libc, we're good.
   const auto *NS = dyn_cast(getOutermostNamespace(FuncDecl));
-  if (NS && NS->getName() == "__llvm_libc")
+  if (NS && Result.SourceManager->isMacroBodyExpansion(NS->getLocation()) &&

PiotrZSL wrote:

To be honest I was thinking more about something that would utilize 
isExpandedFromMacro.
Most probably this could be done by few custom AST matchers.

https://github.com/llvm/llvm-project/pull/68134
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clangd] [C++20] [Modules] Introduce initial support for C++20 Modules (PR #66462)

2023-10-05 Thread Ben Boeckel via cfe-commits


@@ -45,6 +45,10 @@ class GlobalCompilationDatabase {
 return std::nullopt;
   }
 
+  virtual std::vector getAllFilesInProjectOf(PathRef File) const {

mathstuf wrote:

`compile_commands.json` probably isn't the best place for it as it cannot be 
filled out at the same time (e.g., CMake knows the compile commands once it 
generates; it does *not* know the relevant module information until the build 
happens and updating the database would be a huge bottleneck).

I have a prototype (that needs some more work) that outlines such a 
`module_commands.json`-like file in [this CMake 
branch](https://gitlab.kitware.com/ben.boeckel/cmake/-/commits/module-cdb). Of 
note that doesn't work:

- flags is not filled out; and
- the commands that merge the per-target databases into a top-level one does 
not work.

https://github.com/llvm/llvm-project/pull/66462
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Group together usage of AddAllArgs (PR #68349)

2023-10-05 Thread Brad Smith via cfe-commits

https://github.com/brad0 updated https://github.com/llvm/llvm-project/pull/68349

>From c4a869323ede651b71dc514199cee112279b0ce9 Mon Sep 17 00:00:00 2001
From: Brad Smith 
Date: Thu, 5 Oct 2023 16:09:04 -0400
Subject: [PATCH] [Driver] Group together usage of AddAllArgs

---
 clang/lib/Driver/ToolChains/DragonFly.cpp  |  3 +--
 clang/lib/Driver/ToolChains/Flang.cpp  |  6 +++---
 clang/lib/Driver/ToolChains/FreeBSD.cpp|  8 +++-
 clang/lib/Driver/ToolChains/Fuchsia.cpp|  3 +--
 clang/lib/Driver/ToolChains/Gnu.cpp|  3 +--
 clang/lib/Driver/ToolChains/Haiku.cpp  |  6 +++---
 clang/lib/Driver/ToolChains/NaCl.cpp   |  3 +--
 clang/lib/Driver/ToolChains/NetBSD.cpp |  9 +++--
 clang/lib/Driver/ToolChains/OpenBSD.cpp|  6 +++---
 clang/lib/Driver/ToolChains/PS4CPU.cpp |  7 ++-
 clang/lib/Driver/ToolChains/RISCVToolchain.cpp | 11 ++-
 clang/lib/Driver/ToolChains/Solaris.cpp|  3 +--
 clang/lib/Driver/ToolChains/WebAssembly.cpp|  4 ++--
 clang/lib/Driver/ToolChains/ZOS.cpp|  5 ++---
 14 files changed, 32 insertions(+), 45 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/DragonFly.cpp 
b/clang/lib/Driver/ToolChains/DragonFly.cpp
index a1e4937231572b7..da8b1f0cf04c138 100644
--- a/clang/lib/Driver/ToolChains/DragonFly.cpp
+++ b/clang/lib/Driver/ToolChains/DragonFly.cpp
@@ -115,8 +115,7 @@ void dragonfly::Linker::ConstructJob(Compilation , const 
JobAction ,
   Args.MakeArgString(getToolChain().GetFilePath("crtbegin.o")));
   }
 
-  Args.AddAllArgs(CmdArgs,
-  {options::OPT_L, options::OPT_T_Group});
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group});
 
   AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
 
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp 
b/clang/lib/Driver/ToolChains/Flang.cpp
index 10f785ce7ab9075..9d89a26b6d781b5 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -57,9 +57,9 @@ void Flang::addFortranDialectOptions(const ArgList ,
 
 void Flang::addPreprocessingOptions(const ArgList ,
 ArgStringList ) const {
-  Args.AddAllArgs(CmdArgs,
-  {options::OPT_P, options::OPT_D, options::OPT_U,
-   options::OPT_I, options::OPT_cpp, options::OPT_nocpp});
+  Args.AddAllArgs(CmdArgs, {options::OPT_P, options::OPT_D, options::OPT_U,
+options::OPT_I, options::OPT_cpp,
+options::OPT_nocpp});
 }
 
 /// @C shouldLoopVersion
diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp 
b/clang/lib/Driver/ToolChains/FreeBSD.cpp
index ff4d94c56f0d0ff..1770a52be211477 100644
--- a/clang/lib/Driver/ToolChains/FreeBSD.cpp
+++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp
@@ -262,11 +262,9 @@ void freebsd::Linker::ConstructJob(Compilation , const 
JobAction ,
 
   Args.AddAllArgs(CmdArgs, options::OPT_L);
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
-  Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
-  Args.AddAllArgs(CmdArgs, options::OPT_s);
-  Args.AddAllArgs(CmdArgs, options::OPT_t);
-  Args.AddAllArgs(CmdArgs, options::OPT_Z_Flag);
-  Args.AddAllArgs(CmdArgs, options::OPT_r);
+  Args.AddAllArgs(CmdArgs, {options::OPT_T_Group, options::OPT_s,
+options::OPT_t, options::OPT_Z_Flag,
+options::OPT_r});
 
   if (D.isUsingLTO()) {
 assert(!Inputs.empty() && "Must have at least one input.");
diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp 
b/clang/lib/Driver/ToolChains/Fuchsia.cpp
index 55c966ff39cd451..b16d834dc2c7d44 100644
--- a/clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -133,8 +133,7 @@ void fuchsia::Linker::ConstructJob(Compilation , const 
JobAction ,
 }
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp 
b/clang/lib/Driver/ToolChains/Gnu.cpp
index 5949d9872c54f72..ae2824690a4f3aa 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -530,8 +530,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation , 
const JobAction ,
 ToolChain.addFastMathRuntimeIfAvailable(Args, CmdArgs);
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/Haiku.cpp 
b/clang/lib/Driver/ToolChains/Haiku.cpp
index 33d71f030e51c51..27f65d78652ac37 100644
--- a/clang/lib/Driver/ToolChains/Haiku.cpp
+++ b/clang/lib/Driver/ToolChains/Haiku.cpp
@@ -79,9 +79,9 @@ void haiku::Linker::ConstructJob(Compilation , const 
JobAction ,
 

[clang-tools-extra] [clang-tidy][libc] Fix namespace check with macro (PR #68134)

2023-10-05 Thread Piotr Zegar via cfe-commits


@@ -45,18 +46,21 @@ void CalleeNamespaceCheck::check(const 
MatchFinder::MatchResult ) {
   if (FuncDecl->getBuiltinID() != 0)
 return;
 
-  // If the outermost namespace of the function is __llvm_libc, we're good.
+  // If the outermost namespace of the function is a macro that starts with
+  // __llvm_libc, we're good.
   const auto *NS = dyn_cast(getOutermostNamespace(FuncDecl));
-  if (NS && NS->getName() == "__llvm_libc")
+  if (NS && Result.SourceManager->isMacroBodyExpansion(NS->getLocation()) &&
+  NS->getName().starts_with(RequiredNamespaceStart))
 return;
 
   const DeclarationName  = FuncDecl->getDeclName();
   if (Name.isIdentifier() &&
   IgnoredFunctions.contains(Name.getAsIdentifierInfo()->getName()))
 return;
 
-  diag(UsageSiteExpr->getBeginLoc(), "%0 must resolve to a function declared "
- "within the '__llvm_libc' namespace")
+  diag(UsageSiteExpr->getBeginLoc(),
+   "%0 must resolve to a function declared "
+   "within the namespace defined by the 'LIBC_NAMESPACE' macro")

PiotrZSL wrote:

Note: use RequiredNamespaceMacroName  instead of harcoded LIBC_NAMESPACE here

https://github.com/llvm/llvm-project/pull/68134
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Group together usage of AddAllArgs (PR #68349)

2023-10-05 Thread Brad Smith via cfe-commits

https://github.com/brad0 updated https://github.com/llvm/llvm-project/pull/68349

>From 74ad5f7b60f7e78e524311c5dbbce16650d9d890 Mon Sep 17 00:00:00 2001
From: Brad Smith 
Date: Thu, 5 Oct 2023 16:09:04 -0400
Subject: [PATCH] [Driver] Group together usage of AddAllArgs

---
 clang/lib/Driver/ToolChains/DragonFly.cpp  | 3 +--
 clang/lib/Driver/ToolChains/FreeBSD.cpp| 8 +++-
 clang/lib/Driver/ToolChains/Fuchsia.cpp| 3 +--
 clang/lib/Driver/ToolChains/Gnu.cpp| 3 +--
 clang/lib/Driver/ToolChains/Haiku.cpp  | 6 +++---
 clang/lib/Driver/ToolChains/NaCl.cpp   | 3 +--
 clang/lib/Driver/ToolChains/NetBSD.cpp | 9 +++--
 clang/lib/Driver/ToolChains/OpenBSD.cpp| 6 +++---
 clang/lib/Driver/ToolChains/PS4CPU.cpp | 7 ++-
 clang/lib/Driver/ToolChains/RISCVToolchain.cpp | 5 +++--
 clang/lib/Driver/ToolChains/WebAssembly.cpp| 4 ++--
 clang/lib/Driver/ToolChains/ZOS.cpp| 5 ++---
 12 files changed, 25 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/DragonFly.cpp 
b/clang/lib/Driver/ToolChains/DragonFly.cpp
index a1e4937231572b7..da8b1f0cf04c138 100644
--- a/clang/lib/Driver/ToolChains/DragonFly.cpp
+++ b/clang/lib/Driver/ToolChains/DragonFly.cpp
@@ -115,8 +115,7 @@ void dragonfly::Linker::ConstructJob(Compilation , const 
JobAction ,
   Args.MakeArgString(getToolChain().GetFilePath("crtbegin.o")));
   }
 
-  Args.AddAllArgs(CmdArgs,
-  {options::OPT_L, options::OPT_T_Group});
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group});
 
   AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
 
diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp 
b/clang/lib/Driver/ToolChains/FreeBSD.cpp
index ff4d94c56f0d0ff..1770a52be211477 100644
--- a/clang/lib/Driver/ToolChains/FreeBSD.cpp
+++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp
@@ -262,11 +262,9 @@ void freebsd::Linker::ConstructJob(Compilation , const 
JobAction ,
 
   Args.AddAllArgs(CmdArgs, options::OPT_L);
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
-  Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
-  Args.AddAllArgs(CmdArgs, options::OPT_s);
-  Args.AddAllArgs(CmdArgs, options::OPT_t);
-  Args.AddAllArgs(CmdArgs, options::OPT_Z_Flag);
-  Args.AddAllArgs(CmdArgs, options::OPT_r);
+  Args.AddAllArgs(CmdArgs, {options::OPT_T_Group, options::OPT_s,
+options::OPT_t, options::OPT_Z_Flag,
+options::OPT_r});
 
   if (D.isUsingLTO()) {
 assert(!Inputs.empty() && "Must have at least one input.");
diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp 
b/clang/lib/Driver/ToolChains/Fuchsia.cpp
index 55c966ff39cd451..b16d834dc2c7d44 100644
--- a/clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -133,8 +133,7 @@ void fuchsia::Linker::ConstructJob(Compilation , const 
JobAction ,
 }
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp 
b/clang/lib/Driver/ToolChains/Gnu.cpp
index 5949d9872c54f72..ae2824690a4f3aa 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -530,8 +530,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation , 
const JobAction ,
 ToolChain.addFastMathRuntimeIfAvailable(Args, CmdArgs);
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/Haiku.cpp 
b/clang/lib/Driver/ToolChains/Haiku.cpp
index 33d71f030e51c51..27f65d78652ac37 100644
--- a/clang/lib/Driver/ToolChains/Haiku.cpp
+++ b/clang/lib/Driver/ToolChains/Haiku.cpp
@@ -79,9 +79,9 @@ void haiku::Linker::ConstructJob(Compilation , const 
JobAction ,
 
CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("init_term_dyn.o")));
   }
 
-  Args.AddAllArgs(CmdArgs,
-  {options::OPT_L, options::OPT_T_Group, options::OPT_s,
-   options::OPT_t, options::OPT_Z_Flag, options::OPT_r});
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
+options::OPT_s, options::OPT_t, 
options::OPT_Z_Flag,
+options::OPT_r});
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
   addLinkerCompressDebugSectionsOption(ToolChain, Args, CmdArgs);
diff --git a/clang/lib/Driver/ToolChains/NaCl.cpp 
b/clang/lib/Driver/ToolChains/NaCl.cpp
index 38151735ee51fa6..a17142fa3beab54 100644
--- a/clang/lib/Driver/ToolChains/NaCl.cpp
+++ b/clang/lib/Driver/ToolChains/NaCl.cpp
@@ -120,8 +120,7 @@ void nacltools::Linker::ConstructJob(Compilation , const 
JobAction ,
 

[clang] [clang] use absolute path for builtin headers during module compilation (PR #68023)

2023-10-05 Thread Richard Howell via cfe-commits

rmaz wrote:

> I thought you're trying to fix the situation where your resource dir is in 
> the CWD, so that's the context I'm assuming. Is that correct?

Yes.

> I was considering your test case, where we'd previously store 
> "resource-dir/include/float.h" into Header::PathRelativeToRootModuleDirectory

Oh I see, being a bit slow there.

> But -fmodule-file-home-is-cwd will not go as far as fixing up the contents of 
> SourceManager buffers. So while all the paths you serialize into the PCM will 
> get "relativized", the  buffer would still contain the 
> absolute path

Ah, didn't consider that, yes that is an issue you are right.

> I was going to suggest keeping Header::PathRelativeToRootModuleDirectory as 
> "float.h", and generating this into the  buffer

Wouldn't this work without the pragma? Isn't the resource directory always 
added to the header search paths, so the header should be found correctly if we 
set PathRelativeToRootModuleDirectory relative to the resource dir for builtin 
headers?


https://github.com/llvm/llvm-project/pull/68023
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Group together usage of AddAllArgs (PR #68349)

2023-10-05 Thread Brad Smith via cfe-commits

https://github.com/brad0 updated https://github.com/llvm/llvm-project/pull/68349

>From 6542f6aae993dd186f736da7d3d2fcb54647f01f Mon Sep 17 00:00:00 2001
From: Brad Smith 
Date: Thu, 5 Oct 2023 16:09:04 -0400
Subject: [PATCH] [Driver] Group together usage of AddAllArgs

---
 clang/lib/Driver/ToolChains/DragonFly.cpp  | 3 +--
 clang/lib/Driver/ToolChains/FreeBSD.cpp| 8 +++-
 clang/lib/Driver/ToolChains/Fuchsia.cpp| 3 +--
 clang/lib/Driver/ToolChains/Gnu.cpp| 3 +--
 clang/lib/Driver/ToolChains/NaCl.cpp   | 3 +--
 clang/lib/Driver/ToolChains/NetBSD.cpp | 9 +++--
 clang/lib/Driver/ToolChains/OpenBSD.cpp| 6 +++---
 clang/lib/Driver/ToolChains/PS4CPU.cpp | 7 ++-
 clang/lib/Driver/ToolChains/RISCVToolchain.cpp | 5 +++--
 clang/lib/Driver/ToolChains/WebAssembly.cpp| 4 ++--
 clang/lib/Driver/ToolChains/ZOS.cpp| 5 ++---
 11 files changed, 22 insertions(+), 34 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/DragonFly.cpp 
b/clang/lib/Driver/ToolChains/DragonFly.cpp
index a1e4937231572b7..da8b1f0cf04c138 100644
--- a/clang/lib/Driver/ToolChains/DragonFly.cpp
+++ b/clang/lib/Driver/ToolChains/DragonFly.cpp
@@ -115,8 +115,7 @@ void dragonfly::Linker::ConstructJob(Compilation , const 
JobAction ,
   Args.MakeArgString(getToolChain().GetFilePath("crtbegin.o")));
   }
 
-  Args.AddAllArgs(CmdArgs,
-  {options::OPT_L, options::OPT_T_Group});
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group});
 
   AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
 
diff --git a/clang/lib/Driver/ToolChains/FreeBSD.cpp 
b/clang/lib/Driver/ToolChains/FreeBSD.cpp
index ff4d94c56f0d0ff..1770a52be211477 100644
--- a/clang/lib/Driver/ToolChains/FreeBSD.cpp
+++ b/clang/lib/Driver/ToolChains/FreeBSD.cpp
@@ -262,11 +262,9 @@ void freebsd::Linker::ConstructJob(Compilation , const 
JobAction ,
 
   Args.AddAllArgs(CmdArgs, options::OPT_L);
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
-  Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
-  Args.AddAllArgs(CmdArgs, options::OPT_s);
-  Args.AddAllArgs(CmdArgs, options::OPT_t);
-  Args.AddAllArgs(CmdArgs, options::OPT_Z_Flag);
-  Args.AddAllArgs(CmdArgs, options::OPT_r);
+  Args.AddAllArgs(CmdArgs, {options::OPT_T_Group, options::OPT_s,
+options::OPT_t, options::OPT_Z_Flag,
+options::OPT_r});
 
   if (D.isUsingLTO()) {
 assert(!Inputs.empty() && "Must have at least one input.");
diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp 
b/clang/lib/Driver/ToolChains/Fuchsia.cpp
index 55c966ff39cd451..b16d834dc2c7d44 100644
--- a/clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -133,8 +133,7 @@ void fuchsia::Linker::ConstructJob(Compilation , const 
JobAction ,
 }
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp 
b/clang/lib/Driver/ToolChains/Gnu.cpp
index 5949d9872c54f72..ae2824690a4f3aa 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -530,8 +530,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation , 
const JobAction ,
 ToolChain.addFastMathRuntimeIfAvailable(Args, CmdArgs);
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/NaCl.cpp 
b/clang/lib/Driver/ToolChains/NaCl.cpp
index 38151735ee51fa6..a17142fa3beab54 100644
--- a/clang/lib/Driver/ToolChains/NaCl.cpp
+++ b/clang/lib/Driver/ToolChains/NaCl.cpp
@@ -120,8 +120,7 @@ void nacltools::Linker::ConstructJob(Compilation , const 
JobAction ,
 CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin)));
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_u);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_u});
 
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp 
b/clang/lib/Driver/ToolChains/NetBSD.cpp
index 54b76ae8c8553ce..74bae7e001dc058 100644
--- a/clang/lib/Driver/ToolChains/NetBSD.cpp
+++ b/clang/lib/Driver/ToolChains/NetBSD.cpp
@@ -266,12 +266,9 @@ void netbsd::Linker::ConstructJob(Compilation , const 
JobAction ,
 }
   }
 
-  Args.AddAllArgs(CmdArgs, options::OPT_L);
-  Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
-  Args.AddAllArgs(CmdArgs, options::OPT_s);
-  Args.AddAllArgs(CmdArgs, options::OPT_t);
-  Args.AddAllArgs(CmdArgs, options::OPT_Z_Flag);
-  Args.AddAllArgs(CmdArgs, options::OPT_r);
+  Args.AddAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
+options::OPT_s, 

[clang] [Driver] Remove identifier with the comment (PR #68351)

2023-10-05 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-driver


Changes

MaskRay suggested removal of the identifer in a review for another ToolChain so 
doing the same for the rest.

---
Full diff: https://github.com/llvm/llvm-project/pull/68351.diff


8 Files Affected:

- (modified) clang/lib/Driver/ToolChains/AIX.h (+1-1) 
- (modified) clang/lib/Driver/ToolChains/DragonFly.h (+2-1) 
- (modified) clang/lib/Driver/ToolChains/FreeBSD.h (+1-1) 
- (modified) clang/lib/Driver/ToolChains/MinGW.h (+1-1) 
- (modified) clang/lib/Driver/ToolChains/NetBSD.h (+1-1) 
- (modified) clang/lib/Driver/ToolChains/OpenBSD.h (+1-1) 
- (modified) clang/lib/Driver/ToolChains/Solaris.h (+1-1) 
- (modified) clang/lib/Driver/ToolChains/ZOS.h (+1-1) 


``diff
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index cc74e5ea85efcac..04f9b2240999cc2 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -16,7 +16,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// aix -- Directly call system default assembler and linker.
+/// Directly call system default assembler and linker.
 namespace aix {
 
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
diff --git a/clang/lib/Driver/ToolChains/DragonFly.h 
b/clang/lib/Driver/ToolChains/DragonFly.h
index 42ce960c5bdbd95..4dceb09a17364df 100644
--- a/clang/lib/Driver/ToolChains/DragonFly.h
+++ b/clang/lib/Driver/ToolChains/DragonFly.h
@@ -16,7 +16,8 @@
 namespace clang {
 namespace driver {
 namespace tools {
-/// dragonfly -- Directly call GNU Binutils assembler and linker
+
+/// Directly call GNU Binutils assembler and linker
 namespace dragonfly {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/FreeBSD.h 
b/clang/lib/Driver/ToolChains/FreeBSD.h
index cec67d84a2cea8d..740274b314ba1f8 100644
--- a/clang/lib/Driver/ToolChains/FreeBSD.h
+++ b/clang/lib/Driver/ToolChains/FreeBSD.h
@@ -17,7 +17,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// freebsd -- Directly call GNU Binutils assembler and linker
+/// Directly call GNU Binutils assembler and linker
 namespace freebsd {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/MinGW.h 
b/clang/lib/Driver/ToolChains/MinGW.h
index 6d5feeacdadda4b..a71013912d0a3e9 100644
--- a/clang/lib/Driver/ToolChains/MinGW.h
+++ b/clang/lib/Driver/ToolChains/MinGW.h
@@ -20,7 +20,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// MinGW -- Directly call GNU Binutils assembler and linker
+/// Directly call GNU Binutils assembler and linker
 namespace MinGW {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/NetBSD.h 
b/clang/lib/Driver/ToolChains/NetBSD.h
index 0f9b6dceb6fcf4f..044c4239c3f48a2 100644
--- a/clang/lib/Driver/ToolChains/NetBSD.h
+++ b/clang/lib/Driver/ToolChains/NetBSD.h
@@ -17,7 +17,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// netbsd -- Directly call GNU Binutils assembler and linker
+/// Directly call GNU Binutils assembler and linker
 namespace netbsd {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/OpenBSD.h 
b/clang/lib/Driver/ToolChains/OpenBSD.h
index b7d3d1b5b6dc311..486dbf1407c2412 100644
--- a/clang/lib/Driver/ToolChains/OpenBSD.h
+++ b/clang/lib/Driver/ToolChains/OpenBSD.h
@@ -18,7 +18,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// openbsd -- Directly call GNU Binutils assembler and linker
+/// Directly call GNU Binutils assembler and linker
 namespace openbsd {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/Solaris.h 
b/clang/lib/Driver/ToolChains/Solaris.h
index 04b68c5053caa6c..b8f2497d7c8eb1b 100644
--- a/clang/lib/Driver/ToolChains/Solaris.h
+++ b/clang/lib/Driver/ToolChains/Solaris.h
@@ -17,7 +17,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// solaris -- Directly call Solaris assembler and linker
+/// Directly call Solaris assembler and linker
 namespace solaris {
 class LLVM_LIBRARY_VISIBILITY Assembler : public gnutools::Assembler {
 public:
diff --git a/clang/lib/Driver/ToolChains/ZOS.h 
b/clang/lib/Driver/ToolChains/ZOS.h
index 548b432ade76704..4b9b332c0f3fbda 100644
--- a/clang/lib/Driver/ToolChains/ZOS.h
+++ b/clang/lib/Driver/ToolChains/ZOS.h
@@ -16,7 +16,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// zos -- Directly call system default assembler and linker.
+/// Directly call system default assembler and linker.
 namespace zos {
 
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {

``




https://github.com/llvm/llvm-project/pull/68351
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Remove identifier with the comment (PR #68351)

2023-10-05 Thread Brad Smith via cfe-commits

https://github.com/brad0 created https://github.com/llvm/llvm-project/pull/68351

MaskRay suggested removal of the identifer in a review for another ToolChain so 
doing the same for the rest.

>From 977aaf66e606f454949edae1d18b14cb06307a51 Mon Sep 17 00:00:00 2001
From: Brad Smith 
Date: Thu, 5 Oct 2023 16:23:58 -0400
Subject: [PATCH] [Driver] Remove identifier with the comment

MaskRay suggested removal of the identifer in a review for another
ToolChain so doing the same for the rest.
---
 clang/lib/Driver/ToolChains/AIX.h   | 2 +-
 clang/lib/Driver/ToolChains/DragonFly.h | 3 ++-
 clang/lib/Driver/ToolChains/FreeBSD.h   | 2 +-
 clang/lib/Driver/ToolChains/MinGW.h | 2 +-
 clang/lib/Driver/ToolChains/NetBSD.h| 2 +-
 clang/lib/Driver/ToolChains/OpenBSD.h   | 2 +-
 clang/lib/Driver/ToolChains/Solaris.h   | 2 +-
 clang/lib/Driver/ToolChains/ZOS.h   | 2 +-
 8 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index cc74e5ea85efcac..04f9b2240999cc2 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -16,7 +16,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// aix -- Directly call system default assembler and linker.
+/// Directly call system default assembler and linker.
 namespace aix {
 
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
diff --git a/clang/lib/Driver/ToolChains/DragonFly.h 
b/clang/lib/Driver/ToolChains/DragonFly.h
index 42ce960c5bdbd95..4dceb09a17364df 100644
--- a/clang/lib/Driver/ToolChains/DragonFly.h
+++ b/clang/lib/Driver/ToolChains/DragonFly.h
@@ -16,7 +16,8 @@
 namespace clang {
 namespace driver {
 namespace tools {
-/// dragonfly -- Directly call GNU Binutils assembler and linker
+
+/// Directly call GNU Binutils assembler and linker
 namespace dragonfly {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/FreeBSD.h 
b/clang/lib/Driver/ToolChains/FreeBSD.h
index cec67d84a2cea8d..740274b314ba1f8 100644
--- a/clang/lib/Driver/ToolChains/FreeBSD.h
+++ b/clang/lib/Driver/ToolChains/FreeBSD.h
@@ -17,7 +17,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// freebsd -- Directly call GNU Binutils assembler and linker
+/// Directly call GNU Binutils assembler and linker
 namespace freebsd {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/MinGW.h 
b/clang/lib/Driver/ToolChains/MinGW.h
index 6d5feeacdadda4b..a71013912d0a3e9 100644
--- a/clang/lib/Driver/ToolChains/MinGW.h
+++ b/clang/lib/Driver/ToolChains/MinGW.h
@@ -20,7 +20,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// MinGW -- Directly call GNU Binutils assembler and linker
+/// Directly call GNU Binutils assembler and linker
 namespace MinGW {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/NetBSD.h 
b/clang/lib/Driver/ToolChains/NetBSD.h
index 0f9b6dceb6fcf4f..044c4239c3f48a2 100644
--- a/clang/lib/Driver/ToolChains/NetBSD.h
+++ b/clang/lib/Driver/ToolChains/NetBSD.h
@@ -17,7 +17,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// netbsd -- Directly call GNU Binutils assembler and linker
+/// Directly call GNU Binutils assembler and linker
 namespace netbsd {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/OpenBSD.h 
b/clang/lib/Driver/ToolChains/OpenBSD.h
index b7d3d1b5b6dc311..486dbf1407c2412 100644
--- a/clang/lib/Driver/ToolChains/OpenBSD.h
+++ b/clang/lib/Driver/ToolChains/OpenBSD.h
@@ -18,7 +18,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// openbsd -- Directly call GNU Binutils assembler and linker
+/// Directly call GNU Binutils assembler and linker
 namespace openbsd {
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
 public:
diff --git a/clang/lib/Driver/ToolChains/Solaris.h 
b/clang/lib/Driver/ToolChains/Solaris.h
index 04b68c5053caa6c..b8f2497d7c8eb1b 100644
--- a/clang/lib/Driver/ToolChains/Solaris.h
+++ b/clang/lib/Driver/ToolChains/Solaris.h
@@ -17,7 +17,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// solaris -- Directly call Solaris assembler and linker
+/// Directly call Solaris assembler and linker
 namespace solaris {
 class LLVM_LIBRARY_VISIBILITY Assembler : public gnutools::Assembler {
 public:
diff --git a/clang/lib/Driver/ToolChains/ZOS.h 
b/clang/lib/Driver/ToolChains/ZOS.h
index 548b432ade76704..4b9b332c0f3fbda 100644
--- a/clang/lib/Driver/ToolChains/ZOS.h
+++ b/clang/lib/Driver/ToolChains/ZOS.h
@@ -16,7 +16,7 @@ namespace clang {
 namespace driver {
 namespace tools {
 
-/// zos -- Directly call system default assembler and linker.
+/// Directly call system default assembler and linker.
 namespace zos {
 
 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {

___
cfe-commits 

  1   2   3   4   >