[llvm] [clang-cl] Fix friend class warning on Windows (PR #201720)
Reid Kleckner via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 8 16:48:32 PDT 2026
https://github.com/rnk updated https://github.com/llvm/llvm-project/pull/201720
>From eb6cbe5a0fa42a41860be3f1b89a3863dab90226 Mon Sep 17 00:00:00 2001
From: Reid Kleckner <rkleckner at nvidia.com>
Date: Thu, 4 Jun 2026 16:40:51 -0700
Subject: [PATCH 1/2] [clang-cl] Fix friend class warning on Windows
clang-cl warned on "friend class CallInst;" because MSVC may resolve that to "friend llvm::CallInst" instead of the sbox IR mirrored hierarch. Drop the class tag and refer to forward declared names instead.
---
llvm/include/llvm/SandboxIR/Use.h | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/llvm/include/llvm/SandboxIR/Use.h b/llvm/include/llvm/SandboxIR/Use.h
index db333ddb6e101..ee051554f2b58 100644
--- a/llvm/include/llvm/SandboxIR/Use.h
+++ b/llvm/include/llvm/SandboxIR/Use.h
@@ -22,10 +22,20 @@ namespace llvm::sandboxir {
class Context;
class Value;
class User;
+class OperandUseIterator;
+class UserUseIterator;
class CallBase;
class CallBrInst;
class PHINode;
+// Forward declare instruction wrapper classes so qualified friend
+// declarations below refer to SandboxIR classes instead of introducing new
+// unqualified declarations.
+#define DEF_INSTR(ID, OPC, CLASS) class CLASS;
+#define DEF_DISABLE_AUTO_UNDEF // ValuesDefFilesList.def includes multiple .def
+#include "llvm/SandboxIR/ValuesDefFilesList.def"
+#undef DEF_INSTR
+
/// Represents a Def-use/Use-def edge in SandboxIR.
/// NOTE: Unlike llvm::Use, this is not an integral part of the use-def chains.
/// It is also not uniqued and is currently passed by value, so you can have
@@ -40,14 +50,14 @@ class Use {
: LLVMUse(LLVMUse), Usr(Usr), Ctx(&Ctx) {}
Use() : LLVMUse(nullptr), Ctx(nullptr) {}
- friend class Value; // For constructor
- friend class User; // For constructor
- friend class OperandUseIterator; // For constructor
- friend class UserUseIterator; // For accessing members
- friend class CallBase; // For LLVMUse
- friend class PHINode; // For LLVMUse
+ friend class ::llvm::sandboxir::Value; // For constructor
+ friend class ::llvm::sandboxir::User; // For constructor
+ friend class ::llvm::sandboxir::OperandUseIterator; // For constructor
+ friend class ::llvm::sandboxir::UserUseIterator; // For accessing members
+ friend class ::llvm::sandboxir::CallBase; // For LLVMUse
+ friend class ::llvm::sandboxir::PHINode; // For LLVMUse
// Friend instructions so that they can call the constructor if needed.
-#define DEF_INSTR(ID, OPC, CLASS) friend class CLASS;
+#define DEF_INSTR(ID, OPC, CLASS) friend class ::llvm::sandboxir::CLASS;
#define DEF_DISABLE_AUTO_UNDEF // ValuesDefFilesList.def includes multiple .def
#include "llvm/SandboxIR/ValuesDefFilesList.def"
#undef DEF_INSTR
>From 8a4186a9232d3eda8cebbc2e6e408e845fb5faff Mon Sep 17 00:00:00 2001
From: Reid Kleckner <rkleckner at nvidia.com>
Date: Mon, 8 Jun 2026 16:47:21 -0700
Subject: [PATCH 2/2] Remove class tag
---
llvm/include/llvm/SandboxIR/Use.h | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/llvm/include/llvm/SandboxIR/Use.h b/llvm/include/llvm/SandboxIR/Use.h
index ee051554f2b58..5b024b81e327c 100644
--- a/llvm/include/llvm/SandboxIR/Use.h
+++ b/llvm/include/llvm/SandboxIR/Use.h
@@ -50,14 +50,14 @@ class Use {
: LLVMUse(LLVMUse), Usr(Usr), Ctx(&Ctx) {}
Use() : LLVMUse(nullptr), Ctx(nullptr) {}
- friend class ::llvm::sandboxir::Value; // For constructor
- friend class ::llvm::sandboxir::User; // For constructor
- friend class ::llvm::sandboxir::OperandUseIterator; // For constructor
- friend class ::llvm::sandboxir::UserUseIterator; // For accessing members
- friend class ::llvm::sandboxir::CallBase; // For LLVMUse
- friend class ::llvm::sandboxir::PHINode; // For LLVMUse
+ friend ::llvm::sandboxir::Value; // For constructor
+ friend ::llvm::sandboxir::User; // For constructor
+ friend ::llvm::sandboxir::OperandUseIterator; // For constructor
+ friend ::llvm::sandboxir::UserUseIterator; // For accessing members
+ friend ::llvm::sandboxir::CallBase; // For LLVMUse
+ friend ::llvm::sandboxir::PHINode; // For LLVMUse
// Friend instructions so that they can call the constructor if needed.
-#define DEF_INSTR(ID, OPC, CLASS) friend class ::llvm::sandboxir::CLASS;
+#define DEF_INSTR(ID, OPC, CLASS) friend ::llvm::sandboxir::CLASS;
#define DEF_DISABLE_AUTO_UNDEF // ValuesDefFilesList.def includes multiple .def
#include "llvm/SandboxIR/ValuesDefFilesList.def"
#undef DEF_INSTR
More information about the llvm-commits
mailing list