mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-19 05:06:45 +00:00
[flang] COMMAND_ARGUMENT_COUNT runtime implementation
Grab whatever ProgramStart has stored in executionEnvironment.argc and subtract 1 (based on the assumption that ProgramStart is called with a C-style argc that counts the command name as an argument). Spoiler alert: The tests will evolve into fixtures when we implement GET_COMMAND_ARGUMENT etc. Differential Revision: https://reviews.llvm.org/D109048
This commit is contained in:
parent
7bb42dc6b1
commit
0c375296cc
@ -35,6 +35,7 @@ add_flang_library(FortranRuntime
|
||||
allocatable.cpp
|
||||
assign.cpp
|
||||
buffer.cpp
|
||||
command.cpp
|
||||
complex-reduction.c
|
||||
copy.cpp
|
||||
character.cpp
|
||||
|
21
flang/runtime/command.cpp
Normal file
21
flang/runtime/command.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
//===-- runtime/command.cpp -----------------------------------------------===//
|
||||
//
|
||||
// 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 "command.h"
|
||||
#include "environment.h"
|
||||
|
||||
namespace Fortran::runtime {
|
||||
CppTypeFor<TypeCategory::Integer, 4> RTNAME(ArgumentCount)() {
|
||||
int argc{executionEnvironment.argc};
|
||||
if (argc > 1) {
|
||||
// C counts the command name as one of the arguments, but Fortran doesn't.
|
||||
return argc - 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
} // namespace Fortran::runtime
|
@ -1,6 +1,7 @@
|
||||
add_flang_unittest(FlangRuntimeTests
|
||||
BufferTest.cpp
|
||||
CharacterTest.cpp
|
||||
CommandTest.cpp
|
||||
CrashHandlerFixture.cpp
|
||||
ExternalIOTest.cpp
|
||||
Format.cpp
|
||||
|
32
flang/unittests/Runtime/CommandTest.cpp
Normal file
32
flang/unittests/Runtime/CommandTest.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
//===-- flang/unittests/RuntimeGTest/CommandTest.cpp ----------------------===//
|
||||
//
|
||||
// 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 "../../runtime/command.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "../../runtime/descriptor.h"
|
||||
#include "../../runtime/main.h"
|
||||
|
||||
using namespace Fortran::runtime;
|
||||
|
||||
TEST(ArgumentCount, ZeroArguments) {
|
||||
const char *argv[]{"aProgram"};
|
||||
RTNAME(ProgramStart)(1, argv, {});
|
||||
EXPECT_EQ(0, RTNAME(ArgumentCount)());
|
||||
}
|
||||
|
||||
TEST(ArgumentCount, OneArgument) {
|
||||
const char *argv[]{"aProgram", "anArgument"};
|
||||
RTNAME(ProgramStart)(2, argv, {});
|
||||
EXPECT_EQ(1, RTNAME(ArgumentCount)());
|
||||
}
|
||||
|
||||
TEST(ArgumentCount, SeveralArguments) {
|
||||
const char *argv[]{"aProgram", "arg1", "arg2", "arg3", "arg4"};
|
||||
RTNAME(ProgramStart)(5, argv, {});
|
||||
EXPECT_EQ(4, RTNAME(ArgumentCount)());
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user