Author: Fangrui Song Date: 2023-08-03T19:04:53-07:00 New Revision: 5fd5f8027fa196913138a34082a933abd5be0b4e
URL: https://github.com/llvm/llvm-project/commit/5fd5f8027fa196913138a34082a933abd5be0b4e DIFF: https://github.com/llvm/llvm-project/commit/5fd5f8027fa196913138a34082a933abd5be0b4e.diff LOG: [Driver] Mark m_x86_Features_Group options as TargetSpecific so that they lead to an error when compiled for non-x86 targets. Follow-up to D151590. ``` % aarch64-linux-gnu-gcc -c -mavx a.c aarch64-linux-gnu-gcc: error: unrecognized command-line option ‘-mavx’ % clang --target=aarch64-unknown-linux-gnu -c -mavx a.c # without this patch clang: warning: argument unused during compilation: '-mavx' [-Wunused-command-line-argument] ... % clang --target=aarch64-unknown-linux-gnu -c -mavx a.c # with this patch clang: error: unsupported option '-mavx' for target 'aarch64-unknown-linux-gnu' ``` As a workaround for https://github.com/llvm/llvm-project/issues/63270, we don't report an error for -msse4.2. Reviewed By: pengfei, skan Differential Revision: https://reviews.llvm.org/D156962 Added: Modified: clang/include/clang/Driver/Options.td clang/test/Driver/x86-target-features.c Removed: ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ebf7e0c9f39979..f752a191e5318f 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -4890,6 +4890,7 @@ foreach i = {0-7} in } // let Flags = [TargetSpecific] // X86 feature flags +let Flags = [TargetSpecific] in { def mx87 : Flag<["-"], "mx87">, Group<m_x86_Features_Group>; def mno_x87 : Flag<["-"], "mno-x87">, Group<m_x86_Features_Group>; def m80387 : Flag<["-"], "m80387">, Alias<mx87>; @@ -4923,7 +4924,11 @@ def mssse3 : Flag<["-"], "mssse3">, Group<m_x86_Features_Group>; def mno_ssse3 : Flag<["-"], "mno-ssse3">, Group<m_x86_Features_Group>; def msse4_1 : Flag<["-"], "msse4.1">, Group<m_x86_Features_Group>; def mno_sse4_1 : Flag<["-"], "mno-sse4.1">, Group<m_x86_Features_Group>; +} // let Flags = [TargetSpecific] +// TODO: Make -msse4.2 TargetSpecific after +// https://github.com/llvm/llvm-project/issues/63270 is fixed. def msse4_2 : Flag<["-"], "msse4.2">, Group<m_x86_Features_Group>; +let Flags = [TargetSpecific] in { def mno_sse4_2 : Flag<["-"], "mno-sse4.2">, Group<m_x86_Features_Group>; def msse4 : Flag<["-"], "msse4">, Alias<msse4_2>; // -mno-sse4 turns off sse4.1 which has the effect of turning off everything @@ -5104,6 +5109,7 @@ def mretpoline_external_thunk : Flag<["-"], "mretpoline-external-thunk">, Group< def mno_retpoline_external_thunk : Flag<["-"], "mno-retpoline-external-thunk">, Group<m_x86_Features_Group>; def mvzeroupper : Flag<["-"], "mvzeroupper">, Group<m_x86_Features_Group>; def mno_vzeroupper : Flag<["-"], "mno-vzeroupper">, Group<m_x86_Features_Group>; +} // let Flags = [TargetSpecific] // These are legacy user-facing driver-level option spellings. They are always // aliases for options that are spelled using the more common Unix / GNU flag diff --git a/clang/test/Driver/x86-target-features.c b/clang/test/Driver/x86-target-features.c index a2f537d55ef66b..385176d2923e4e 100644 --- a/clang/test/Driver/x86-target-features.c +++ b/clang/test/Driver/x86-target-features.c @@ -374,6 +374,13 @@ // CRC32: "-target-feature" "+crc32" // NO-CRC32: "-target-feature" "-crc32" +// RUN: not %clang -### --target=aarch64 -mcrc32 -msse4.1 -msse4.2 -mno-sgx %s 2>&1 | FileCheck --check-prefix=NONX86 %s +// NONX86: error: unsupported option '-mcrc32' for target 'aarch64' +// NONX86-NEXT: error: unsupported option '-msse4.1' for target 'aarch64' +/// TODO: This warning is a workaround for https://github.com/llvm/llvm-project/issues/63270 +// NONX86-NEXT: warning: argument unused during compilation: '-msse4.2' [-Wunused-command-line-argument] +// NONX86-NEXT: error: unsupported option '-mno-sgx' for target 'aarch64' + // RUN: %clang --target=i386 -march=i386 -mharden-sls=return %s -### -o %t.o 2>&1 | FileCheck -check-prefixes=SLS-RET,NO-SLS %s // RUN: %clang --target=i386 -march=i386 -mharden-sls=indirect-jmp %s -### -o %t.o 2>&1 | FileCheck -check-prefixes=SLS-IJMP,NO-SLS %s // RUN: %clang --target=i386 -march=i386 -mharden-sls=none -mharden-sls=all %s -### -o %t.o 2>&1 | FileCheck -check-prefixes=SLS-IJMP,SLS-RET %s _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits