Skip to content

Commit db0fcc4

Browse files
committed
rebase
Created using spr 1.3.4
2 parents 22700c4 + 9f74d51 commit db0fcc4

File tree

94 files changed

+4519
-1201
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+4519
-1201
lines changed

clang/include/clang/Parse/ParseHLSLRootSignature.h

+4
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,13 @@ class RootSignatureParser {
8585
std::optional<ParsedClauseParams>
8686
parseDescriptorTableClauseParams(RootSignatureToken::Kind RegType);
8787

88+
// Common parsing methods
8889
std::optional<uint32_t> parseUIntParam();
8990
std::optional<llvm::hlsl::rootsig::Register> parseRegister();
9091

92+
/// Parsing methods of various enums
93+
std::optional<llvm::hlsl::rootsig::ShaderVisibility> parseShaderVisibility();
94+
9195
/// Use NumericLiteralParser to convert CurToken.NumSpelling into a unsigned
9296
/// 32-bit integer
9397
std::optional<uint32_t> handleUIntLiteral();

clang/lib/AST/ByteCode/Interp.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -1446,7 +1446,7 @@ bool GetGlobal(InterpState &S, CodePtr OpPC, uint32_t I) {
14461446
template <PrimType Name, class T = typename PrimConv<Name>::T>
14471447
bool GetGlobalUnchecked(InterpState &S, CodePtr OpPC, uint32_t I) {
14481448
const Pointer &Ptr = S.P.getPtrGlobal(I);
1449-
if (!Ptr.isInitialized())
1449+
if (!CheckInitialized(S, OpPC, Ptr, AK_Read))
14501450
return false;
14511451
S.Stk.push<T>(Ptr.deref<T>());
14521452
return true;

clang/lib/CodeGen/BackendUtil.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -961,6 +961,22 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
961961
Debugify.setOrigDIVerifyBugsReportFilePath(
962962
CodeGenOpts.DIBugsReportFilePath);
963963
Debugify.registerCallbacks(PIC, MAM);
964+
965+
#if ENABLE_DEBUGLOC_COVERAGE_TRACKING
966+
// If we're using debug location coverage tracking, mark all the
967+
// instructions coming out of the frontend without a DebugLoc as being
968+
// compiler-generated, to prevent both those instructions and new
969+
// instructions that inherit their location from being treated as
970+
// incorrectly empty locations.
971+
for (Function &F : *TheModule) {
972+
if (!F.getSubprogram())
973+
continue;
974+
for (BasicBlock &BB : F)
975+
for (Instruction &I : BB)
976+
if (!I.getDebugLoc())
977+
I.setDebugLoc(DebugLoc::getCompilerGenerated());
978+
}
979+
#endif
964980
}
965981
// Attempt to load pass plugins and register their callbacks with PB.
966982
for (auto &PluginFN : CodeGenOpts.PassPlugins) {

clang/lib/Parse/ParseHLSLRootSignature.cpp

+46
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ std::optional<DescriptorTable> RootSignatureParser::parseDescriptorTable() {
5252
return std::nullopt;
5353

5454
DescriptorTable Table;
55+
std::optional<ShaderVisibility> Visibility;
5556

5657
// Iterate as many Clauses as possible
5758
do {
@@ -63,8 +64,27 @@ std::optional<DescriptorTable> RootSignatureParser::parseDescriptorTable() {
6364
Elements.push_back(*Clause);
6465
Table.NumClauses++;
6566
}
67+
68+
if (tryConsumeExpectedToken(TokenKind::kw_visibility)) {
69+
if (Visibility.has_value()) {
70+
getDiags().Report(CurToken.TokLoc, diag::err_hlsl_rootsig_repeat_param)
71+
<< CurToken.TokKind;
72+
return std::nullopt;
73+
}
74+
75+
if (consumeExpectedToken(TokenKind::pu_equal))
76+
return std::nullopt;
77+
78+
Visibility = parseShaderVisibility();
79+
if (!Visibility.has_value())
80+
return std::nullopt;
81+
}
6682
} while (tryConsumeExpectedToken(TokenKind::pu_comma));
6783

84+
// Fill in optional visibility
85+
if (Visibility.has_value())
86+
Table.Visibility = Visibility.value();
87+
6888
if (consumeExpectedToken(TokenKind::pu_r_paren,
6989
diag::err_hlsl_unexpected_end_of_params,
7090
/*param of=*/TokenKind::kw_DescriptorTable))
@@ -222,6 +242,32 @@ std::optional<Register> RootSignatureParser::parseRegister() {
222242
return Reg;
223243
}
224244

245+
std::optional<llvm::hlsl::rootsig::ShaderVisibility>
246+
RootSignatureParser::parseShaderVisibility() {
247+
assert(CurToken.TokKind == TokenKind::pu_equal &&
248+
"Expects to only be invoked starting at given keyword");
249+
250+
TokenKind Expected[] = {
251+
#define SHADER_VISIBILITY_ENUM(NAME, LIT) TokenKind::en_##NAME,
252+
#include "clang/Lex/HLSLRootSignatureTokenKinds.def"
253+
};
254+
255+
if (!tryConsumeExpectedToken(Expected))
256+
return std::nullopt;
257+
258+
switch (CurToken.TokKind) {
259+
#define SHADER_VISIBILITY_ENUM(NAME, LIT) \
260+
case TokenKind::en_##NAME: \
261+
return ShaderVisibility::NAME; \
262+
break;
263+
#include "clang/Lex/HLSLRootSignatureTokenKinds.def"
264+
default:
265+
llvm_unreachable("Switch for consumed enum token was not provided");
266+
}
267+
268+
return std::nullopt;
269+
}
270+
225271
std::optional<uint32_t> RootSignatureParser::handleUIntLiteral() {
226272
// Parse the numeric value and do semantic checks on its specification
227273
clang::NumericLiteralParser Literal(CurToken.NumSpelling, CurToken.TokLoc,

clang/test/AST/ByteCode/cxx11.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -194,3 +194,11 @@ namespace DynamicCast {
194194
int g : (S*)(void*)(sptr) == sptr;
195195
};
196196
}
197+
198+
namespace GlobalInitializer {
199+
extern int &g; // both-note {{here}}
200+
struct S {
201+
int G : g; // both-error {{constant expression}} \
202+
// both-note {{initializer of 'g' is unknown}}
203+
};
204+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2+
// RUN: %clang_cc1 -fsanitize=cfi-icall -fsanitize-trap=cfi-icall -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=TRAP %s
3+
4+
// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=ABORT %s
5+
6+
// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -fsanitize-recover=cfi-icall -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=RECOVER %s
7+
8+
// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -fsanitize-minimal-runtime -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=ABORT_MIN %s
9+
10+
// RUN: %clang_cc1 -fsanitize=cfi-icall -fno-sanitize-trap=cfi-icall -fsanitize-recover=cfi-icall -fsanitize-minimal-runtime -flto -fvisibility=hidden -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=RECOVER_MIN %s
11+
12+
// TRAP-LABEL: define hidden void @f(
13+
// TRAP-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {
14+
// TRAP-NEXT: [[ENTRY:.*:]]
15+
// TRAP-NEXT: ret void
16+
//
17+
// ABORT-LABEL: define hidden void @f(
18+
// ABORT-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {
19+
// ABORT-NEXT: [[ENTRY:.*:]]
20+
// ABORT-NEXT: ret void
21+
//
22+
// RECOVER-LABEL: define hidden void @f(
23+
// RECOVER-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {
24+
// RECOVER-NEXT: [[ENTRY:.*:]]
25+
// RECOVER-NEXT: ret void
26+
//
27+
// ABORT_MIN-LABEL: define hidden void @f(
28+
// ABORT_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {
29+
// ABORT_MIN-NEXT: [[ENTRY:.*:]]
30+
// ABORT_MIN-NEXT: ret void
31+
//
32+
// RECOVER_MIN-LABEL: define hidden void @f(
33+
// RECOVER_MIN-SAME: ) #[[ATTR0:[0-9]+]] !type [[META6:![0-9]+]] !type [[META7:![0-9]+]] {
34+
// RECOVER_MIN-NEXT: [[ENTRY:.*:]]
35+
// RECOVER_MIN-NEXT: ret void
36+
//
37+
void f() {
38+
}
39+
40+
void xf();
41+
42+
// TRAP-LABEL: define hidden void @g(
43+
// TRAP-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {
44+
// TRAP-NEXT: [[ENTRY:.*:]]
45+
// TRAP-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4
46+
// TRAP-NEXT: [[FP:%.*]] = alloca ptr, align 8
47+
// TRAP-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
48+
// TRAP-NEXT: [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 4
49+
// TRAP-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
50+
// TRAP-NEXT: [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i64
51+
// TRAP-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf
52+
// TRAP-NEXT: store ptr [[COND]], ptr [[FP]], align 8
53+
// TRAP-NEXT: [[TMP2:%.*]] = load ptr, ptr [[FP]], align 8
54+
// TRAP-NEXT: [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]
55+
// TRAP-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[TRAP:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]
56+
// TRAP: [[TRAP]]:
57+
// TRAP-NEXT: call void @llvm.ubsantrap(i8 2) #[[ATTR4:[0-9]+]], !nosanitize [[META10]]
58+
// TRAP-NEXT: unreachable, !nosanitize [[META10]]
59+
// TRAP: [[CONT]]:
60+
// TRAP-NEXT: call void (...) [[TMP2]]()
61+
// TRAP-NEXT: ret void
62+
//
63+
// ABORT-LABEL: define hidden void @g(
64+
// ABORT-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {
65+
// ABORT-NEXT: [[ENTRY:.*:]]
66+
// ABORT-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4
67+
// ABORT-NEXT: [[FP:%.*]] = alloca ptr, align 8
68+
// ABORT-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
69+
// ABORT-NEXT: [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 4
70+
// ABORT-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
71+
// ABORT-NEXT: [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i64
72+
// ABORT-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf
73+
// ABORT-NEXT: store ptr [[COND]], ptr [[FP]], align 8
74+
// ABORT-NEXT: [[TMP2:%.*]] = load ptr, ptr [[FP]], align 8
75+
// ABORT-NEXT: [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]
76+
// ABORT-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[HANDLER_CFI_CHECK_FAIL:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]
77+
// ABORT: [[HANDLER_CFI_CHECK_FAIL]]:
78+
// ABORT-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[TMP2]] to i64, !nosanitize [[META10]]
79+
// ABORT-NEXT: call void @__ubsan_handle_cfi_check_fail_abort(ptr @anon.3d4044d65abdda407a92991f1300ec97.1, i64 [[TMP4]], i64 undef) #[[ATTR4:[0-9]+]], !nosanitize [[META10]]
80+
// ABORT-NEXT: unreachable, !nosanitize [[META10]]
81+
// ABORT: [[CONT]]:
82+
// ABORT-NEXT: call void (...) [[TMP2]]()
83+
// ABORT-NEXT: ret void
84+
//
85+
// RECOVER-LABEL: define hidden void @g(
86+
// RECOVER-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {
87+
// RECOVER-NEXT: [[ENTRY:.*:]]
88+
// RECOVER-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4
89+
// RECOVER-NEXT: [[FP:%.*]] = alloca ptr, align 8
90+
// RECOVER-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
91+
// RECOVER-NEXT: [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 4
92+
// RECOVER-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
93+
// RECOVER-NEXT: [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i64
94+
// RECOVER-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf
95+
// RECOVER-NEXT: store ptr [[COND]], ptr [[FP]], align 8
96+
// RECOVER-NEXT: [[TMP2:%.*]] = load ptr, ptr [[FP]], align 8
97+
// RECOVER-NEXT: [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]
98+
// RECOVER-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[HANDLER_CFI_CHECK_FAIL:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]
99+
// RECOVER: [[HANDLER_CFI_CHECK_FAIL]]:
100+
// RECOVER-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[TMP2]] to i64, !nosanitize [[META10]]
101+
// RECOVER-NEXT: call void @__ubsan_handle_cfi_check_fail(ptr @anon.3d4044d65abdda407a92991f1300ec97.1, i64 [[TMP4]], i64 undef) #[[ATTR4:[0-9]+]], !nosanitize [[META10]]
102+
// RECOVER-NEXT: br label %[[CONT]], !nosanitize [[META10]]
103+
// RECOVER: [[CONT]]:
104+
// RECOVER-NEXT: call void (...) [[TMP2]]()
105+
// RECOVER-NEXT: ret void
106+
//
107+
// ABORT_MIN-LABEL: define hidden void @g(
108+
// ABORT_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {
109+
// ABORT_MIN-NEXT: [[ENTRY:.*:]]
110+
// ABORT_MIN-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4
111+
// ABORT_MIN-NEXT: [[FP:%.*]] = alloca ptr, align 8
112+
// ABORT_MIN-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
113+
// ABORT_MIN-NEXT: [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 4
114+
// ABORT_MIN-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
115+
// ABORT_MIN-NEXT: [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i64
116+
// ABORT_MIN-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf
117+
// ABORT_MIN-NEXT: store ptr [[COND]], ptr [[FP]], align 8
118+
// ABORT_MIN-NEXT: [[TMP2:%.*]] = load ptr, ptr [[FP]], align 8
119+
// ABORT_MIN-NEXT: [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]
120+
// ABORT_MIN-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[HANDLER_CFI_CHECK_FAIL:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]
121+
// ABORT_MIN: [[HANDLER_CFI_CHECK_FAIL]]:
122+
// ABORT_MIN-NEXT: call void @__ubsan_handle_cfi_check_fail_minimal_abort() #[[ATTR4:[0-9]+]], !nosanitize [[META10]]
123+
// ABORT_MIN-NEXT: unreachable, !nosanitize [[META10]]
124+
// ABORT_MIN: [[CONT]]:
125+
// ABORT_MIN-NEXT: call void (...) [[TMP2]]()
126+
// ABORT_MIN-NEXT: ret void
127+
//
128+
// RECOVER_MIN-LABEL: define hidden void @g(
129+
// RECOVER_MIN-SAME: i32 noundef [[B:%.*]]) #[[ATTR0]] !type [[META8:![0-9]+]] !type [[META9:![0-9]+]] {
130+
// RECOVER_MIN-NEXT: [[ENTRY:.*:]]
131+
// RECOVER_MIN-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4
132+
// RECOVER_MIN-NEXT: [[FP:%.*]] = alloca ptr, align 8
133+
// RECOVER_MIN-NEXT: store i32 [[B]], ptr [[B_ADDR]], align 4
134+
// RECOVER_MIN-NEXT: [[TMP0:%.*]] = load i32, ptr [[B_ADDR]], align 4
135+
// RECOVER_MIN-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[TMP0]], 0
136+
// RECOVER_MIN-NEXT: [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i64
137+
// RECOVER_MIN-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], ptr @f, ptr @xf
138+
// RECOVER_MIN-NEXT: store ptr [[COND]], ptr [[FP]], align 8
139+
// RECOVER_MIN-NEXT: [[TMP2:%.*]] = load ptr, ptr [[FP]], align 8
140+
// RECOVER_MIN-NEXT: [[TMP3:%.*]] = call i1 @llvm.type.test(ptr [[TMP2]], metadata !"_ZTSFvE"), !nosanitize [[META10:![0-9]+]]
141+
// RECOVER_MIN-NEXT: br i1 [[TMP3]], label %[[CONT:.*]], label %[[HANDLER_CFI_CHECK_FAIL:.*]], !prof [[PROF11:![0-9]+]], !nosanitize [[META10]]
142+
// RECOVER_MIN: [[HANDLER_CFI_CHECK_FAIL]]:
143+
// RECOVER_MIN-NEXT: call void @__ubsan_handle_cfi_check_fail_minimal() #[[ATTR4:[0-9]+]], !nosanitize [[META10]]
144+
// RECOVER_MIN-NEXT: br label %[[CONT]], !nosanitize [[META10]]
145+
// RECOVER_MIN: [[CONT]]:
146+
// RECOVER_MIN-NEXT: call void (...) [[TMP2]]()
147+
// RECOVER_MIN-NEXT: ret void
148+
//
149+
void g(int b) {
150+
void (*fp)() = b ? f : xf;
151+
fp();
152+
}
153+
//.
154+
// TRAP: [[META6]] = !{i64 0, !"_ZTSFvE"}
155+
// TRAP: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}
156+
// TRAP: [[META8]] = !{i64 0, !"_ZTSFviE"}
157+
// TRAP: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}
158+
// TRAP: [[META10]] = !{}
159+
// TRAP: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}
160+
//.
161+
// ABORT: [[META6]] = !{i64 0, !"_ZTSFvE"}
162+
// ABORT: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}
163+
// ABORT: [[META8]] = !{i64 0, !"_ZTSFviE"}
164+
// ABORT: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}
165+
// ABORT: [[META10]] = !{}
166+
// ABORT: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}
167+
//.
168+
// RECOVER: [[META6]] = !{i64 0, !"_ZTSFvE"}
169+
// RECOVER: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}
170+
// RECOVER: [[META8]] = !{i64 0, !"_ZTSFviE"}
171+
// RECOVER: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}
172+
// RECOVER: [[META10]] = !{}
173+
// RECOVER: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}
174+
//.
175+
// ABORT_MIN: [[META6]] = !{i64 0, !"_ZTSFvE"}
176+
// ABORT_MIN: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}
177+
// ABORT_MIN: [[META8]] = !{i64 0, !"_ZTSFviE"}
178+
// ABORT_MIN: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}
179+
// ABORT_MIN: [[META10]] = !{}
180+
// ABORT_MIN: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}
181+
//.
182+
// RECOVER_MIN: [[META6]] = !{i64 0, !"_ZTSFvE"}
183+
// RECOVER_MIN: [[META7]] = !{i64 0, !"_ZTSFvE.generalized"}
184+
// RECOVER_MIN: [[META8]] = !{i64 0, !"_ZTSFviE"}
185+
// RECOVER_MIN: [[META9]] = !{i64 0, !"_ZTSFviE.generalized"}
186+
// RECOVER_MIN: [[META10]] = !{}
187+
// RECOVER_MIN: [[PROF11]] = !{!"branch_weights", i32 1048575, i32 1}
188+
//.

0 commit comments

Comments
 (0)