-
Notifications
You must be signed in to change notification settings - Fork 14.5k
[clang][Driver][AVR] Reject c/c++ compilation for avr1 devices #111798
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-clang Author: Ben Shi (benshi001) Changesavr-gcc also rejects since these devices has no SRAM. Full diff: https://github.com/llvm/llvm-project/pull/111798.diff 2 Files Affected:
diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index bb5c0e6db9978e..83a756b07056ca 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -400,6 +400,14 @@ void AVRToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
void AVRToolChain::addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
Action::OffloadKind DeviceOffloadKind) const {
+ // Reject C/C++ compilation for avr1 devices.
+ const Driver &D = getDriver();
+ std::string CPU = getCPUName(D, DriverArgs, getTriple());
+ std::optional<StringRef> FamilyName = GetMCUFamilyName(CPU);
+ if (CPU == "avr1" || (FamilyName && FamilyName->compare("avr1") == 0))
+ D.Diag(diag::err_drv_opt_unsupported_input_type) << "avr1"
+ << "c/c++";
+
// By default, use `.ctors` (not `.init_array`), as required by libgcc, which
// runs constructors/destructors on AVR.
if (!DriverArgs.hasFlag(options::OPT_fuse_init_array,
diff --git a/clang/test/Driver/avr-mmcu.c b/clang/test/Driver/avr-mmcu.c
index 6c13ab5b68d3b9..e354917ae9ab1d 100644
--- a/clang/test/Driver/avr-mmcu.c
+++ b/clang/test/Driver/avr-mmcu.c
@@ -1,8 +1,7 @@
// A test for the propagation of the -mmcu option to -cc1 and -cc1as
-// RUN: %clang -### --target=avr -mmcu=attiny11 -save-temps %s 2>&1 | FileCheck -check-prefix=CHECK0 %s
-// CHECK0: "-cc1" {{.*}} "-target-cpu" "attiny11"
-// CHECK0: "-cc1as" {{.*}} "-target-cpu" "attiny11"
+// RUN: not %clang -### --target=avr -mmcu=attiny11 %s 2>&1 | FileCheck -check-prefix=CHECK0 %s
+// CHECK0: error: 'avr1' invalid for input of type c/c++
// RUN: %clang -### --target=avr -mmcu=at90s2313 -save-temps %s 2>&1 | FileCheck -check-prefix=CHECK1 %s
// CHECK1: "-cc1" {{.*}} "-target-cpu" "at90s2313"
|
@llvm/pr-subscribers-clang-driver Author: Ben Shi (benshi001) Changesavr-gcc also rejects since these devices has no SRAM. Full diff: https://github.com/llvm/llvm-project/pull/111798.diff 2 Files Affected:
diff --git a/clang/lib/Driver/ToolChains/AVR.cpp b/clang/lib/Driver/ToolChains/AVR.cpp
index bb5c0e6db9978e..83a756b07056ca 100644
--- a/clang/lib/Driver/ToolChains/AVR.cpp
+++ b/clang/lib/Driver/ToolChains/AVR.cpp
@@ -400,6 +400,14 @@ void AVRToolChain::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
void AVRToolChain::addClangTargetOptions(
const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args,
Action::OffloadKind DeviceOffloadKind) const {
+ // Reject C/C++ compilation for avr1 devices.
+ const Driver &D = getDriver();
+ std::string CPU = getCPUName(D, DriverArgs, getTriple());
+ std::optional<StringRef> FamilyName = GetMCUFamilyName(CPU);
+ if (CPU == "avr1" || (FamilyName && FamilyName->compare("avr1") == 0))
+ D.Diag(diag::err_drv_opt_unsupported_input_type) << "avr1"
+ << "c/c++";
+
// By default, use `.ctors` (not `.init_array`), as required by libgcc, which
// runs constructors/destructors on AVR.
if (!DriverArgs.hasFlag(options::OPT_fuse_init_array,
diff --git a/clang/test/Driver/avr-mmcu.c b/clang/test/Driver/avr-mmcu.c
index 6c13ab5b68d3b9..e354917ae9ab1d 100644
--- a/clang/test/Driver/avr-mmcu.c
+++ b/clang/test/Driver/avr-mmcu.c
@@ -1,8 +1,7 @@
// A test for the propagation of the -mmcu option to -cc1 and -cc1as
-// RUN: %clang -### --target=avr -mmcu=attiny11 -save-temps %s 2>&1 | FileCheck -check-prefix=CHECK0 %s
-// CHECK0: "-cc1" {{.*}} "-target-cpu" "attiny11"
-// CHECK0: "-cc1as" {{.*}} "-target-cpu" "attiny11"
+// RUN: not %clang -### --target=avr -mmcu=attiny11 %s 2>&1 | FileCheck -check-prefix=CHECK0 %s
+// CHECK0: error: 'avr1' invalid for input of type c/c++
// RUN: %clang -### --target=avr -mmcu=at90s2313 -save-temps %s 2>&1 | FileCheck -check-prefix=CHECK1 %s
// CHECK1: "-cc1" {{.*}} "-target-cpu" "at90s2313"
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for getting to this I had forgotten I raised that issue.
You should move your commit's message into the PR description, as the PR description is what's used for the final commit when we merge this.
And the CI test failure is this, the reporting is not great because we run check- targets one after another. This test was already failing on main. If it fails again download the logs and search for "Failed<2-3 spaces>" and you'll see any results summaries where something failed. I plan to work on combining the results so this isn't a problem in the future. |
2592828
to
c50c440
Compare
Thanks. I have update my PR description according to my commit message. |
Thanks. I am also thinking the HIP failure is not related to my clang-driver-AVR work. |
Please add a release note in https://clang.llvm.org/docs/ReleaseNotes.html#avr-support ( Otherwise, this looks good to me. |
avr-gcc also rejects since these devices has no SRAM. Fixes llvm#96881
The note is added. Thanks! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM with the wording fixed.
…111798) avr-gcc also rejects since these devices has no SRAM. Fixes llvm#96881
avr-gcc also rejects since these devices has no SRAM.
Fixes #96881