Skip to content

Commit f602bb4

Browse files
committed
[TableGen] Add explicit symbol visibility macros to code generated
Update llvm's TableGen to add explicit symbol visibility macros to function declarations it creates The symbols need to be export from llvm's shared library for Clang and some OpenMP tests
1 parent 46a76c3 commit f602bb4

File tree

3 files changed

+30
-26
lines changed

3 files changed

+30
-26
lines changed

llvm/test/TableGen/directive1.td

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def TDL_DirA : Directive<"dira"> {
5353
// CHECK-EMPTY:
5454
// CHECK-NEXT: #include "llvm/ADT/ArrayRef.h"
5555
// CHECK-NEXT: #include "llvm/ADT/BitmaskEnum.h"
56+
// CHECK-NEXT: #include "llvm/Support/Compiler.h"
5657
// CHECK-NEXT: #include <cstddef>
5758
// CHECK-EMPTY:
5859
// CHECK-NEXT: namespace llvm {
@@ -114,22 +115,22 @@ def TDL_DirA : Directive<"dira"> {
114115
// CHECK-NEXT: constexpr auto TDLCV_valc = llvm::tdl::AKind::TDLCV_valc;
115116
// CHECK-EMPTY:
116117
// CHECK-NEXT: // Enumeration helper functions
117-
// CHECK-NEXT: Directive getTdlDirectiveKind(llvm::StringRef Str);
118+
// CHECK-NEXT: LLVM_ABI Directive getTdlDirectiveKind(llvm::StringRef Str);
118119
// CHECK-EMPTY:
119-
// CHECK-NEXT: llvm::StringRef getTdlDirectiveName(Directive D);
120+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlDirectiveName(Directive D);
120121
// CHECK-EMPTY:
121-
// CHECK-NEXT: Clause getTdlClauseKind(llvm::StringRef Str);
122+
// CHECK-NEXT: LLVM_ABI Clause getTdlClauseKind(llvm::StringRef Str);
122123
// CHECK-EMPTY:
123-
// CHECK-NEXT: llvm::StringRef getTdlClauseName(Clause C);
124+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlClauseName(Clause C);
124125
// CHECK-EMPTY:
125126
// CHECK-NEXT: /// Return true if \p C is a valid clause for \p D in version \p Version.
126-
// CHECK-NEXT: bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version);
127+
// CHECK-NEXT: LLVM_ABI bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version);
127128
// CHECK-EMPTY:
128129
// CHECK-NEXT: constexpr std::size_t getMaxLeafCount() { return 0; }
129-
// CHECK-NEXT: Association getDirectiveAssociation(Directive D);
130-
// CHECK-NEXT: Category getDirectiveCategory(Directive D);
131-
// CHECK-NEXT: AKind getAKind(StringRef);
132-
// CHECK-NEXT: llvm::StringRef getTdlAKindName(AKind);
130+
// CHECK-NEXT: LLVM_ABI Association getDirectiveAssociation(Directive D);
131+
// CHECK-NEXT: LLVM_ABI Category getDirectiveCategory(Directive D);
132+
// CHECK-NEXT: LLVM_ABI AKind getAKind(StringRef);
133+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlAKindName(AKind);
133134
// CHECK-EMPTY:
134135
// CHECK-NEXT: } // namespace tdl
135136
// CHECK-NEXT: } // namespace llvm

llvm/test/TableGen/directive2.td

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def TDL_DirA : Directive<"dira"> {
4646
// CHECK-NEXT: #define LLVM_Tdl_INC
4747
// CHECK-EMPTY:
4848
// CHECK-NEXT: #include "llvm/ADT/ArrayRef.h"
49+
// CHECK-NEXT: #include "llvm/Support/Compiler.h"
4950
// CHECK-NEXT: #include <cstddef>
5051
// CHECK-EMPTY:
5152
// CHECK-NEXT: namespace llvm {
@@ -90,20 +91,20 @@ def TDL_DirA : Directive<"dira"> {
9091
// CHECK-NEXT: static constexpr std::size_t Clause_enumSize = 4;
9192
// CHECK-EMPTY:
9293
// CHECK-NEXT: // Enumeration helper functions
93-
// CHECK-NEXT: Directive getTdlDirectiveKind(llvm::StringRef Str);
94+
// CHECK-NEXT: LLVM_ABI Directive getTdlDirectiveKind(llvm::StringRef Str);
9495
// CHECK-EMPTY:
95-
// CHECK-NEXT: llvm::StringRef getTdlDirectiveName(Directive D);
96+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlDirectiveName(Directive D);
9697
// CHECK-EMPTY:
97-
// CHECK-NEXT: Clause getTdlClauseKind(llvm::StringRef Str);
98+
// CHECK-NEXT: LLVM_ABI Clause getTdlClauseKind(llvm::StringRef Str);
9899
// CHECK-EMPTY:
99-
// CHECK-NEXT: llvm::StringRef getTdlClauseName(Clause C);
100+
// CHECK-NEXT: LLVM_ABI llvm::StringRef getTdlClauseName(Clause C);
100101
// CHECK-EMPTY:
101102
// CHECK-NEXT: /// Return true if \p C is a valid clause for \p D in version \p Version.
102-
// CHECK-NEXT: bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version);
103+
// CHECK-NEXT: LLVM_ABI bool isAllowedClauseForDirective(Directive D, Clause C, unsigned Version);
103104
// CHECK-EMPTY:
104105
// CHECK-NEXT: constexpr std::size_t getMaxLeafCount() { return 0; }
105-
// CHECK-NEXT: Association getDirectiveAssociation(Directive D);
106-
// CHECK-NEXT: Category getDirectiveCategory(Directive D);
106+
// CHECK-NEXT: LLVM_ABI Association getDirectiveAssociation(Directive D);
107+
// CHECK-NEXT: LLVM_ABI Category getDirectiveCategory(Directive D);
107108
// CHECK-NEXT: } // namespace tdl
108109
// CHECK-NEXT: } // namespace llvm
109110
// CHECK-NEXT: #endif // LLVM_Tdl_INC

llvm/utils/TableGen/DirectiveEmitter.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,12 @@ static void GenerateEnumClauseVal(ArrayRef<const Record *> Records,
111111
<< "llvm::" << DirLang.getCppNamespace() << "::" << EnumName
112112
<< "::" << CV->getName() << ";\n";
113113
}
114-
EnumHelperFuncs += (Twine(EnumName) + Twine(" get") + Twine(EnumName) +
115-
Twine("(StringRef);\n"))
114+
EnumHelperFuncs += (Twine("LLVM_ABI ") + Twine(EnumName) + Twine(" get") +
115+
Twine(EnumName) + Twine("(StringRef);\n"))
116116
.str();
117117

118118
EnumHelperFuncs +=
119-
(Twine("llvm::StringRef get") + Twine(DirLang.getName()) +
119+
(Twine("LLVM_ABI llvm::StringRef get") + Twine(DirLang.getName()) +
120120
Twine(EnumName) + Twine("Name(") + Twine(EnumName) + Twine(");\n"))
121121
.str();
122122
}
@@ -200,6 +200,7 @@ static void EmitDirectivesDecl(const RecordKeeper &Records, raw_ostream &OS) {
200200
if (DirLang.hasEnableBitmaskEnumInNamespace())
201201
OS << "#include \"llvm/ADT/BitmaskEnum.h\"\n";
202202

203+
OS << "#include \"llvm/Support/Compiler.h\"\n";
203204
OS << "#include <cstddef>\n"; // for size_t
204205
OS << "\n";
205206
OS << "namespace llvm {\n";
@@ -242,26 +243,27 @@ static void EmitDirectivesDecl(const RecordKeeper &Records, raw_ostream &OS) {
242243
// Generic function signatures
243244
OS << "\n";
244245
OS << "// Enumeration helper functions\n";
245-
OS << "Directive get" << DirLang.getName()
246+
OS << "LLVM_ABI Directive get" << DirLang.getName()
246247
<< "DirectiveKind(llvm::StringRef Str);\n";
247248
OS << "\n";
248-
OS << "llvm::StringRef get" << DirLang.getName()
249+
OS << "LLVM_ABI llvm::StringRef get" << DirLang.getName()
249250
<< "DirectiveName(Directive D);\n";
250251
OS << "\n";
251-
OS << "Clause get" << DirLang.getName()
252+
OS << "LLVM_ABI Clause get" << DirLang.getName()
252253
<< "ClauseKind(llvm::StringRef Str);\n";
253254
OS << "\n";
254-
OS << "llvm::StringRef get" << DirLang.getName() << "ClauseName(Clause C);\n";
255+
OS << "LLVM_ABI llvm::StringRef get" << DirLang.getName()
256+
<< "ClauseName(Clause C);\n";
255257
OS << "\n";
256258
OS << "/// Return true if \\p C is a valid clause for \\p D in version \\p "
257259
<< "Version.\n";
258-
OS << "bool isAllowedClauseForDirective(Directive D, "
260+
OS << "LLVM_ABI bool isAllowedClauseForDirective(Directive D, "
259261
<< "Clause C, unsigned Version);\n";
260262
OS << "\n";
261263
OS << "constexpr std::size_t getMaxLeafCount() { return "
262264
<< GetMaxLeafCount(DirLang) << "; }\n";
263-
OS << "Association getDirectiveAssociation(Directive D);\n";
264-
OS << "Category getDirectiveCategory(Directive D);\n";
265+
OS << "LLVM_ABI Association getDirectiveAssociation(Directive D);\n";
266+
OS << "LLVM_ABI Category getDirectiveCategory(Directive D);\n";
265267
if (EnumHelperFuncs.length() > 0) {
266268
OS << EnumHelperFuncs;
267269
OS << "\n";

0 commit comments

Comments
 (0)