[flang-commits] [flang] [flang][driver] Improve diagnostic for assembly inputs (PR #174316)
Soumik Kumar Basu via flang-commits
flang-commits at lists.llvm.org
Sat Jan 10 01:02:04 PST 2026
https://github.com/soumikiith updated https://github.com/llvm/llvm-project/pull/174316
>From 191887e8c6abaf7a1d0265f16343036d2f802524 Mon Sep 17 00:00:00 2001
From: soumikiith <cs21resch11004 at iith.ac.in>
Date: Sun, 4 Jan 2026 12:54:33 +0530
Subject: [PATCH 1/3] [flang][driver] Improve diagnostic for assembly inputs
The flang driver currently attempts to invoke the integrated assembler
when given assembly inputs, resulting in an opaque
"unknown integrated tool '-cc1as'" error.
Detect assembly inputs early in the driver and emit a clear diagnostic
explaining that flang does not support assembling, suggesting the use
of clang instead and documenting the required runtime libraries.
---
flang/test/Driver/asm-error-fix.s | 9 +++++++++
flang/tools/flang-driver/driver.cpp | 21 +++++++++++++++++++++
2 files changed, 30 insertions(+)
create mode 100644 flang/test/Driver/asm-error-fix.s
diff --git a/flang/test/Driver/asm-error-fix.s b/flang/test/Driver/asm-error-fix.s
new file mode 100644
index 0000000000000..d9d5d444bd698
--- /dev/null
+++ b/flang/test/Driver/asm-error-fix.s
@@ -0,0 +1,9 @@
+! Test that flang rejects assembly files as input
+
+! RUN: not %flang -c %s 2>&1 | FileCheck %s
+
+! CHECK: error: flang does not accept assembly code
+
+.globl foo
+foo:
+ ret
diff --git a/flang/tools/flang-driver/driver.cpp b/flang/tools/flang-driver/driver.cpp
index 0840255a739f3..136922cceff0d 100644
--- a/flang/tools/flang-driver/driver.cpp
+++ b/flang/tools/flang-driver/driver.cpp
@@ -147,6 +147,27 @@ int main(int argc, const char **argv) {
llvm::SmallVector<std::pair<int, const clang::driver::Command *>, 4>
failingCommands;
+ for (const auto &job : c->getJobs()) {
+ const auto *cmd = llvm::dyn_cast<clang::driver::Command>(&job);
+ if (!cmd)
+ continue;
+
+ for (const clang::driver::InputInfo &inputInfo : cmd->getInputInfos()) {
+ clang::driver::types::ID type = inputInfo.getType();
+
+ if (type == clang::driver::types::TY_Asm ||
+ type == clang::driver::types::TY_PP_Asm) {
+
+ diags.Report(diags.getCustomDiagID(
+ clang::DiagnosticsEngine::Error,
+ "flang does not accept assembly code"))
+ << inputInfo.getAsString();
+
+ return 1;
+ }
+ }
+ }
+
// Set the environment variable, FLANG_COMPILER_OPTIONS_STRING, to contain all
// the compiler options. This is intended for the frontend driver,
// flang -fc1, to enable the implementation of the COMPILER_OPTIONS
>From bb495bd9550e1d81ca6b2aa0ca9c714422b39ff5 Mon Sep 17 00:00:00 2001
From: soumikiith <cs21resch11004 at iith.ac.in>
Date: Sat, 10 Jan 2026 14:29:20 +0530
Subject: [PATCH 2/3] [flang][driver] Improve diagnostic for assembly input
---
flang/tools/flang-driver/driver.cpp | 36 ++++++++++++++++-------------
1 file changed, 20 insertions(+), 16 deletions(-)
diff --git a/flang/tools/flang-driver/driver.cpp b/flang/tools/flang-driver/driver.cpp
index 136922cceff0d..c0cb2842e5c34 100644
--- a/flang/tools/flang-driver/driver.cpp
+++ b/flang/tools/flang-driver/driver.cpp
@@ -147,26 +147,30 @@ int main(int argc, const char **argv) {
llvm::SmallVector<std::pair<int, const clang::driver::Command *>, 4>
failingCommands;
- for (const auto &job : c->getJobs()) {
- const auto *cmd = llvm::dyn_cast<clang::driver::Command>(&job);
- if (!cmd)
+// Reject assembly files as flang does not support assembling
+if (c) {
+ for (const llvm::opt::Arg *arg : c->getInputArgs()) {
+ if (arg->getOption().getKind() != llvm::opt::Option::InputClass)
continue;
+
+ llvm::StringRef filename(arg->getValue());
+
+ // Determine file type from extension
+ clang::driver::types::ID type =
+ clang::driver::types::lookupTypeForExtension(
+ filename.rsplit('.').second);
+
+ if (type == clang::driver::types::TY_Asm ||
+ type == clang::driver::types::TY_PP_Asm) {
- for (const clang::driver::InputInfo &inputInfo : cmd->getInputInfos()) {
- clang::driver::types::ID type = inputInfo.getType();
-
- if (type == clang::driver::types::TY_Asm ||
- type == clang::driver::types::TY_PP_Asm) {
-
- diags.Report(diags.getCustomDiagID(
- clang::DiagnosticsEngine::Error,
- "flang does not accept assembly code"))
- << inputInfo.getAsString();
-
- return 1;
- }
+ diags.Report(diags.getCustomDiagID(
+ clang::DiagnosticsEngine::Error,
+ "flang does not support assembly files as input: '%0'"))
+ << filename;
+ return 1;
}
}
+}
// Set the environment variable, FLANG_COMPILER_OPTIONS_STRING, to contain all
// the compiler options. This is intended for the frontend driver,
>From 5a51d14851abd9571c51ad2a8a3d10b4ea117fde Mon Sep 17 00:00:00 2001
From: soumikiith <cs21resch11004 at iith.ac.in>
Date: Sat, 10 Jan 2026 14:31:38 +0530
Subject: [PATCH 3/3] [flang][driver] Improve diagnostic for assembly input
---
flang/tools/flang-driver/driver.cpp | 44 ++++++++++++++---------------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/flang/tools/flang-driver/driver.cpp b/flang/tools/flang-driver/driver.cpp
index c0cb2842e5c34..305eb106fb8dd 100644
--- a/flang/tools/flang-driver/driver.cpp
+++ b/flang/tools/flang-driver/driver.cpp
@@ -147,30 +147,30 @@ int main(int argc, const char **argv) {
llvm::SmallVector<std::pair<int, const clang::driver::Command *>, 4>
failingCommands;
-// Reject assembly files as flang does not support assembling
-if (c) {
- for (const llvm::opt::Arg *arg : c->getInputArgs()) {
- if (arg->getOption().getKind() != llvm::opt::Option::InputClass)
- continue;
-
- llvm::StringRef filename(arg->getValue());
-
- // Determine file type from extension
- clang::driver::types::ID type =
- clang::driver::types::lookupTypeForExtension(
- filename.rsplit('.').second);
-
- if (type == clang::driver::types::TY_Asm ||
- type == clang::driver::types::TY_PP_Asm) {
-
- diags.Report(diags.getCustomDiagID(
- clang::DiagnosticsEngine::Error,
- "flang does not support assembly files as input: '%0'"))
- << filename;
- return 1;
+ // Reject assembly files as flang does not support assembling
+ if (c) {
+ for (const llvm::opt::Arg *arg : c->getInputArgs()) {
+ if (arg->getOption().getKind() != llvm::opt::Option::InputClass)
+ continue;
+
+ llvm::StringRef filename(arg->getValue());
+
+ // Determine file type from extension
+ clang::driver::types::ID type =
+ clang::driver::types::lookupTypeForExtension(
+ filename.rsplit('.').second);
+
+ if (type == clang::driver::types::TY_Asm ||
+ type == clang::driver::types::TY_PP_Asm) {
+
+ diags.Report(diags.getCustomDiagID(
+ clang::DiagnosticsEngine::Error,
+ "flang does not support assembly files as input: '%0'"))
+ << filename;
+ return 1;
+ }
}
}
-}
// Set the environment variable, FLANG_COMPILER_OPTIONS_STRING, to contain all
// the compiler options. This is intended for the frontend driver,
More information about the flang-commits
mailing list