Skip to content
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

Make clang report invalid target versions. #75373

Merged
merged 36 commits into from
Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from 35 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
74f256d
Make clang report garbage target versions.
ZijunZhaoCCK Dec 13, 2023
0d159b2
rephrase
ZijunZhaoCCK Dec 13, 2023
835a605
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Dec 14, 2023
b2dda9c
Make clang report garbage target versions.
ZijunZhaoCCK Dec 13, 2023
8317657
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Dec 14, 2023
8519713
Make clang report garbage target versions.
ZijunZhaoCCK Dec 13, 2023
48004fe
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Dec 14, 2023
a726fe2
Make clang report garbage target versions.
ZijunZhaoCCK Dec 13, 2023
bef0de6
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Dec 14, 2023
8ed23ef
Make clang report garbage target versions.
ZijunZhaoCCK Dec 13, 2023
9f5c7b3
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Dec 14, 2023
1827977
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Dec 15, 2023
6e62da1
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Dec 15, 2023
01128aa
Make clang report garbage target versions.
ZijunZhaoCCK Dec 13, 2023
a6d5ffa
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Dec 20, 2023
1fdd390
Make clang report garbage target versions.
ZijunZhaoCCK Dec 13, 2023
2c0435b
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Dec 20, 2023
752df27
Make clang report invalid target versions.
ZijunZhaoCCK Dec 13, 2023
1136d39
Make clang report invalid target versions.
ZijunZhaoCCK Dec 13, 2023
c2e346f
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 2, 2024
9d1abab
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 2, 2024
e889780
reformat
ZijunZhaoCCK Jan 2, 2024
01f4d21
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 2, 2024
e0af303
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 2, 2024
7493294
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 4, 2024
bc0ea97
1. update tests 2. update getEnvironmentVersion()
ZijunZhaoCCK Jan 4, 2024
917c7ea
add newline
ZijunZhaoCCK Jan 4, 2024
d7ffb28
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 4, 2024
d015606
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 4, 2024
fb1673e
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 5, 2024
951e753
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 8, 2024
ff42931
update tests
ZijunZhaoCCK Jan 8, 2024
2bf1fcd
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 9, 2024
f1efb18
update tests
ZijunZhaoCCK Jan 8, 2024
c98888d
Merge branch 'llvm:main' into clang-warning
ZijunZhaoCCK Jan 9, 2024
5d89e7f
update error msg and tests
ZijunZhaoCCK Jan 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions clang/include/clang/Basic/DiagnosticDriverKinds.td
Original file line number Diff line number Diff line change
Expand Up @@ -786,4 +786,7 @@ def warn_android_unversioned_fallback : Warning<
" directories will not be used in Clang 19. Provide a versioned directory"
" for the target version or lower instead.">,
InGroup<DiagGroup<"android-unversioned-fallback">>;

def err_android_version_invalid : Error<
ZijunZhaoCCK marked this conversation as resolved.
Show resolved Hide resolved
"Version %0 in triple %1 is invalid.">;
ZijunZhaoCCK marked this conversation as resolved.
Show resolved Hide resolved
}
11 changes: 11 additions & 0 deletions clang/lib/Driver/Driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1430,6 +1430,17 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
const ToolChain &TC = getToolChain(
*UArgs, computeTargetTriple(*this, TargetTriple, *UArgs));

if (TC.getTriple().isAndroid()) {
llvm::Triple Triple = TC.getTriple();
StringRef TripleVersionName = Triple.getEnvironmentVersionString();

if (Triple.getEnvironmentVersion().empty() && TripleVersionName != "") {
Diags.Report(diag::err_android_version_invalid)
<< TripleVersionName << TC.getTripleString();
ContainsError = true;
}
}

