r369147 - [ARM] push LR before __gnu_mcount_nc
Author: jcai19 Date: Fri Aug 16 13:21:08 2019 New Revision: 369147 URL: http://llvm.org/viewvc/llvm-project?rev=369147&view=rev Log: [ARM] push LR before __gnu_mcount_nc Push LR register before calling __gnu_mcount_nc as it expects the value of LR register to be the top value of the stack on ARM32. Differential Revision: https://reviews.llvm.org/D65019 Modified: cfe/trunk/lib/Basic/Targets/ARM.cpp Modified: cfe/trunk/lib/Basic/Targets/ARM.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/ARM.cpp?rev=369147&r1=369146&r2=369147&view=diff == --- cfe/trunk/lib/Basic/Targets/ARM.cpp (original) +++ cfe/trunk/lib/Basic/Targets/ARM.cpp Fri Aug 16 13:21:08 2019 @@ -322,7 +322,7 @@ ARMTargetInfo::ARMTargetInfo(const llvm: if (Triple.getOS() == llvm::Triple::Linux || Triple.getOS() == llvm::Triple::UnknownOS) this->MCountName = Opts.EABIVersion == llvm::EABI::GNU - ? "\01__gnu_mcount_nc" + ? "llvm.arm.gnu.eabi.mcount" : "\01mcount"; SoftFloatABI = llvm::is_contained(Opts.FeaturesAsWritten, "+soft-float-abi"); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r369149 - Revert "[ARM] push LR before __gnu_mcount_nc"
Author: jcai19 Date: Fri Aug 16 13:40:21 2019 New Revision: 369149 URL: http://llvm.org/viewvc/llvm-project?rev=369149&view=rev Log: Revert "[ARM] push LR before __gnu_mcount_nc" This reverts commit f4cf3b959333f62b7a7b2d7771f7010c9d8da388. Modified: cfe/trunk/lib/Basic/Targets/ARM.cpp Modified: cfe/trunk/lib/Basic/Targets/ARM.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/ARM.cpp?rev=369149&r1=369148&r2=369149&view=diff == --- cfe/trunk/lib/Basic/Targets/ARM.cpp (original) +++ cfe/trunk/lib/Basic/Targets/ARM.cpp Fri Aug 16 13:40:21 2019 @@ -322,7 +322,7 @@ ARMTargetInfo::ARMTargetInfo(const llvm: if (Triple.getOS() == llvm::Triple::Linux || Triple.getOS() == llvm::Triple::UnknownOS) this->MCountName = Opts.EABIVersion == llvm::EABI::GNU - ? "llvm.arm.gnu.eabi.mcount" + ? "\01__gnu_mcount_nc" : "\01mcount"; SoftFloatABI = llvm::is_contained(Opts.FeaturesAsWritten, "+soft-float-abi"); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r369173 - Reland "[ARM] push LR before __gnu_mcount_nc"
Author: jcai19 Date: Fri Aug 16 16:30:16 2019 New Revision: 369173 URL: http://llvm.org/viewvc/llvm-project?rev=369173&view=rev Log: Reland "[ARM] push LR before __gnu_mcount_nc" This relands r369147 with fixes to unit tests. https://reviews.llvm.org/D65019 Modified: cfe/trunk/lib/Basic/Targets/ARM.cpp cfe/trunk/test/Frontend/gnu-mcount.c Modified: cfe/trunk/lib/Basic/Targets/ARM.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/ARM.cpp?rev=369173&r1=369172&r2=369173&view=diff == --- cfe/trunk/lib/Basic/Targets/ARM.cpp (original) +++ cfe/trunk/lib/Basic/Targets/ARM.cpp Fri Aug 16 16:30:16 2019 @@ -322,7 +322,7 @@ ARMTargetInfo::ARMTargetInfo(const llvm: if (Triple.getOS() == llvm::Triple::Linux || Triple.getOS() == llvm::Triple::UnknownOS) this->MCountName = Opts.EABIVersion == llvm::EABI::GNU - ? "\01__gnu_mcount_nc" + ? "llvm.arm.gnu.eabi.mcount" : "\01mcount"; SoftFloatABI = llvm::is_contained(Opts.FeaturesAsWritten, "+soft-float-abi"); Modified: cfe/trunk/test/Frontend/gnu-mcount.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/gnu-mcount.c?rev=369173&r1=369172&r2=369173&view=diff == --- cfe/trunk/test/Frontend/gnu-mcount.c (original) +++ cfe/trunk/test/Frontend/gnu-mcount.c Fri Aug 16 16:30:16 2019 @@ -66,7 +66,7 @@ int f() { // CHECK-ARM64-EABI-OPENBSD: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="__mcount"{{.*}} } // CHECK-ARM64-EABI-OPENBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } // CHECK-ARM-EABI-MEABI-GNU-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } -// CHECK-ARM-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="llvm.arm.gnu.eabi.mcount"{{.*}} } // CHECK-ARM-EABI-RTEMS: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } // CHECK-ARM-EABI-RTEMS-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } // CHECK-ARM64-EABI-RTEMS: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] r365380 - A test commit following 'Obtaining Commit Access' (https://llvm.org/docs/DeveloperPolicy.html#obtaining-commit-access)
Author: jcai19 Date: Mon Jul 8 12:53:22 2019 New Revision: 365380 URL: http://llvm.org/viewvc/llvm-project?rev=365380&view=rev Log: A test commit following 'Obtaining Commit Access' (https://llvm.org/docs/DeveloperPolicy.html#obtaining-commit-access) Modified: clang-tools-extra/trunk/test/clang-tidy/bugprone-posix-return.cpp Modified: clang-tools-extra/trunk/test/clang-tidy/bugprone-posix-return.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/bugprone-posix-return.cpp?rev=365380&r1=365379&r2=365380&view=diff == --- clang-tools-extra/trunk/test/clang-tidy/bugprone-posix-return.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/bugprone-posix-return.cpp Mon Jul 8 12:53:22 2019 @@ -4,9 +4,9 @@ #define ZERO 0 #define NEGATIVE_ONE -1 +typedef int pid_t; typedef long off_t; typedef decltype(sizeof(int)) size_t; -typedef int pid_t; typedef struct __posix_spawn_file_actions* posix_spawn_file_actions_t; typedef struct __posix_spawnattr* posix_spawnattr_t; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] r372037 - [clang-tidy] add checks to bugprone-posix-return
Author: jcai19 Date: Mon Sep 16 14:43:56 2019 New Revision: 372037 URL: http://llvm.org/viewvc/llvm-project?rev=372037&view=rev Log: [clang-tidy] add checks to bugprone-posix-return This check now also checks if any calls to pthread_* functions expect negative return values. These functions return either 0 on success or an errno on failure, which is positive only. Modified: clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.cpp clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.h clang-tools-extra/trunk/docs/ReleaseNotes.rst clang-tools-extra/trunk/docs/clang-tidy/checks/bugprone-posix-return.rst clang-tools-extra/trunk/test/clang-tidy/bugprone-posix-return.cpp Modified: clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.cpp?rev=372037&r1=372036&r2=372037&view=diff == --- clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.cpp Mon Sep 16 14:43:56 2019 @@ -28,26 +28,31 @@ static StringRef getFunctionSpelling(con } void PosixReturnCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher(binaryOperator(hasOperatorName("<"), -hasLHS(callExpr(callee(functionDecl( -matchesName("^::posix_"), -unless(hasName("::posix_openpt")), -hasRHS(integerLiteral(equals(0 - .bind("ltzop"), - this); - Finder->addMatcher(binaryOperator(hasOperatorName(">="), -hasLHS(callExpr(callee(functionDecl( -matchesName("^::posix_"), -unless(hasName("::posix_openpt")), -hasRHS(integerLiteral(equals(0 - .bind("atop"), - this); + Finder->addMatcher( + binaryOperator( + hasOperatorName("<"), + hasLHS(callExpr(callee(functionDecl( + anyOf(matchesName("^::posix_"), matchesName("^::pthread_")), + unless(hasName("::posix_openpt")), + hasRHS(integerLiteral(equals(0 + .bind("ltzop"), + this); + Finder->addMatcher( + binaryOperator( + hasOperatorName(">="), + hasLHS(callExpr(callee(functionDecl( + anyOf(matchesName("^::posix_"), matchesName("^::pthread_")), + unless(hasName("::posix_openpt")), + hasRHS(integerLiteral(equals(0 + .bind("atop"), + this); Finder->addMatcher( binaryOperator( anyOf(hasOperatorName("=="), hasOperatorName("!="), hasOperatorName("<="), hasOperatorName("<")), hasLHS(callExpr(callee(functionDecl( - matchesName("^::posix_"), unless(hasName("::posix_openpt")), + anyOf(matchesName("^::posix_"), matchesName("^::pthread_")), + unless(hasName("::posix_openpt")), hasRHS(unaryOperator(hasOperatorName("-"), hasUnaryOperand(integerLiteral() .bind("binop"), Modified: clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.h?rev=372037&r1=372036&r2=372037&view=diff == --- clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.h (original) +++ clang-tools-extra/trunk/clang-tidy/bugprone/PosixReturnCheck.h Mon Sep 16 14:43:56 2019 @@ -1,4 +1,4 @@ -//===--- PosixReturnCheck.h - clang-tidy-*- C++ -*-===// +//===--- PosixReturnCheck.h - clang-tidy *- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. Modified: clang-tools-extra/trunk/docs/ReleaseNotes.rst URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/ReleaseNotes.rst?rev=372037&r1=372036&r2=372037&view=diff == --- clang-tools-extra/trunk/docs/ReleaseNotes.rst (original) +++ clang-tools-extra/trunk/docs/ReleaseNotes.rst Mon Sep 16 14:43:56 2019 @@ -91,6 +91,11 @@ Improvements to clang-tidy Finds historical use of ``unsigned`` to hold vregs and physregs and rewrites them to use ``Register`` +- Improved :doc:`bugprone-posix-return + ` check. + + Now also checks if any calls to ``pthread_*`` functions expect negative return + values. Improvements to include-fixer --
r374822 - Add support to -Wa,-W in clang
Author: jcai19 Date: Mon Oct 14 14:21:39 2019 New Revision: 374822 URL: http://llvm.org/viewvc/llvm-project?rev=374822&view=rev Log: Add support to -Wa,-W in clang Currently clang does not support -Wa,-W, which suppresses warning messages in GNU assembler. Add this option for gcc compatibility. https://bugs.llvm.org/show_bug.cgi?id=43651 Added: cfe/trunk/test/Driver/as-w-option.c Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=374822&r1=374821&r2=374822&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Mon Oct 14 14:21:39 2019 @@ -2140,7 +2140,7 @@ static void CollectArgsForIntegratedAsse CmdArgs.push_back("-msave-temp-labels"); } else if (Value == "--fatal-warnings") { CmdArgs.push_back("-massembler-fatal-warnings"); - } else if (Value == "--no-warn") { + } else if (Value == "--no-warn" || Value == "-W") { CmdArgs.push_back("-massembler-no-warn"); } else if (Value == "--noexecstack") { UseNoExecStack = true; Added: cfe/trunk/test/Driver/as-w-option.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/as-w-option.c?rev=374822&view=auto == --- cfe/trunk/test/Driver/as-w-option.c (added) +++ cfe/trunk/test/Driver/as-w-option.c Mon Oct 14 14:21:39 2019 @@ -0,0 +1,14 @@ +// RUN: %clang -### %s -c -o tmp.o -fno-integrated-as -Wa,-W 2>&1 | FileCheck -check-prefix=CHECK-NOIAS %s +// RUN: %clang -### %s -c -o tmp.o -integrated-as -Wa,-W 2>&1 | FileCheck -check-prefix=CHECK-IAS %s +// RUN: %clang %s -c -o %t.o -integrated-as -Wa,-W 2>&1 | FileCheck -allow-empty --check-prefix=CHECK-AS-NOWARN %s +// RUN: %clang %s -c -o %t.o -fno-integrated-as -Wa,-W 2>&1 | FileCheck -allow-empty --check-prefix=CHECK-AS-NOWARN %s +// RUN: not %clang %s -c -o %t.o -integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s +// RUN: not %clang %s -c -o %t.o -fno-integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s + +// CHECK-IAS: "-cc1" {{.*}} "-massembler-no-warn" +// CHECK-NOIAS: "-W" +// CHECK-AS-NOWARN-NOT: warning: +// CHECK-AS-FATAL-NOT: warning: +// CHECK-AS-FATAL: error + +__asm(".warning"); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r374833 - Revert "Add support to -Wa,-W in clang"
Author: jcai19 Date: Mon Oct 14 15:28:01 2019 New Revision: 374833 URL: http://llvm.org/viewvc/llvm-project?rev=374833&view=rev Log: Revert "Add support to -Wa,-W in clang" This reverts commit e72eeca43b9577be2aae55f7603febbf223a6ab3. Removed: cfe/trunk/test/Driver/as-w-option.c Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=374833&r1=374832&r2=374833&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Mon Oct 14 15:28:01 2019 @@ -2140,7 +2140,7 @@ static void CollectArgsForIntegratedAsse CmdArgs.push_back("-msave-temp-labels"); } else if (Value == "--fatal-warnings") { CmdArgs.push_back("-massembler-fatal-warnings"); - } else if (Value == "--no-warn" || Value == "-W") { + } else if (Value == "--no-warn") { CmdArgs.push_back("-massembler-no-warn"); } else if (Value == "--noexecstack") { UseNoExecStack = true; Removed: cfe/trunk/test/Driver/as-w-option.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/as-w-option.c?rev=374832&view=auto == --- cfe/trunk/test/Driver/as-w-option.c (original) +++ cfe/trunk/test/Driver/as-w-option.c (removed) @@ -1,14 +0,0 @@ -// RUN: %clang -### %s -c -o tmp.o -fno-integrated-as -Wa,-W 2>&1 | FileCheck -check-prefix=CHECK-NOIAS %s -// RUN: %clang -### %s -c -o tmp.o -integrated-as -Wa,-W 2>&1 | FileCheck -check-prefix=CHECK-IAS %s -// RUN: %clang %s -c -o %t.o -integrated-as -Wa,-W 2>&1 | FileCheck -allow-empty --check-prefix=CHECK-AS-NOWARN %s -// RUN: %clang %s -c -o %t.o -fno-integrated-as -Wa,-W 2>&1 | FileCheck -allow-empty --check-prefix=CHECK-AS-NOWARN %s -// RUN: not %clang %s -c -o %t.o -integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s -// RUN: not %clang %s -c -o %t.o -fno-integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s - -// CHECK-IAS: "-cc1" {{.*}} "-massembler-no-warn" -// CHECK-NOIAS: "-W" -// CHECK-AS-NOWARN-NOT: warning: -// CHECK-AS-FATAL-NOT: warning: -// CHECK-AS-FATAL: error - -__asm(".warning"); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r374834 - Add support to -Wa,-W in clang
Author: jcai19 Date: Mon Oct 14 15:28:03 2019 New Revision: 374834 URL: http://llvm.org/viewvc/llvm-project?rev=374834&view=rev Log: Add support to -Wa,-W in clang Summary: Currently clang does not support -Wa,-W, which suppresses warning messages in GNU assembler. Add this option for gcc compatibility. https://bugs.llvm.org/show_bug.cgi?id=43651. Reland with differential information. Reviewers: bcain Reviewed By: bcain Subscribers: george.burgess.iv, gbiv, llozano, manojgupta, nickdesaulniers, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D68884 Added: cfe/trunk/test/Driver/as-w-option.c Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=374834&r1=374833&r2=374834&view=diff == --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Mon Oct 14 15:28:03 2019 @@ -2140,7 +2140,7 @@ static void CollectArgsForIntegratedAsse CmdArgs.push_back("-msave-temp-labels"); } else if (Value == "--fatal-warnings") { CmdArgs.push_back("-massembler-fatal-warnings"); - } else if (Value == "--no-warn") { + } else if (Value == "--no-warn" || Value == "-W") { CmdArgs.push_back("-massembler-no-warn"); } else if (Value == "--noexecstack") { UseNoExecStack = true; Added: cfe/trunk/test/Driver/as-w-option.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/as-w-option.c?rev=374834&view=auto == --- cfe/trunk/test/Driver/as-w-option.c (added) +++ cfe/trunk/test/Driver/as-w-option.c Mon Oct 14 15:28:03 2019 @@ -0,0 +1,14 @@ +// RUN: %clang -### %s -c -o tmp.o -fno-integrated-as -Wa,-W 2>&1 | FileCheck -check-prefix=CHECK-NOIAS %s +// RUN: %clang -### %s -c -o tmp.o -integrated-as -Wa,-W 2>&1 | FileCheck -check-prefix=CHECK-IAS %s +// RUN: %clang %s -c -o %t.o -integrated-as -Wa,-W 2>&1 | FileCheck -allow-empty --check-prefix=CHECK-AS-NOWARN %s +// RUN: %clang %s -c -o %t.o -fno-integrated-as -Wa,-W 2>&1 | FileCheck -allow-empty --check-prefix=CHECK-AS-NOWARN %s +// RUN: not %clang %s -c -o %t.o -integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s +// RUN: not %clang %s -c -o %t.o -fno-integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s + +// CHECK-IAS: "-cc1" {{.*}} "-massembler-no-warn" +// CHECK-NOIAS: "-W" +// CHECK-AS-NOWARN-NOT: warning: +// CHECK-AS-FATAL-NOT: warning: +// CHECK-AS-FATAL: error + +__asm(".warning"); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r374837 - [clang] add requirements to -Wa,-W test cases.
Author: jcai19 Date: Mon Oct 14 15:51:12 2019 New Revision: 374837 URL: http://llvm.org/viewvc/llvm-project?rev=374837&view=rev Log: [clang] add requirements to -Wa,-W test cases. Include linux as a test requirement. Modified: cfe/trunk/test/Driver/as-w-option.c Modified: cfe/trunk/test/Driver/as-w-option.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/as-w-option.c?rev=374837&r1=374836&r2=374837&view=diff == --- cfe/trunk/test/Driver/as-w-option.c (original) +++ cfe/trunk/test/Driver/as-w-option.c Mon Oct 14 15:51:12 2019 @@ -5,6 +5,9 @@ // RUN: not %clang %s -c -o %t.o -integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s // RUN: not %clang %s -c -o %t.o -fno-integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s +// REQUIRES: clang-driver +// REQUIRES: linux + // CHECK-IAS: "-cc1" {{.*}} "-massembler-no-warn" // CHECK-NOIAS: "-W" // CHECK-AS-NOWARN-NOT: warning: ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r374932 - [clang] refactor -Wa,-W test cases.
Author: jcai19 Date: Tue Oct 15 11:17:08 2019 New Revision: 374932 URL: http://llvm.org/viewvc/llvm-project?rev=374932&view=rev Log: [clang] refactor -Wa,-W test cases. Remove REQUIRES and only keep the clang driver tests, since the assembler are already tested with -Wa,--no-warn. This way we could run the test on non-linux platforms and catch breaks on them. Modified: cfe/trunk/test/Driver/as-w-option.c Modified: cfe/trunk/test/Driver/as-w-option.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/as-w-option.c?rev=374932&r1=374931&r2=374932&view=diff == --- cfe/trunk/test/Driver/as-w-option.c (original) +++ cfe/trunk/test/Driver/as-w-option.c Tue Oct 15 11:17:08 2019 @@ -1,17 +1,7 @@ // RUN: %clang -### %s -c -o tmp.o -fno-integrated-as -Wa,-W 2>&1 | FileCheck -check-prefix=CHECK-NOIAS %s // RUN: %clang -### %s -c -o tmp.o -integrated-as -Wa,-W 2>&1 | FileCheck -check-prefix=CHECK-IAS %s -// RUN: %clang %s -c -o %t.o -integrated-as -Wa,-W 2>&1 | FileCheck -allow-empty --check-prefix=CHECK-AS-NOWARN %s -// RUN: %clang %s -c -o %t.o -fno-integrated-as -Wa,-W 2>&1 | FileCheck -allow-empty --check-prefix=CHECK-AS-NOWARN %s -// RUN: not %clang %s -c -o %t.o -integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s -// RUN: not %clang %s -c -o %t.o -fno-integrated-as -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s - -// REQUIRES: clang-driver -// REQUIRES: linux // CHECK-IAS: "-cc1" {{.*}} "-massembler-no-warn" // CHECK-NOIAS: "-W" -// CHECK-AS-NOWARN-NOT: warning: -// CHECK-AS-FATAL-NOT: warning: -// CHECK-AS-FATAL: error __asm(".warning"); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r374837 - [clang] add requirements to -Wa,-W test cases.
Hi David, Thanks for the follow up. I already discussed it with Nico over email and addressed his concerns on llvm-svn: 374932. I did not want to spam everyone with all our email exchanges so I did not include the list :). Thanks, Jian On Mon, Oct 28, 2019 at 3:37 PM David Blaikie wrote: > +1 to what Nico said/ping on this. > > Jian - could you see if these tests could be made portable as Nico's > suggested? > > On Mon, Oct 14, 2019 at 3:54 PM Nico Weber via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Hm, this means the test can't run on non-linux, so if someone breaks it >> on e.g. win they won't see the failure. Maybe add a >> --target=i386-unknown-linux instead? Then it might pass on all platforms. >> >> On Mon, Oct 14, 2019 at 6:48 PM Jian Cai via cfe-commits < >> cfe-commits@lists.llvm.org> wrote: >> >>> Author: jcai19 >>> Date: Mon Oct 14 15:51:12 2019 >>> New Revision: 374837 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=374837&view=rev >>> Log: >>> [clang] add requirements to -Wa,-W test cases. >>> >>> Include linux as a test requirement. >>> >>> Modified: >>> cfe/trunk/test/Driver/as-w-option.c >>> >>> Modified: cfe/trunk/test/Driver/as-w-option.c >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/as-w-option.c?rev=374837&r1=374836&r2=374837&view=diff >>> >>> == >>> --- cfe/trunk/test/Driver/as-w-option.c (original) >>> +++ cfe/trunk/test/Driver/as-w-option.c Mon Oct 14 15:51:12 2019 >>> @@ -5,6 +5,9 @@ >>> // RUN: not %clang %s -c -o %t.o -integrated-as -Wa,--fatal-warnings >>> 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s >>> // RUN: not %clang %s -c -o %t.o -fno-integrated-as >>> -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s >>> >>> +// REQUIRES: clang-driver >>> +// REQUIRES: linux >>> + >>> // CHECK-IAS: "-cc1" {{.*}} "-massembler-no-warn" >>> // CHECK-NOIAS: "-W" >>> // CHECK-AS-NOWARN-NOT: warning: >>> >>> >>> ___ >>> cfe-commits mailing list >>> cfe-commits@lists.llvm.org >>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>> >> ___ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: r374837 - [clang] add requirements to -Wa,-W test cases.
Sounds good! Will start doing it. On Mon, Oct 28, 2019 at 4:29 PM David Blaikie wrote: > Thanks for the details! Generally it's fine to have these discussions > on-list, or at least to include a summary reply so it's clear loose ends > were tied up. > > On Mon, Oct 28, 2019 at 4:26 PM Jian Cai wrote: > >> Hi David, >> >> Thanks for the follow up. I already discussed it with Nico over email and >> addressed his concerns on llvm-svn: 374932. I did not want to spam everyone >> with all our email exchanges so I did not include the list :). >> >> Thanks, >> Jian >> >> On Mon, Oct 28, 2019 at 3:37 PM David Blaikie wrote: >> >>> +1 to what Nico said/ping on this. >>> >>> Jian - could you see if these tests could be made portable as Nico's >>> suggested? >>> >>> On Mon, Oct 14, 2019 at 3:54 PM Nico Weber via cfe-commits < >>> cfe-commits@lists.llvm.org> wrote: >>> >>>> Hm, this means the test can't run on non-linux, so if someone breaks it >>>> on e.g. win they won't see the failure. Maybe add a >>>> --target=i386-unknown-linux instead? Then it might pass on all platforms. >>>> >>>> On Mon, Oct 14, 2019 at 6:48 PM Jian Cai via cfe-commits < >>>> cfe-commits@lists.llvm.org> wrote: >>>> >>>>> Author: jcai19 >>>>> Date: Mon Oct 14 15:51:12 2019 >>>>> New Revision: 374837 >>>>> >>>>> URL: http://llvm.org/viewvc/llvm-project?rev=374837&view=rev >>>>> Log: >>>>> [clang] add requirements to -Wa,-W test cases. >>>>> >>>>> Include linux as a test requirement. >>>>> >>>>> Modified: >>>>> cfe/trunk/test/Driver/as-w-option.c >>>>> >>>>> Modified: cfe/trunk/test/Driver/as-w-option.c >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/as-w-option.c?rev=374837&r1=374836&r2=374837&view=diff >>>>> >>>>> == >>>>> --- cfe/trunk/test/Driver/as-w-option.c (original) >>>>> +++ cfe/trunk/test/Driver/as-w-option.c Mon Oct 14 15:51:12 2019 >>>>> @@ -5,6 +5,9 @@ >>>>> // RUN: not %clang %s -c -o %t.o -integrated-as -Wa,--fatal-warnings >>>>> 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s >>>>> // RUN: not %clang %s -c -o %t.o -fno-integrated-as >>>>> -Wa,--fatal-warnings 2>&1 | FileCheck --check-prefix=CHECK-AS-FATAL %s >>>>> >>>>> +// REQUIRES: clang-driver >>>>> +// REQUIRES: linux >>>>> + >>>>> // CHECK-IAS: "-cc1" {{.*}} "-massembler-no-warn" >>>>> // CHECK-NOIAS: "-W" >>>>> // CHECK-AS-NOWARN-NOT: warning: >>>>> >>>>> >>>>> ___ >>>>> cfe-commits mailing list >>>>> cfe-commits@lists.llvm.org >>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>>> >>>> ___ >>>> cfe-commits mailing list >>>> cfe-commits@lists.llvm.org >>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>> >>> ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 4db2b70 - Add a flag to debug automatic variable initialization
Author: Jian Cai Date: 2020-06-08T12:30:56-07:00 New Revision: 4db2b70248686b8ac0667237768008762a66bb06 URL: https://github.com/llvm/llvm-project/commit/4db2b70248686b8ac0667237768008762a66bb06 DIFF: https://github.com/llvm/llvm-project/commit/4db2b70248686b8ac0667237768008762a66bb06.diff LOG: Add a flag to debug automatic variable initialization Summary: Add -ftrivial-auto-var-init-stop-after= to limit the number of times stack variables are initialized when -ftrivial-auto-var-init= is used to initialize stack variables to zero or a pattern. This flag can be used to bisect uninitialized uses of a stack variable exposed by automatic variable initialization, such as http://crrev.com/c/2020401. Reviewers: jfb, vitalybuka, kcc, glider, rsmith, rjmccall, pcc, eugenis, vlad.tsyrklevich Reviewed By: jfb Subscribers: phosek, hubert.reinterpretcast, srhines, MaskRay, george.burgess.iv, dexonsmith, inglorion, gbiv, llozano, manojgupta, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D77168 Added: clang/test/CodeGenCXX/auto-var-init-stop-after.cpp Modified: clang/include/clang/Basic/DiagnosticDriverKinds.td clang/include/clang/Basic/LangOptions.def clang/include/clang/Driver/Options.td clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGDecl.cpp clang/lib/CodeGen/CodeGenModule.cpp clang/lib/CodeGen/CodeGenModule.h clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/clang_f_opts.c Removed: diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 80242e53a1ae..28747e89378b 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -484,6 +484,12 @@ def err_drv_trivial_auto_var_init_zero_disabled : Error< "-ftrivial-auto-var-init=zero hasn't been enabled. Enable it at your own peril for benchmarking purpose only with " "-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang">; +def err_drv_trivial_auto_var_init_stop_after_missing_dependency : Error< + "-ftrivial-auto-var-init-stop-after=* is used without -ftrivial-auto-var-init=zero or -ftrivial-auto-var-init=pattern.">; + +def err_drv_trivial_auto_var_init_stop_after_invalid_value : Error< + "-ftrivial-auto-var-init-stop-after=* only accepts positive integers.">; + def warn_drv_msp430_hwmult_unsupported : Warning<"the given MCU does not " "support hardware multiply, but -mhwmult is set to %0.">, InGroup; diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index 5758ce39f032..caddae213a26 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -306,6 +306,8 @@ ENUM_LANGOPT(StackProtector, StackProtectorMode, 2, SSPOff, "stack protector mode") ENUM_LANGOPT(TrivialAutoVarInit, TrivialAutoVarInitKind, 2, TrivialAutoVarInitKind::Uninitialized, "trivial automatic variable initialization") +VALUE_LANGOPT(TrivialAutoVarInitStopAfter, 32, 0, + "stop trivial automatic variable initialization after the specified number of instances. Must be greater than 0.") ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 2, SOB_Undefined, "signed integer overflow handling") diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index c7cae452215a..b84b9293779f 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -1755,6 +1755,8 @@ def ftrivial_auto_var_init : Joined<["-"], "ftrivial-auto-var-init=">, Group, Flags<[CC1Option, CoreOption]>, HelpText<"Trivial automatic variable initialization to zero is only here for benchmarks, it'll eventually be removed, and I'm OK with that because I'm only using it to benchmark">; +def ftrivial_auto_var_init_stop_after : Joined<["-"], "ftrivial-auto-var-init-stop-after=">, Group, + Flags<[CC1Option, CoreOption]>, HelpText<"Stop initializing trivial automatic stack variables after the specified number of instances">; def fstandalone_debug : Flag<["-"], "fstandalone-debug">, Group, Flags<[CoreOption]>, HelpText<"Emit full debug info for all types used by the program">; def fno_standalone_debug : Flag<["-"], "fno-standalone-debug">, Group, Flags<[CoreOption]>, diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 2acb5a3d8422..c580720379b5 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -75,6 +75,8 @@ static void initializeAlloca(CodeGenFunction &CGF, AllocaInst *AI, Value *Size, break; } } + if (CGF.CGM.stopAutoInit()) +return; CGF.Builder.CreateMemSet(AI, Byte, Size, AlignmentInBytes); } diff --git a/clang/
[clang] fcbc613 - Make "#pragma clang attribute" support uninitialized attribute.
Author: Jian Cai Date: 2020-04-23T14:25:13-07:00 New Revision: fcbc613ad8b7785f710996f58726f26ad4ace50b URL: https://github.com/llvm/llvm-project/commit/fcbc613ad8b7785f710996f58726f26ad4ace50b DIFF: https://github.com/llvm/llvm-project/commit/fcbc613ad8b7785f710996f58726f26ad4ace50b.diff LOG: Make "#pragma clang attribute" support uninitialized attribute. Summary: When using -ftrivial-auto-var-init=* options to initiate automatic variables in a file, to disable initialization on some variables, currently we have to manually annotate the variables with uninitialized attribute, such as int dont_initialize_me __attribute((uninitialized)); Making pragma clang attribute to support this attribute would make annotating variables much easier, and could be particular useful for bisection efforts, e.g. void use(void*); void buggy() { int arr[256]; int boom; float bam; struct { int oops; } oops; union { int oof; float a; } oof; use(&arr); use(&boom); use(&bam); use(&oops); use(&oof); } Reviewers: jfb, rjmccall, aaron.ballman Reviewed By: jfb, aaron.ballman Subscribers: aaron.ballman, george.burgess.iv, dexonsmith, MaskRay, phosek, hubert.reinterpretcast, gbiv, manojgupta, llozano, srhines, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D78693 Added: Modified: clang/docs/LanguageExtensions.rst clang/include/clang/Basic/Attr.td clang/test/CodeGenCXX/trivial-auto-var-init-attribute.cpp clang/test/Misc/pragma-attribute-supported-attributes-list.test clang/test/Parser/pragma-attribute.cpp Removed: diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst index 07062a191ce8..f1b7c79db6d6 100644 --- a/clang/docs/LanguageExtensions.rst +++ b/clang/docs/LanguageExtensions.rst @@ -3336,6 +3336,9 @@ Clang supports the following match rules: - ``variable(is_global)``: Can be used to apply attributes to global variables only. +- ``variable(is_local)``: Can be used to apply attributes to local variables + only. + - ``variable(is_parameter)``: Can be used to apply attributes to parameters only. diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index f9f14bfcc424..1f5ea4d83a4d 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -441,6 +441,7 @@ def SubjectMatcherForEnumConstant : AttrSubjectMatcherRule<"enum_constant", def SubjectMatcherForVar : AttrSubjectMatcherRule<"variable", [Var], [ AttrSubjectMatcherSubRule<"is_thread_local", [TLSVar]>, AttrSubjectMatcherSubRule<"is_global", [GlobalVar]>, + AttrSubjectMatcherSubRule<"is_local", [LocalVar]>, AttrSubjectMatcherSubRule<"is_parameter", [ParmVar]>, // unless(is_parameter) AttrSubjectMatcherSubRule<"is_parameter", [NonParmVar], 1> @@ -3381,6 +3382,7 @@ def NoSpeculativeLoadHardening : InheritableAttr { def Uninitialized : InheritableAttr { let Spellings = [Clang<"uninitialized", 0>]; let Subjects = SubjectList<[LocalVar]>; + let PragmaAttributeSupport = 1; let Documentation = [UninitializedDocs]; } diff --git a/clang/test/CodeGenCXX/trivial-auto-var-init-attribute.cpp b/clang/test/CodeGenCXX/trivial-auto-var-init-attribute.cpp index e7c9e9ac2a5a..8b1bf2e57b21 100644 --- a/clang/test/CodeGenCXX/trivial-auto-var-init-attribute.cpp +++ b/clang/test/CodeGenCXX/trivial-auto-var-init-attribute.cpp @@ -20,4 +20,20 @@ void test_attribute_uninitialized() { used(i); } +#pragma clang attribute push([[clang::uninitialized]], apply_to = variable(is_local)) +// UNINIT-LABEL: test_pragma_attribute_uninitialized( +// UNINIT: alloca +// UNINIT-NEXT: call void +// ZERO-LABEL:test_pragma_attribute_uninitialized( +// ZERO: alloca +// ZERO-NEXT: call void +// PATTERN-LABEL: test_pragma_attribute_uninitialized( +// PATTERN: alloca +// PATTERN-NEXT: call void +void test_pragma_attribute_uninitialized() { + int i; + used(i); +} +#pragma clang attribute pop + } // extern "C" diff --git a/clang/test/Misc/pragma-attribute-supported-attributes-list.test b/clang/test/Misc/pragma-attribute-supported-attributes-list.test index e4750705a249..c23a93218802 100644 --- a/clang/test/Misc/pragma-attribute-supported-attributes-list.test +++ b/clang/test/Misc/pragma-attribute-supported-attributes-list.test @@ -41,6 +41,7 @@ // CHECK-NEXT: Callback (SubjectMatchRule_function) // CHECK-NEXT: Capability (SubjectMatchRule_record, SubjectMatchRule_type_alias) // CHECK-NEXT: CarriesDependency (SubjectMatchRule_variable_is_parameter, SubjectMatchRule_objc_method, SubjectMatchRule_function) +// CHECK-NEXT: Cleanup (SubjectMatchRule_variable_is_local) // CHECK-NEXT: CmseNSEntry (SubjectMatchRule_function) // CHECK-NEXT: Cold (SubjectMatchRule_function) // CHECK-NEXT: Common (SubjectMatchRule_variable) @@ -151,6 +152,7 @@ // CHECK-NEXT: Tar
[clang] fd11a26 - [AArch64] handle -Wa,-march=
Author: Jian Cai Date: 2021-06-07T10:15:53-07:00 New Revision: fd11a26d368c5a909fb88548fef2cee7a6c2c931 URL: https://github.com/llvm/llvm-project/commit/fd11a26d368c5a909fb88548fef2cee7a6c2c931 DIFF: https://github.com/llvm/llvm-project/commit/fd11a26d368c5a909fb88548fef2cee7a6c2c931.diff LOG: [AArch64] handle -Wa,-march= This fixed PR#48894 for AArch64. The issue has been fixed for Arm in https://reviews.llvm.org/D95872 The following rules apply to -Wa,-march with this change: - Only compiler options apply to non assembly files - Compiler and assembler options apply to assembly files - For assembly files, we prefer the assembler option(s) if we have both kinds of option - Of the options that apply (or are preferred), the last value wins (it's not additive) Reviewed By: DavidSpickett, nickdesaulniers Differential Revision: https://reviews.llvm.org/D103184 Added: clang/test/Driver/aarch64-target-as-march.s Modified: clang/lib/Driver/ToolChains/Arch/AArch64.cpp clang/lib/Driver/ToolChains/Arch/AArch64.h clang/lib/Driver/ToolChains/Clang.cpp Removed: diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index 503685ab533a0..cb98d423ed2b0 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -185,12 +185,20 @@ getAArch64MicroArchFeaturesFromMcpu(const Driver &D, StringRef Mcpu, void aarch64::getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, - std::vector &Features) { + std::vector &Features, + bool ForAS) { Arg *A; bool success = true; // Enable NEON by default. Features.push_back("+neon"); - if ((A = Args.getLastArg(options::OPT_march_EQ))) + if (ForAS && + (A = Args.getLastArg(options::OPT_Wa_COMMA, options::OPT_Xassembler))) { +llvm::StringRef WaMArch; +for (StringRef Value : A->getValues()) + if (Value.startswith("-march=")) +WaMArch = Value.substr(7); +success = getAArch64ArchFeaturesFromMarch(D, WaMArch, Args, Features); + } else if ((A = Args.getLastArg(options::OPT_march_EQ))) success = getAArch64ArchFeaturesFromMarch(D, A->getValue(), Args, Features); else if ((A = Args.getLastArg(options::OPT_mcpu_EQ))) success = getAArch64ArchFeaturesFromMcpu(D, A->getValue(), Args, Features); diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.h b/clang/lib/Driver/ToolChains/Arch/AArch64.h index 713af870d69fb..d47c402d4a42d 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.h +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.h @@ -22,7 +22,8 @@ namespace aarch64 { void getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args, - std::vector &Features); + std::vector &Features, + bool ForAS); std::string getAArch64TargetCPU(const llvm::opt::ArgList &Args, const llvm::Triple &Triple, llvm::opt::Arg *&A); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index a0e1208fd709c..6fdd7e2dd21e7 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -344,7 +344,7 @@ static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple, case llvm::Triple::aarch64: case llvm::Triple::aarch64_32: case llvm::Triple::aarch64_be: -aarch64::getAArch64TargetFeatures(D, Triple, Args, Features); +aarch64::getAArch64TargetFeatures(D, Triple, Args, Features, ForAS); break; case llvm::Triple::x86: case llvm::Triple::x86_64: diff --git a/clang/test/Driver/aarch64-target-as-march.s b/clang/test/Driver/aarch64-target-as-march.s new file mode 100644 index 0..a9301ade43351 --- /dev/null +++ b/clang/test/Driver/aarch64-target-as-march.s @@ -0,0 +1,46 @@ +/// These tests make sure that options passed to the assembler +/// via -Wa or -Xassembler are applied correctly to assembler inputs. + +/// Does not apply to non assembly files +// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.1-a \ +// RUN: %S/Inputs/wildcard1.c 2>&1 | FileCheck --check-prefix=TARGET-FEATURE-1 %s +// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Xassembler -march=armv8.1-a \ +// RUN: %S/Inputs/wildcard1.c 2>&1 | FileCheck --check-prefix=TARGET-FEATURE-1 %s + +// TARGET-FEATURE-1-NOT: "-target-feature" "+v8.1a" + +/// Does apply to assembler input +// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.2-a %s 2>&1 | \ +// RUN: FileCheck --check-prefix=TARGET-FEATURE-2
[clang] 9145a3d - Revert "[AArch64] handle -Wa,-march="
Author: Jian Cai Date: 2021-06-07T14:31:07-07:00 New Revision: 9145a3d4ab7eb05d9fb113b5392e8961df629b88 URL: https://github.com/llvm/llvm-project/commit/9145a3d4ab7eb05d9fb113b5392e8961df629b88 DIFF: https://github.com/llvm/llvm-project/commit/9145a3d4ab7eb05d9fb113b5392e8961df629b88.diff LOG: Revert "[AArch64] handle -Wa,-march=" This reverts commit fd11a26d368c5a909fb88548fef2cee7a6c2c931. Added: Modified: clang/lib/Driver/ToolChains/Arch/AArch64.cpp clang/lib/Driver/ToolChains/Arch/AArch64.h clang/lib/Driver/ToolChains/Clang.cpp Removed: clang/test/Driver/aarch64-target-as-march.s diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index cb98d423ed2b0..503685ab533a0 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -185,20 +185,12 @@ getAArch64MicroArchFeaturesFromMcpu(const Driver &D, StringRef Mcpu, void aarch64::getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, - std::vector &Features, - bool ForAS) { + std::vector &Features) { Arg *A; bool success = true; // Enable NEON by default. Features.push_back("+neon"); - if (ForAS && - (A = Args.getLastArg(options::OPT_Wa_COMMA, options::OPT_Xassembler))) { -llvm::StringRef WaMArch; -for (StringRef Value : A->getValues()) - if (Value.startswith("-march=")) -WaMArch = Value.substr(7); -success = getAArch64ArchFeaturesFromMarch(D, WaMArch, Args, Features); - } else if ((A = Args.getLastArg(options::OPT_march_EQ))) + if ((A = Args.getLastArg(options::OPT_march_EQ))) success = getAArch64ArchFeaturesFromMarch(D, A->getValue(), Args, Features); else if ((A = Args.getLastArg(options::OPT_mcpu_EQ))) success = getAArch64ArchFeaturesFromMcpu(D, A->getValue(), Args, Features); diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.h b/clang/lib/Driver/ToolChains/Arch/AArch64.h index d47c402d4a42d..713af870d69fb 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.h +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.h @@ -22,8 +22,7 @@ namespace aarch64 { void getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args, - std::vector &Features, - bool ForAS); + std::vector &Features); std::string getAArch64TargetCPU(const llvm::opt::ArgList &Args, const llvm::Triple &Triple, llvm::opt::Arg *&A); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 6fdd7e2dd21e7..a0e1208fd709c 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -344,7 +344,7 @@ static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple, case llvm::Triple::aarch64: case llvm::Triple::aarch64_32: case llvm::Triple::aarch64_be: -aarch64::getAArch64TargetFeatures(D, Triple, Args, Features, ForAS); +aarch64::getAArch64TargetFeatures(D, Triple, Args, Features); break; case llvm::Triple::x86: case llvm::Triple::x86_64: diff --git a/clang/test/Driver/aarch64-target-as-march.s b/clang/test/Driver/aarch64-target-as-march.s deleted file mode 100644 index a9301ade43351..0 --- a/clang/test/Driver/aarch64-target-as-march.s +++ /dev/null @@ -1,46 +0,0 @@ -/// These tests make sure that options passed to the assembler -/// via -Wa or -Xassembler are applied correctly to assembler inputs. - -/// Does not apply to non assembly files -// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.1-a \ -// RUN: %S/Inputs/wildcard1.c 2>&1 | FileCheck --check-prefix=TARGET-FEATURE-1 %s -// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Xassembler -march=armv8.1-a \ -// RUN: %S/Inputs/wildcard1.c 2>&1 | FileCheck --check-prefix=TARGET-FEATURE-1 %s - -// TARGET-FEATURE-1-NOT: "-target-feature" "+v8.1a" - -/// Does apply to assembler input -// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.2-a %s 2>&1 | \ -// RUN: FileCheck --check-prefix=TARGET-FEATURE-2 %s -// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Xassembler -march=armv8.2-a %s 2>&1 | \ -// RUN: FileCheck --check-prefix=TARGET-FEATURE-2 %s - -// TARGET-FEATURE-2: "-target-feature" "+v8.2a" - -/// No unused argument warnings when there are multiple values -// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.1-a -Wa,-march=armv8.2-a %s 2>&1 | \ -// RUN: FileCheck --check-prefix=UNUSED-WARNING %s - -// UNUSED-WARNING-NOT: warning: argument unuse
[clang] 0eac975 - Reland "[AArch64] handle -Wa,-march="
Author: Jian Cai Date: 2021-06-23T12:01:57-07:00 New Revision: 0eac975b51cca5b54a1f516d05a233c215375eda URL: https://github.com/llvm/llvm-project/commit/0eac975b51cca5b54a1f516d05a233c215375eda DIFF: https://github.com/llvm/llvm-project/commit/0eac975b51cca5b54a1f516d05a233c215375eda.diff LOG: Reland "[AArch64] handle -Wa,-march=" This reverts commit fd11a26d368c5a909fb88548fef2cee7a6c2c931, which was reverted by 9145a3d4ab7eb05d9fb113b5392e8961df629b88 due to a test failure on aarch64 backend, e.g. https://lab.llvm.org/buildbot/#/builders/43/builds/7031. This patch fixed the test failure. Reviewed By: DavidSpickett, nickdesaulniers Differential Revision: https://reviews.llvm.org/D103184 Added: clang/test/Driver/aarch64-target-as-march.s Modified: clang/lib/Driver/ToolChains/Arch/AArch64.cpp clang/lib/Driver/ToolChains/Arch/AArch64.h clang/lib/Driver/ToolChains/Clang.cpp Removed: diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index 503685ab533a0..ed8c7e94b0134 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -185,12 +185,25 @@ getAArch64MicroArchFeaturesFromMcpu(const Driver &D, StringRef Mcpu, void aarch64::getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, - std::vector &Features) { + std::vector &Features, + bool ForAS) { Arg *A; bool success = true; // Enable NEON by default. Features.push_back("+neon"); - if ((A = Args.getLastArg(options::OPT_march_EQ))) + llvm::StringRef WaMArch = ""; + if (ForAS) +for (const auto *A : + Args.filtered(options::OPT_Wa_COMMA, options::OPT_Xassembler)) + for (StringRef Value : A->getValues()) +if (Value.startswith("-march=")) + WaMArch = Value.substr(7); + // Call getAArch64ArchFeaturesFromMarch only if "-Wa,-march=" or + // "-Xassembler -march" is detected. Otherwise it may return false + // and causes Clang to error out. + if (WaMArch.size()) +success = getAArch64ArchFeaturesFromMarch(D, WaMArch, Args, Features); + else if ((A = Args.getLastArg(options::OPT_march_EQ))) success = getAArch64ArchFeaturesFromMarch(D, A->getValue(), Args, Features); else if ((A = Args.getLastArg(options::OPT_mcpu_EQ))) success = getAArch64ArchFeaturesFromMcpu(D, A->getValue(), Args, Features); diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.h b/clang/lib/Driver/ToolChains/Arch/AArch64.h index 713af870d69fb..d47c402d4a42d 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.h +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.h @@ -22,7 +22,8 @@ namespace aarch64 { void getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args, - std::vector &Features); + std::vector &Features, + bool ForAS); std::string getAArch64TargetCPU(const llvm::opt::ArgList &Args, const llvm::Triple &Triple, llvm::opt::Arg *&A); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index b358813a1a017..0d1fce3c06aea 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -344,7 +344,7 @@ static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple, case llvm::Triple::aarch64: case llvm::Triple::aarch64_32: case llvm::Triple::aarch64_be: -aarch64::getAArch64TargetFeatures(D, Triple, Args, Features); +aarch64::getAArch64TargetFeatures(D, Triple, Args, Features, ForAS); break; case llvm::Triple::x86: case llvm::Triple::x86_64: diff --git a/clang/test/Driver/aarch64-target-as-march.s b/clang/test/Driver/aarch64-target-as-march.s new file mode 100644 index 0..a9301ade43351 --- /dev/null +++ b/clang/test/Driver/aarch64-target-as-march.s @@ -0,0 +1,46 @@ +/// These tests make sure that options passed to the assembler +/// via -Wa or -Xassembler are applied correctly to assembler inputs. + +/// Does not apply to non assembly files +// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.1-a \ +// RUN: %S/Inputs/wildcard1.c 2>&1 | FileCheck --check-prefix=TARGET-FEATURE-1 %s +// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Xassembler -march=armv8.1-a \ +// RUN: %S/Inputs/wildcard1.c 2>&1 | FileCheck --check-prefix=TARGET-FEATURE-1 %s + +// TARGET-FEATURE-1-NOT: "-target-feature" "+v8.1a" + +/// Does apply to assembler input +// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.2-a %s 2>&1 | \ +// RUN: Fi
[clang] 3cc3c0f - Add support to -Wa,--version in clang
Author: Jian Cai Date: 2021-03-31T16:29:02-07:00 New Revision: 3cc3c0f8352ec33ca2f2636f94cb1d85fc57ac16 URL: https://github.com/llvm/llvm-project/commit/3cc3c0f8352ec33ca2f2636f94cb1d85fc57ac16 DIFF: https://github.com/llvm/llvm-project/commit/3cc3c0f8352ec33ca2f2636f94cb1d85fc57ac16.diff LOG: Add support to -Wa,--version in clang Clang currently only supports -Wa,--version when -no-integrated-as is used. This adds support to -Wa,--version with -integrated-as. Link: https://github.com/ClangBuiltLinux/linux/issues/1320 Reviewed By: nickdesaulniers, MaskRay Differential Revision: https://reviews.llvm.org/D99556 Added: clang/test/Driver/as-version.s Modified: clang/lib/Driver/ToolChains/Clang.cpp Removed: diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 804f528838c58..9d3c725198f4d 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2549,6 +2549,8 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, // -fdebug-compilation-dir (without '=') here. CmdArgs.push_back("-fdebug-compilation-dir"); CmdArgs.push_back(Value.data()); + } else if (Value == "--version") { +D.PrintVersion(C, llvm::outs()); } else { D.Diag(diag::err_drv_unsupported_option_argument) << A->getOption().getName() << Value; diff --git a/clang/test/Driver/as-version.s b/clang/test/Driver/as-version.s new file mode 100644 index 0..9d2801e4ee379 --- /dev/null +++ b/clang/test/Driver/as-version.s @@ -0,0 +1,9 @@ +// Test version information. + +// RUN: %clang -Wa,--version -c -fintegrated-as %s -o /dev/null \ +// RUN: | FileCheck --check-prefix=IAS %s +// IAS: clang version + +// RUN: %clang -Wa,--version -c -fno-integrated-as %s -o /dev/null \ +// RUN: | FileCheck --check-prefix=GAS %s +// GAS-NOT: clang ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 76d9bc7 - Reland "Add support to -Wa,--version in clang""
Author: Jian Cai Date: 2021-04-01T13:47:56-07:00 New Revision: 76d9bc72784d88f4dd57b9939e52c73739438af5 URL: https://github.com/llvm/llvm-project/commit/76d9bc72784d88f4dd57b9939e52c73739438af5 DIFF: https://github.com/llvm/llvm-project/commit/76d9bc72784d88f4dd57b9939e52c73739438af5.diff LOG: Reland "Add support to -Wa,--version in clang"" This relands commit 3cc3c0f8352ec33ca2f2636f94cb1d85fc57ac16 with fixed test cases, which was reverted by commit bf2479c347c8ca88fefdb144d8bae0a7a4231e2a. Added: clang/test/Driver/as-version.s Modified: clang/lib/Driver/ToolChains/Clang.cpp Removed: diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index c9b44aa76b6b..ad5dca30e0f6 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2552,6 +2552,8 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, // -fdebug-compilation-dir (without '=') here. CmdArgs.push_back("-fdebug-compilation-dir"); CmdArgs.push_back(Value.data()); + } else if (Value == "--version") { +D.PrintVersion(C, llvm::outs()); } else { D.Diag(diag::err_drv_unsupported_option_argument) << A->getOption().getName() << Value; diff --git a/clang/test/Driver/as-version.s b/clang/test/Driver/as-version.s new file mode 100644 index ..e9e66563942f --- /dev/null +++ b/clang/test/Driver/as-version.s @@ -0,0 +1,5 @@ +// Test version information. + +// RUN: %clang -Wa,--version -c -fintegrated-as %s -o /dev/null \ +// RUN: | FileCheck --check-prefix=IAS %s +// IAS: clang version ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits