Skip to content

Commit 30878b6

Browse files
SC llvm teamSC llvm team
authored andcommitted
Merged main:fc19424d1d6d into amd-gfx:a5dbf9439804
Local branch amd-gfx a5dbf94 Merged main:bbae59ae71c7 into amd-gfx:af6b7b051c01 Remote branch main fc19424 [clang-tidy][NFC] Fix bugprone-suspicious-enum-usage tests
2 parents a5dbf94 + fc19424 commit 30878b6

File tree

44 files changed

+218
-101
lines changed

Some content is hidden

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

44 files changed

+218
-101
lines changed

.github/workflows/libcxx-build-and-test.yaml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ on:
2222
- 'runtimes/**'
2323
- 'cmake/**'
2424
- '.github/workflows/libcxx-build-and-test.yaml'
25+
schedule:
26+
# Run nightly at 8 AM UTC (or roughly 3 AM eastern)
27+
- cron: '0 3 * * *'
28+
29+
permissions:
30+
contents: read # Default everything to read-only
2531

2632
concurrency:
2733
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
@@ -157,7 +163,11 @@ jobs:
157163
'generic-no-unicode',
158164
'generic-no-wide-characters',
159165
'generic-static',
160-
'generic-with_llvm_unwinder'
166+
'generic-with_llvm_unwinder',
167+
# TODO Find a better place for the benchmark and bootstrapping builds to live. They're either very expensive
168+
# or don't provide much value since the benchmark run results are too noise on the bots.
169+
'benchmarks',
170+
'bootstrapping-build'
161171
]
162172
machine: [ 'libcxx-runners-8' ]
163173
std_modules: [ 'OFF' ]

clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-enum-usage-strict.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %check_clang_tidy %s bugprone-suspicious-enum-usage %t -- -config="{CheckOptions: {bugprone-suspicious-enum-usage.StrictMode: true}}" --
1+
// RUN: %check_clang_tidy -std=c++17 %s bugprone-suspicious-enum-usage %t -- -config="{CheckOptions: {bugprone-suspicious-enum-usage.StrictMode: true}}" --
22

33
enum A {
44
A = 1,
@@ -71,7 +71,7 @@ int trigger() {
7171
unsigned p = R;
7272
PP pp = Q;
7373
p |= pp;
74-
74+
7575
enum X x = Z;
7676
p = x | Z;
7777
return 0;

clang-tools-extra/test/clang-tidy/checkers/bugprone/suspicious-enum-usage.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %check_clang_tidy %s bugprone-suspicious-enum-usage %t -- -config="{CheckOptions: {bugprone-suspicious-enum-usage.StrictMode: false}}" --
1+
// RUN: %check_clang_tidy -std=c++17 %s bugprone-suspicious-enum-usage %t -- -config="{CheckOptions: {bugprone-suspicious-enum-usage.StrictMode: false}}"
22

33
enum Empty {
44
};
@@ -79,7 +79,7 @@ int dont_trigger() {
7979
int d = c | H, e = b * a;
8080
a = B | C;
8181
b = X | Z;
82-
82+
8383
if (Tuesday != Monday + 1 ||
8484
Friday - Thursday != 1 ||
8585
Sunday + Wednesday == (Sunday | Wednesday))

clang/lib/Basic/Targets/RISCV.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,7 @@ ArrayRef<Builtin::Info> RISCVTargetInfo::getTargetBuiltins() const {
236236
}
237237

238238
static std::vector<std::string>
239-
collectNonISAExtFeature(const std::vector<std::string> &FeaturesNeedOverride,
240-
int XLen) {
239+
collectNonISAExtFeature(ArrayRef<std::string> FeaturesNeedOverride, int XLen) {
241240
auto ParseResult =
242241
llvm::RISCVISAInfo::parseFeatures(XLen, FeaturesNeedOverride);
243242

@@ -265,11 +264,11 @@ resolveTargetAttrOverride(const std::vector<std::string> &FeaturesVec,
265264
if (I == FeaturesVec.end())
266265
return FeaturesVec;
267266

268-
const std::vector<std::string> FeaturesNeedOverride(FeaturesVec.begin(), I);
267+
ArrayRef<std::string> FeaturesNeedOverride(&*FeaturesVec.begin(), &*I);
269268
std::vector<std::string> NonISAExtFeature =
270269
collectNonISAExtFeature(FeaturesNeedOverride, XLen);
271270

272-
auto ResolvedFeature = std::vector<std::string>(++I, FeaturesVec.end());
271+
std::vector<std::string> ResolvedFeature(++I, FeaturesVec.end());
273272
ResolvedFeature.insert(ResolvedFeature.end(), NonISAExtFeature.begin(),
274273
NonISAExtFeature.end());
275274

@@ -415,8 +414,7 @@ static void handleFullArchString(StringRef FullArchStr,
415414
Features.push_back("+" + FullArchStr.str());
416415
} else {
417416
std::vector<std::string> FeatStrings = (*RII)->toFeatureVector();
418-
for (auto FeatString : FeatStrings)
419-
Features.push_back(FeatString);
417+
Features.insert(Features.end(), FeatStrings.begin(), FeatStrings.end());
420418
}
421419
}
422420

clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,9 @@ void CGOpenMPRuntimeGPU::emitKernelDeinit(CodeGenFunction &CGF,
804804
CGM.getTypes().ConvertTypeForMem(StaticTy);
805805
const auto &DL = CGM.getModule().getDataLayout();
806806
uint64_t ReductionDataSize =
807-
DL.getTypeAllocSize(LLVMReductionsBufferTy).getFixedValue();
807+
TeamsReductions.empty()
808+
? 0
809+
: DL.getTypeAllocSize(LLVMReductionsBufferTy).getFixedValue();
808810
CGBuilderTy &Bld = CGF.Builder;
809811
OMPBuilder.createTargetDeinit(Bld, ReductionDataSize,
810812
C.getLangOpts().OpenMPCUDAReductionBufNum);

clang/lib/CodeGen/CGStmtOpenMP.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -667,11 +667,7 @@ CodeGenFunction::GenerateOpenMPCapturedStmtFunction(const CapturedStmt &S,
667667
I->second.first ? I->second.first->getType() : Arg->getType(),
668668
AlignmentSource::Decl);
669669
if (LV.getType()->isAnyComplexType())
670-
LV.setAddress(WrapperCGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
671-
LV.getAddress(WrapperCGF),
672-
PI->getType()->getPointerTo(
673-
LV.getAddress(WrapperCGF).getAddressSpace()),
674-
PI->getType()));
670+
LV.setAddress(LV.getAddress(WrapperCGF).withElementType(PI->getType()));
675671
CallArg = WrapperCGF.EmitLoadOfScalar(LV, S.getBeginLoc());
676672
} else {
677673
auto EI = VLASizes.find(Arg);
@@ -4828,8 +4824,6 @@ void CodeGenFunction::EmitOMPTaskBasedDirective(
48284824
}
48294825
auto *CopyFnTy = llvm::FunctionType::get(CGF.Builder.getVoidTy(),
48304826
ParamTypes, /*isVarArg=*/false);
4831-
CopyFn = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
4832-
CopyFn, CopyFnTy->getPointerTo());
48334827
CGF.CGM.getOpenMPRuntime().emitOutlinedFunctionCall(
48344828
CGF, S.getBeginLoc(), {CopyFnTy, CopyFn}, CallArgs);
48354829
for (const auto &Pair : LastprivateDstsOrigs) {
@@ -5115,8 +5109,6 @@ void CodeGenFunction::EmitOMPTargetTaskBasedDirective(
51155109
}
51165110
auto *CopyFnTy = llvm::FunctionType::get(CGF.Builder.getVoidTy(),
51175111
ParamTypes, /*isVarArg=*/false);
5118-
CopyFn = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
5119-
CopyFn, CopyFnTy->getPointerTo());
51205112
CGF.CGM.getOpenMPRuntime().emitOutlinedFunctionCall(
51215113
CGF, S.getBeginLoc(), {CopyFnTy, CopyFn}, CallArgs);
51225114
for (const auto &Pair : PrivatePtrs) {

flang/include/flang/Frontend/CompilerInstance.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ class CompilerInstance {
5555

5656
std::unique_ptr<Fortran::semantics::RuntimeDerivedTypeTables> rtTyTables;
5757

58+
std::unique_ptr<Fortran::semantics::SemanticsContext> semaContext;
59+
5860
/// The stream for diagnostics from Semantics
5961
llvm::raw_ostream *semaOutputStream = &llvm::errs();
6062

@@ -121,6 +123,13 @@ class CompilerInstance {
121123
/// @name Semantic analysis
122124
/// {
123125

126+
Fortran::semantics::SemanticsContext &getSemanticsContext() {
127+
return *semaContext;
128+
}
129+
const Fortran::semantics::SemanticsContext &getSemanticsContext() const {
130+
return *semaContext;
131+
}
132+
124133
/// Replace the current stream for verbose output.
125134
void setSemaOutputStream(llvm::raw_ostream &value);
126135

flang/include/flang/Frontend/CompilerInvocation.h

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,6 @@ class CompilerInvocation : public CompilerInvocationBase {
8787
// intrinsic of iso_fortran_env.
8888
std::string allCompilerInvocOpts;
8989

90-
// Semantics context
91-
std::unique_ptr<Fortran::semantics::SemanticsContext> semanticsContext;
92-
9390
/// Semantic options
9491
// TODO: Merge with or translate to frontendOpts. We shouldn't need two sets
9592
// of options.
@@ -159,12 +156,9 @@ class CompilerInvocation : public CompilerInvocationBase {
159156
return loweringOpts;
160157
}
161158

162-
Fortran::semantics::SemanticsContext &getSemanticsContext() {
163-
return *semanticsContext;
164-
}
165-
const Fortran::semantics::SemanticsContext &getSemanticsContext() const {
166-
return *semanticsContext;
167-
}
159+
/// Creates and configures semantics context based on the compilation flags.
160+
std::unique_ptr<Fortran::semantics::SemanticsContext>
161+
getSemanticsCtx(Fortran::parser::AllCookedSources &allCookedSources);
168162

169163
std::string &getModuleDir() { return moduleDir; }
170164
const std::string &getModuleDir() const { return moduleDir; }

flang/lib/Frontend/CompilerInstance.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ bool CompilerInstance::executeAction(FrontendAction &act) {
156156
invoc.setFortranOpts();
157157
// Set the encoding to read all input files in based on user input.
158158
allSources->set_encoding(invoc.getFortranOpts().encoding);
159-
// Create the semantics context and set semantic options.
160-
invoc.setSemanticsOpts(*this->allCookedSources);
159+
// Create the semantics context
160+
semaContext = invoc.getSemanticsCtx(*allCookedSources);
161161
// Set options controlling lowering to FIR.
162162
invoc.setLoweringOptions();
163163

flang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1344,11 +1344,12 @@ void CompilerInvocation::setFortranOpts() {
13441344
fortranOptions.features.WarnOnAllUsage();
13451345
}
13461346

1347-
void CompilerInvocation::setSemanticsOpts(
1347+
std::unique_ptr<Fortran::semantics::SemanticsContext>
1348+
CompilerInvocation::getSemanticsCtx(
13481349
Fortran::parser::AllCookedSources &allCookedSources) {
13491350
auto &fortranOptions = getFortranOpts();
13501351

1351-
semanticsContext = std::make_unique<semantics::SemanticsContext>(
1352+
auto semanticsContext = std::make_unique<semantics::SemanticsContext>(
13521353
getDefaultKinds(), fortranOptions.features, allCookedSources);
13531354

13541355
semanticsContext->set_moduleDirectory(getModuleDir())
@@ -1372,6 +1373,8 @@ void CompilerInvocation::setSemanticsOpts(
13721373

13731374
if (targetTriple.isPPC())
13741375
semanticsContext->targetCharacteristics().set_isPPC(true);
1376+
1377+
return semanticsContext;
13751378
}
13761379

13771380
/// Set \p loweringOptions controlling lowering behavior based

flang/lib/Frontend/FrontendAction.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ bool FrontendAction::runSemanticChecks() {
171171

172172
// Prepare semantics
173173
ci.setSemantics(std::make_unique<Fortran::semantics::Semantics>(
174-
ci.getInvocation().getSemanticsContext(), *parseTree,
174+
ci.getSemanticsContext(), *parseTree,
175175
ci.getInvocation().getDebugModuleDir()));
176176
auto &semantics = ci.getSemantics();
177177

@@ -191,8 +191,7 @@ bool FrontendAction::runSemanticChecks() {
191191
bool FrontendAction::generateRtTypeTables() {
192192
getInstance().setRtTyTables(
193193
std::make_unique<Fortran::semantics::RuntimeDerivedTypeTables>(
194-
BuildRuntimeDerivedTypeTables(
195-
getInstance().getInvocation().getSemanticsContext())));
194+
BuildRuntimeDerivedTypeTables(getInstance().getSemanticsContext())));
196195

197196
// The runtime derived type information table builder may find additional
198197
// semantic errors. Report them.

flang/lib/Frontend/FrontendActions.cpp

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -391,13 +391,13 @@ bool CodeGenAction::beginSourceFileAction() {
391391

392392
// Create a LoweringBridge
393393
const common::IntrinsicTypeDefaultKinds &defKinds =
394-
ci.getInvocation().getSemanticsContext().defaultKinds();
394+
ci.getSemanticsContext().defaultKinds();
395395
fir::KindMapping kindMap(mlirCtx.get(), llvm::ArrayRef<fir::KindTy>{
396396
fir::fromDefaultKinds(defKinds)});
397397
lower::LoweringBridge lb = Fortran::lower::LoweringBridge::create(
398-
*mlirCtx, ci.getInvocation().getSemanticsContext(), defKinds,
399-
ci.getInvocation().getSemanticsContext().intrinsics(),
400-
ci.getInvocation().getSemanticsContext().targetCharacteristics(),
398+
*mlirCtx, ci.getSemanticsContext(), defKinds,
399+
ci.getSemanticsContext().intrinsics(),
400+
ci.getSemanticsContext().targetCharacteristics(),
401401
ci.getParsing().allCooked(), ci.getInvocation().getTargetOpts().triple,
402402
kindMap, ci.getInvocation().getLoweringOpts(),
403403
ci.getInvocation().getFrontendOpts().envDefaults,
@@ -424,7 +424,7 @@ bool CodeGenAction::beginSourceFileAction() {
424424

425425
// Create a parse tree and lower it to FIR
426426
Fortran::parser::Program &parseTree{*ci.getParsing().parseTree()};
427-
lb.lower(parseTree, ci.getInvocation().getSemanticsContext());
427+
lb.lower(parseTree, ci.getSemanticsContext());
428428

429429
// Add target specific items like dependent libraries, target specific
430430
// constants etc.
@@ -697,8 +697,8 @@ void DebugPreFIRTreeAction::executeAction() {
697697
auto &parseTree{*ci.getParsing().parseTree()};
698698

699699
// Dump pre-FIR tree
700-
if (auto ast{Fortran::lower::createPFT(
701-
parseTree, ci.getInvocation().getSemanticsContext())}) {
700+
if (auto ast{
701+
Fortran::lower::createPFT(parseTree, ci.getSemanticsContext())}) {
702702
Fortran::lower::dumpPFT(llvm::outs(), *ast);
703703
} else {
704704
unsigned diagID = ci.getDiagnostics().getCustomDiagID(
@@ -736,10 +736,8 @@ void GetDefinitionAction::executeAction() {
736736

737737
llvm::outs() << "String range: >" << charBlock->ToString() << "<\n";
738738

739-
auto *symbol{ci.getInvocation()
740-
.getSemanticsContext()
741-
.FindScope(*charBlock)
742-
.FindSymbol(*charBlock)};
739+
auto *symbol{
740+
ci.getSemanticsContext().FindScope(*charBlock).FindSymbol(*charBlock)};
743741
if (!symbol) {
744742
ci.getDiagnostics().Report(diagID);
745743
return;

libcxx/cmake/caches/Armv7M-picolibc.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,13 @@ set(LIBCXX_ENABLE_STATIC ON CACHE BOOL "")
2929
set(LIBCXX_ENABLE_THREADS OFF CACHE BOOL "")
3030
set(LIBCXX_ENABLE_WIDE_CHARACTERS OFF CACHE BOOL "")
3131
set(LIBCXX_INCLUDE_BENCHMARKS OFF CACHE BOOL "")
32+
# Long tests are prohibitively slow when run via emulation.
33+
set(LIBCXX_TEST_PARAMS "long_tests=False" CACHE STRING "")
3234
set(LIBCXX_USE_COMPILER_RT ON CACHE BOOL "")
3335
set(LIBUNWIND_ENABLE_SHARED OFF CACHE BOOL "")
3436
set(LIBUNWIND_ENABLE_STATIC ON CACHE BOOL "")
3537
set(LIBUNWIND_ENABLE_THREADS OFF CACHE BOOL "")
3638
set(LIBUNWIND_IS_BAREMETAL ON CACHE BOOL "")
3739
set(LIBUNWIND_REMEMBER_HEAP_ALLOC ON CACHE BOOL "")
3840
set(LIBUNWIND_USE_COMPILER_RT ON CACHE BOOL "")
41+
find_program(QEMU_SYSTEM_ARM qemu-system-arm)

libcxx/docs/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ Linux i386, x86_64, arm, arm64 Only glibc-2.24 and later and no
133133
Android 5.0+ i386, x86_64, arm, arm64
134134
Windows i386, x86_64 Both MSVC and MinGW style environments, ABI in MSVC environments is :doc:`unstable <DesignDocs/ABIVersioning>`
135135
AIX 7.2TL5+ powerpc, powerpc64
136-
Embedded (picolibc) arm Support for building with picolibc is currently work-in-progress
136+
Embedded (picolibc) arm
137137
===================== ========================= ============================
138138

139139
Generally speaking, libc++ should work on any platform that provides a fairly complete

libcxx/test/configs/armv7m-picolibc-libc++.cfg.in

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,16 @@ config.substitutions.append(('%{link_flags}',
2626
' -Wl,--defsym=__ram_size=0x1000000'
2727
' -Wl,--defsym=__stack_size=0x1000'
2828
))
29+
30+
config.executor = (
31+
'@LIBCXX_SOURCE_DIR@/utils/qemu_baremetal.py'
32+
' --qemu @QEMU_SYSTEM_ARM@'
33+
' --machine mps2-an385'
34+
' --cpu cortex-m3')
2935
config.substitutions.append(('%{exec}',
30-
'true' # TODO use qemu-system-arm
36+
'%{executor}'
37+
' --execdir %T'
3138
))
32-
config.available_features.add('libcxx-fake-executor')
3339

3440
import os, site
3541
site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils'))

libcxx/test/libcxx/selftest/dsl/dsl.sh.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
#
77
# ===----------------------------------------------------------------------===##
88

9-
# XFAIL: libcxx-fake-executor
9+
# With picolibc, test_program_stderr_is_not_conflated_with_stdout fails
10+
# because stdout & stderr are treated as the same.
11+
# XFAIL: LIBCXX-PICOLIBC-FIXME
1012

1113
# Note: We prepend arguments with 'x' to avoid thinking there are too few
1214
# arguments in case an argument is an empty string.

libcxx/test/libcxx/selftest/pass.cpp/run-error.pass.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
// UNSUPPORTED: libcxx-fake-executor
109
// XFAIL: *
1110

1211
// Make sure the test DOES NOT pass if it fails at runtime.

libcxx/test/libcxx/selftest/pass.mm/run-error.pass.mm

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
//===----------------------------------------------------------------------===//
88

99
// REQUIRES: objective-c++
10-
// UNSUPPORTED: libcxx-fake-executor
1110

1211
// XFAIL: *
1312

libcxx/test/libcxx/selftest/stdin-is-piped.sh.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
// Make sure that the executor pipes standard input to the test-executable being run.
1010

11+
// XFAIL: LIBCXX-PICOLIBC-FIXME
12+
1113
// RUN: %{build}
1214
// RUN: echo "abc" | %{exec} %t.exe
1315

libcxx/test/std/algorithms/alg.sorting/alg.sort/sort/sort.pass.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9+
// This test appears to hang with picolibc & qemu.
10+
// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME
11+
912
// <algorithm>
1013

1114
// template<RandomAccessIterator Iter>

libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/generic_category.pass.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
//===----------------------------------------------------------------------===//
88

99
// XFAIL: stdlib=apple-libc++ && target={{.+}}-apple-macosx10.{{9|10|11|12}}
10+
// XFAIL: LIBCXX-PICOLIBC-FIXME
1011

1112
// <system_error>
1213

libcxx/test/std/diagnostics/syserr/syserr.errcat/syserr.errcat.objects/system_category.pass.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// const error_category& system_category();
1414

1515
// XFAIL: stdlib=apple-libc++ && target={{.+}}-apple-macosx10.{{9|10|11|12}}
16+
// XFAIL: LIBCXX-PICOLIBC-FIXME
1617

1718
#include <system_error>
1819
#include <cassert>

libcxx/test/std/input.output/iostream.objects/narrow.stream.objects/cerr.sh.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
// UNSUPPORTED: LIBCXX-PICOLIBC-FIXME
9+
// XFAIL: LIBCXX-PICOLIBC-FIXME
1010

1111
// <iostream>
1212

0 commit comments

Comments
 (0)