// Report warning when arm64EC option is overridden by specified target
if ((TC.getTriple().getArch() != llvm::Triple::aarch64 ||
TC.getTriple().getSubArch() != llvm::Triple::AArch64SubArch_arm64ec) &&
Expand Down
6 changes: 3 additions & 3 deletions clang/test/CodeGen/aarch64-fix-cortex-a53-835769.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
// RUN: %clang -O3 -target aarch64-linux-eabi -mno-fix-cortex-a53-835769 %s -S -o- 2>&1 \
// RUN: | FileCheck --check-prefix=CHECK-NO --check-prefix=CHECK %s

// RUN: %clang -O3 -target aarch64-android-eabi %s -S -o- \
// RUN: %clang -O3 --target=aarch64-linux-androideabi %s -S -o- \
// RUN: | FileCheck --check-prefix=CHECK-YES --check-prefix=CHECK %s
// RUN: %clang -O3 -target aarch64-linux-ohos %s -S -o- \
// RUN: | FileCheck --check-prefix=CHECK-YES --check-prefix=CHECK %s
// RUN: %clang -O3 -target aarch64-android-eabi -mfix-cortex-a53-835769 %s -S -o- \
// RUN: %clang -O3 --target=aarch64-linux-androideabi -mfix-cortex-a53-835769 %s -S -o- \
// RUN: | FileCheck --check-prefix=CHECK-YES --check-prefix=CHECK %s
// RUN: %clang -O3 -target aarch64-android-eabi -mno-fix-cortex-a53-835769 %s -S -o- \
// RUN: %clang -O3 --target=aarch64-linux-androideabi -mno-fix-cortex-a53-835769 %s -S -o- \
// RUN: | FileCheck --check-prefix=CHECK-NO --check-prefix=CHECK %s

// REQUIRES: aarch64-registered-target
Expand Down
2 changes: 1 addition & 1 deletion clang/test/Driver/aarch64-fix-cortex-a53-835769.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// RUN: %clang --target=aarch64-linux-eabi -mno-fix-cortex-a53-835769 %s -### 2>&1 \
// RUN: | FileCheck --check-prefix=CHECK-NO %s

// RUN: %clang --target=aarch64-android-eabi %s -### 2>&1 \
// RUN: %clang --target=aarch64-linux-androideabi %s -### 2>&1 \
// RUN: | FileCheck --check-prefix=CHECK-YES %s

// RUN: %clang --target=aarch64-fuchsia %s -### 2>&1 \
Expand Down
16 changes: 16 additions & 0 deletions clang/test/Driver/android-version.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Check that we get the right Android version.

// RUN: not %clang --target=aarch64-linux-androidS -c %s -### 2>&1 | \
// RUN: FileCheck --check-prefix=CHECK-ERROR %s

// CHECK-ERROR: error: Version S in triple aarch64-unknown-linux-androidS is invalid.

// RUN: not %clang --target=armv7-linux-androideabiS -c %s -### 2>&1 | \
// RUN: FileCheck --check-prefix=CHECK-ERROR1 %s

// CHECK-ERROR1: error: Version S in triple armv7-unknown-linux-androidS is invalid.

// RUN: %clang --target=aarch64-linux-android31 -c %s -### 2>&1 | \
// RUN: FileCheck --check-prefix=CHECK-TARGET %s

// CHECK-TARGET: "aarch64-unknown-linux-android31"
6 changes: 6 additions & 0 deletions llvm/include/llvm/TargetParser/Triple.h
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,12 @@ class Triple {
/// string (separated by a '-' if the environment component is present).
StringRef getOSAndEnvironmentName() const;

/// Get the version component of the environment component as a single
/// string (the version after the environment).
///
/// For example, "fooos1.2.3" would return "1.2.3".
StringRef getEnvironmentVersionString() const;

/// @}
/// @name Convenience Predicates
/// @{
Expand Down
7 changes: 5 additions & 2 deletions llvm/lib/TargetParser/Triple.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1206,11 +1206,14 @@ static VersionTuple parseVersionFromName(StringRef Name) {
}

VersionTuple Triple::getEnvironmentVersion() const {
return parseVersionFromName(getEnvironmentVersionString());
}

StringRef Triple::getEnvironmentVersionString() const {
StringRef EnvironmentName = getEnvironmentName();
StringRef EnvironmentTypeName = getEnvironmentTypeName(getEnvironment());
EnvironmentName.consume_front(EnvironmentTypeName);

return parseVersionFromName(EnvironmentName);
return EnvironmentName;
}

VersionTuple Triple::getOSVersion() const {
Expand Down