[flang-commits] [flang] [llvm] [flang-rt] Add fatal diagnostics with integer values (PR #231241)

via flang-commits flang-commits at lists.llvm.org
Tue Oct 13 04:17:32 PDT 2026


================
@@ -128,3 +130,83 @@ TEST_F(TestProgramEnd, CrashTest) {
       RTNAME(ReportFatalUserError)(crashMessage.c_str(), fileName.c_str(), 343),
       fullMessage.c_str());
 }
+
+TEST_F(TestProgramEnd, CrashValuesTest) {
+  EXPECT_DEATH(
+      RTNAME(ReportFatalUserErrorValues)("sizes %lld, %lld, %lld, %lld %%",
+          "check.f90", 42, -17, 4294967296LL, 0, 9),
+      "check.f90\\(42\\): sizes -17, 4294967296, 0, 9 %");
+}
+
+TEST_F(TestProgramEnd, CrashValuesWithoutValuesTest) {
+  EXPECT_DEATH(RTNAME(ReportFatalUserErrorValues)(
+                   "bad argument: 100%%", "check.f90", 7, 0, 0, 0, 0),
+      "check.f90\\(7\\): bad argument: 100%");
+}
+
+TEST_F(TestProgramEnd, CrashValueArrayTest) {
+  const long long values[]{std::numeric_limits<long long>::min(),
+      std::numeric_limits<long long>::max(), 0, -1, 4294967296LL, 17};
+  EXPECT_DEATH(
+      RTNAME(ReportFatalUserErrorValueArray)(
+          "%lld %lld %lld %lld %lld %%%lld %%lld", "check.f90", 43, 6, values),
+      "check.f90\\(43\\): -9223372036854775808 9223372036854775807 0 -1 "
+      "4294967296 %17 %lld");
+}
+
+TEST_F(TestProgramEnd, CrashValueArrayWithoutValuesTest) {
+  EXPECT_DEATH(RTNAME(ReportFatalUserErrorValueArray)(
+                   "bad argument: 100%%", "check.f90", 7, 0, nullptr),
+      "check.f90\\(7\\): bad argument: 100%");
+  EXPECT_DEATH(
+      RTNAME(ReportFatalUserErrorValueArray)("", "check.f90", 7, 0, nullptr),
+      "check.f90\\(7\\): ");
+}
+
+TEST_F(TestProgramEnd, CrashValueArrayInvalidFormatTest) {
+  for (const char *message : {"%", "%l", "%ll", "%d", "%n", "%1$lld"}) {
+    EXPECT_DEATH(RTNAME(ReportFatalUserErrorValueArray)(
+                     message, "check.f90", 7, 0, nullptr),
+        "Invalid fatal error message format");
+  }
+}
+
+TEST_F(TestProgramEnd, CrashValueArrayCountMismatchTest) {
+  const long long values[]{1, 2};
+  EXPECT_DEATH(RTNAME(ReportFatalUserErrorValueArray)(
+                   "%lld %lld", "check.f90", 7, 1, values),
+      "Fatal error message value count mismatch");
+  EXPECT_DEATH(
+      RTNAME(ReportFatalUserErrorValueArray)("%lld", "check.f90", 7, 2, values),
+      "Fatal error message value count mismatch");
+  EXPECT_DEATH(RTNAME(ReportFatalUserErrorValueArray)(
+                   "%lld", "check.f90", 7, 0, nullptr),
+      "Fatal error message value count mismatch");
+  EXPECT_DEATH(RTNAME(ReportFatalUserErrorValueArray)(
+                   "%lld", "check.f90", 7, 1, nullptr),
+      "RUNTIME_CHECK");
+}
+
+TEST_F(TestProgramEnd, CrashValueArraySizeOverflowTest) {
+  const long long value{0};
+  EXPECT_DEATH(RTNAME(ReportFatalUserErrorValueArray)("%lld", "check.f90", 7,
+                   std::numeric_limits<std::size_t>::max(), &value),
+      "Fatal error message size overflow");
+}
----------------
jeanPerier wrote:

Updated the test to expect a count mismatch for both SIZE_MAX and SIZE_MAX / 64.

https://github.com/llvm/llvm-project/pull/231241


More information about the flang-commits mailing list