r374909 - CFI: wrong type passed to llvm.type.test with multiple inheritance devirtualization.
Author: dmikulin Date: Tue Oct 15 09:32:50 2019 New Revision: 374909 URL: http://llvm.org/viewvc/llvm-project?rev=374909&view=rev Log: CFI: wrong type passed to llvm.type.test with multiple inheritance devirtualization. Differential Revision: https://reviews.llvm.org/D67985 Added: cfe/trunk/test/CodeGenCXX/cfi-multiple-inheritance.cpp Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=374909&r1=374908&r2=374909&view=diff == --- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original) +++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Tue Oct 15 09:32:50 2019 @@ -382,7 +382,7 @@ RValue CodeGenFunction::EmitCXXMemberOrO const CXXRecordDecl *RD; std::tie(VTable, RD) = CGM.getCXXABI().LoadVTablePtr(*this, This.getAddress(), -MD->getParent()); +CalleeDecl->getParent()); EmitVTablePtrCheckForCall(RD, VTable, CFITCK_NVCall, CE->getBeginLoc()); } Added: cfe/trunk/test/CodeGenCXX/cfi-multiple-inheritance.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cfi-multiple-inheritance.cpp?rev=374909&view=auto == --- cfe/trunk/test/CodeGenCXX/cfi-multiple-inheritance.cpp (added) +++ cfe/trunk/test/CodeGenCXX/cfi-multiple-inheritance.cpp Tue Oct 15 09:32:50 2019 @@ -0,0 +1,31 @@ +// Test that correct vtable ptr and type metadata are passed to llvm.type.test +// Related to Bugzilla 43390. + +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fvisibility hidden -std=c++11 -fsanitize=cfi-nvcall -emit-llvm -o - %s | FileCheck %s + +class A1 { +public: +virtual int f1() = 0; +}; + +class A2 { +public: +virtual int f2() = 0; +}; + + +class B : public A1, public A2 { +public: +int f2() final { return 1; } +int f1() final { return 2; } +}; + +// CHECK-LABEL: define hidden i32 @_Z3foov +int foo() { +B b; +return static_cast(&b)->f2(); +// CHECK: [[P:%[^ ]*]] = bitcast %class.B* %b to i8** +// CHECK: [[V:%[^ ]*]] = load i8*, i8** [[P]], align 8 +// CHECK: call i1 @llvm.type.test(i8* [[V]], metadata !"_ZTS1B") +// CHECK: call i1 @llvm.type.test(i8* [[V]], metadata !"all-vtables") +} ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r374934 - Added support for "#pragma clang section relro="
Author: dmikulin Date: Tue Oct 15 11:31:10 2019 New Revision: 374934 URL: http://llvm.org/viewvc/llvm-project?rev=374934&view=rev Log: Added support for "#pragma clang section relro=" Differential Revision: https://reviews.llvm.org/D68806 Modified: cfe/trunk/docs/LanguageExtensions.rst cfe/trunk/include/clang/Basic/Attr.td cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td cfe/trunk/include/clang/Sema/Sema.h cfe/trunk/lib/CodeGen/CGDecl.cpp cfe/trunk/lib/CodeGen/CodeGenModule.cpp cfe/trunk/lib/Parse/ParsePragma.cpp cfe/trunk/lib/Sema/SemaAttr.cpp cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/test/CodeGenCXX/clang-sections.cpp cfe/trunk/test/Sema/pragma-clang-section.c Modified: cfe/trunk/docs/LanguageExtensions.rst URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LanguageExtensions.rst?rev=374934&r1=374933&r2=374934&view=diff == --- cfe/trunk/docs/LanguageExtensions.rst (original) +++ cfe/trunk/docs/LanguageExtensions.rst Tue Oct 15 11:31:10 2019 @@ -3445,14 +3445,14 @@ The section names can be specified as: .. code-block:: c++ - #pragma clang section bss="myBSS" data="myData" rodata="myRodata" text="myText" + #pragma clang section bss="myBSS" data="myData" rodata="myRodata" relro="myRelro" text="myText" The section names can be reverted back to default name by supplying an empty string to the section kind, for example: .. code-block:: c++ - #pragma clang section bss="" data="" text="" rodata="" + #pragma clang section bss="" data="" text="" rodata="" relro="" The ``#pragma clang section`` directive obeys the following rules: Modified: cfe/trunk/include/clang/Basic/Attr.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=374934&r1=374933&r2=374934&view=diff == --- cfe/trunk/include/clang/Basic/Attr.td (original) +++ cfe/trunk/include/clang/Basic/Attr.td Tue Oct 15 11:31:10 2019 @@ -2020,6 +2020,14 @@ def PragmaClangRodataSection : Inheritab let Documentation = [Undocumented]; } +def PragmaClangRelroSection : InheritableAttr { + // This attribute has no spellings as it is only ever created implicitly. + let Spellings = []; + let Args = [StringArgument<"Name">]; + let Subjects = SubjectList<[GlobalVar], ErrorDiag>; + let Documentation = [Undocumented]; +} + def PragmaClangTextSection : InheritableAttr { // This attribute has no spellings as it is only ever created implicitly. let Spellings = []; Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=374934&r1=374933&r2=374934&view=diff == --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Tue Oct 15 11:31:10 2019 @@ -976,9 +976,9 @@ def err_pragma_misplaced_in_decl : Error // '#pragma clang section' related errors def err_pragma_expected_clang_section_name : Error< - "expected one of [bss|data|rodata|text] section kind in '#pragma %0'">; + "expected one of [bss|data|rodata|text|relro] section kind in '#pragma %0'">; def err_pragma_clang_section_expected_equal : Error< - "expected '=' following '#pragma clang section %select{invalid|bss|data|rodata|text}0'">; + "expected '=' following '#pragma clang section %select{invalid|bss|data|rodata|text|relro}0'">; def warn_pragma_expected_section_name : Warning< "expected a string literal for the section name in '#pragma %0' - ignored">, InGroup; Modified: cfe/trunk/include/clang/Sema/Sema.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=374934&r1=374933&r2=374934&view=diff == --- cfe/trunk/include/clang/Sema/Sema.h (original) +++ cfe/trunk/include/clang/Sema/Sema.h Tue Oct 15 11:31:10 2019 @@ -418,7 +418,8 @@ public: PCSK_BSS = 1, PCSK_Data = 2, PCSK_Rodata = 3, -PCSK_Text = 4 +PCSK_Text = 4, +PCSK_Relro= 5 }; enum PragmaClangSectionAction { @@ -439,6 +440,7 @@ public: PragmaClangSection PragmaClangBSSSection; PragmaClangSection PragmaClangDataSection; PragmaClangSection PragmaClangRodataSection; + PragmaClangSection PragmaClangRelroSection; PragmaClangSection PragmaClangTextSection; enum PragmaMsStackAction { Modified: cfe/trunk/lib/CodeGen/CGDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDecl.cpp?rev=374934&r1=374933&r2=374934&view=diff == --- cfe/trunk/lib/CodeGen/CGDecl.cpp (original) +++ cfe/trunk/lib/CodeGen/CGDecl.cpp Tue Oct 15 11:31:10
r375022 - Tag CFI-generated data structures with "#pragma clang section" attributes.
Author: dmikulin Date: Wed Oct 16 10:51:40 2019 New Revision: 375022 URL: http://llvm.org/viewvc/llvm-project?rev=375022&view=rev Log: Tag CFI-generated data structures with "#pragma clang section" attributes. Differential Revision: https://reviews.llvm.org/D68808 Added: cfe/trunk/test/CodeGen/cfi-pragma-section.c Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp cfe/trunk/lib/CodeGen/CodeGenModule.cpp cfe/trunk/lib/CodeGen/CodeGenModule.h cfe/trunk/lib/Sema/SemaDecl.cpp Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=375022&r1=375021&r2=375022&view=diff == --- cfe/trunk/lib/CodeGen/CGExpr.cpp (original) +++ cfe/trunk/lib/CodeGen/CGExpr.cpp Wed Oct 16 10:51:40 2019 @@ -2821,6 +2821,7 @@ llvm::Constant *CodeGenFunction::EmitChe CGM.getModule(), Descriptor->getType(), /*isConstant=*/true, llvm::GlobalVariable::PrivateLinkage, Descriptor); GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global); + CGM.setPragmaSectionAttributes(CurFuncDecl, GV); CGM.getSanitizerMetadata()->disableSanitizerForGlobal(GV); // Remember the descriptor for this type. @@ -2900,6 +2901,7 @@ llvm::Constant *CodeGenFunction::EmitChe } auto FilenameGV = CGM.GetAddrOfConstantCString(FilenameString, ".src"); +CGM.setPragmaSectionAttributes(CurFuncDecl, cast(FilenameGV.getPointer())); CGM.getSanitizerMetadata()->disableSanitizerForGlobal( cast(FilenameGV.getPointer())); Filename = FilenameGV.getPointer(); @@ -3073,6 +3075,7 @@ void CodeGenFunction::EmitCheck( new llvm::GlobalVariable(CGM.getModule(), Info->getType(), false, llvm::GlobalVariable::PrivateLinkage, Info); InfoPtr->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global); + CGM.setPragmaSectionAttributes(CurFuncDecl, InfoPtr); CGM.getSanitizerMetadata()->disableSanitizerForGlobal(InfoPtr); Args.push_back(Builder.CreateBitCast(InfoPtr, Int8PtrTy)); ArgTypes.push_back(Int8PtrTy); Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=375022&r1=375021&r2=375022&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Wed Oct 16 10:51:40 2019 @@ -1699,11 +1699,8 @@ bool CodeGenModule::GetCPUAndFeaturesAtt return AddedAttr; } -void CodeGenModule::setNonAliasAttributes(GlobalDecl GD, - llvm::GlobalObject *GO) { - const Decl *D = GD.getDecl(); - SetCommonAttributes(GD, GO); - +void CodeGenModule::setPragmaSectionAttributes(const Decl *D, + llvm::GlobalObject *GO) { if (D) { if (auto *GV = dyn_cast(GO)) { if (auto *SA = D->getAttr()) @@ -1721,6 +1718,26 @@ void CodeGenModule::setNonAliasAttribute if (!D->getAttr()) F->addFnAttr("implicit-section-name", SA->getName()); + if (auto *SA = D->getAttr()) +F->addFnAttr("bss-section", SA->getName()); + if (auto *SA = D->getAttr()) +F->addFnAttr("data-section", SA->getName()); + if (auto *SA = D->getAttr()) +F->addFnAttr("rodata-section", SA->getName()); + if (auto *SA = D->getAttr()) +F->addFnAttr("relro-section", SA->getName()); +} + } +} + +void CodeGenModule::setNonAliasAttributes(GlobalDecl GD, + llvm::GlobalObject *GO) { + const Decl *D = GD.getDecl(); + SetCommonAttributes(GD, GO); + setPragmaSectionAttributes(D, GO); + + if (D) { +if (auto *F = dyn_cast(GO)) { llvm::AttrBuilder Attrs; if (GetCPUAndFeaturesAttributes(GD, Attrs)) { // We know that GetCPUAndFeaturesAttributes will always have the Modified: cfe/trunk/lib/CodeGen/CodeGenModule.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=375022&r1=375021&r2=375022&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenModule.h (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.h Wed Oct 16 10:51:40 2019 @@ -1347,6 +1347,11 @@ public: /// \param QT is the clang QualType of the null pointer. llvm::Constant *getNullPointer(llvm::PointerType *T, QualType QT); + /// Set section attributes requested by "#pragma clang section" + /// \param D is the declaration to read semantic attributes from. + /// \param GO is the global object to set section attributes. + void setPragmaSectionAttributes(const Decl *D, llvm::GlobalObject *GO); + private: llvm::Constant *GetOrCreateLLVMFunction( StringRef MangledName, llvm::Type *Ty, GlobalDecl D, bool ForVTable, Modified: cfe/trunk/lib/Sema/Sema
r375069 - Revert Tag CFI-generated data structures with "#pragma clang section" attributes.
Author: dmikulin Date: Wed Oct 16 17:55:38 2019 New Revision: 375069 URL: http://llvm.org/viewvc/llvm-project?rev=375069&view=rev Log: Revert Tag CFI-generated data structures with "#pragma clang section" attributes. This reverts r375022 (git commit e2692b3bc0327606748b6d291b9009d2c845ced5) Removed: cfe/trunk/test/CodeGen/cfi-pragma-section.c Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp cfe/trunk/lib/CodeGen/CodeGenModule.cpp cfe/trunk/lib/CodeGen/CodeGenModule.h cfe/trunk/lib/Sema/SemaDecl.cpp Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=375069&r1=375068&r2=375069&view=diff == --- cfe/trunk/lib/CodeGen/CGExpr.cpp (original) +++ cfe/trunk/lib/CodeGen/CGExpr.cpp Wed Oct 16 17:55:38 2019 @@ -2821,7 +2821,6 @@ llvm::Constant *CodeGenFunction::EmitChe CGM.getModule(), Descriptor->getType(), /*isConstant=*/true, llvm::GlobalVariable::PrivateLinkage, Descriptor); GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global); - CGM.setPragmaSectionAttributes(CurFuncDecl, GV); CGM.getSanitizerMetadata()->disableSanitizerForGlobal(GV); // Remember the descriptor for this type. @@ -2901,7 +2900,6 @@ llvm::Constant *CodeGenFunction::EmitChe } auto FilenameGV = CGM.GetAddrOfConstantCString(FilenameString, ".src"); -CGM.setPragmaSectionAttributes(CurFuncDecl, cast(FilenameGV.getPointer())); CGM.getSanitizerMetadata()->disableSanitizerForGlobal( cast(FilenameGV.getPointer())); Filename = FilenameGV.getPointer(); @@ -3075,7 +3073,6 @@ void CodeGenFunction::EmitCheck( new llvm::GlobalVariable(CGM.getModule(), Info->getType(), false, llvm::GlobalVariable::PrivateLinkage, Info); InfoPtr->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global); - CGM.setPragmaSectionAttributes(CurFuncDecl, InfoPtr); CGM.getSanitizerMetadata()->disableSanitizerForGlobal(InfoPtr); Args.push_back(Builder.CreateBitCast(InfoPtr, Int8PtrTy)); ArgTypes.push_back(Int8PtrTy); Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=375069&r1=375068&r2=375069&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Wed Oct 16 17:55:38 2019 @@ -1699,8 +1699,11 @@ bool CodeGenModule::GetCPUAndFeaturesAtt return AddedAttr; } -void CodeGenModule::setPragmaSectionAttributes(const Decl *D, - llvm::GlobalObject *GO) { +void CodeGenModule::setNonAliasAttributes(GlobalDecl GD, + llvm::GlobalObject *GO) { + const Decl *D = GD.getDecl(); + SetCommonAttributes(GD, GO); + if (D) { if (auto *GV = dyn_cast(GO)) { if (auto *SA = D->getAttr()) @@ -1718,26 +1721,6 @@ void CodeGenModule::setPragmaSectionAttr if (!D->getAttr()) F->addFnAttr("implicit-section-name", SA->getName()); - if (auto *SA = D->getAttr()) -F->addFnAttr("bss-section", SA->getName()); - if (auto *SA = D->getAttr()) -F->addFnAttr("data-section", SA->getName()); - if (auto *SA = D->getAttr()) -F->addFnAttr("rodata-section", SA->getName()); - if (auto *SA = D->getAttr()) -F->addFnAttr("relro-section", SA->getName()); -} - } -} - -void CodeGenModule::setNonAliasAttributes(GlobalDecl GD, - llvm::GlobalObject *GO) { - const Decl *D = GD.getDecl(); - SetCommonAttributes(GD, GO); - setPragmaSectionAttributes(D, GO); - - if (D) { -if (auto *F = dyn_cast(GO)) { llvm::AttrBuilder Attrs; if (GetCPUAndFeaturesAttributes(GD, Attrs)) { // We know that GetCPUAndFeaturesAttributes will always have the Modified: cfe/trunk/lib/CodeGen/CodeGenModule.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=375069&r1=375068&r2=375069&view=diff == --- cfe/trunk/lib/CodeGen/CodeGenModule.h (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.h Wed Oct 16 17:55:38 2019 @@ -1347,11 +1347,6 @@ public: /// \param QT is the clang QualType of the null pointer. llvm::Constant *getNullPointer(llvm::PointerType *T, QualType QT); - /// Set section attributes requested by "#pragma clang section" - /// \param D is the declaration to read semantic attributes from. - /// \param GO is the global object to set section attributes. - void setPragmaSectionAttributes(const Decl *D, llvm::GlobalObject *GO); - private: llvm::Constant *GetOrCreateLLVMFunction( StringRef MangledName, llvm::Type *Ty, GlobalDecl D, bool ForVTable, Mod
[clang] fbb23c9 - Fix profiling options on PS4 target:
Author: Dmitry Mikulin Date: 2020-03-16T16:52:47-07:00 New Revision: fbb23c9714f21c5f46ced5ccaed0cb90e05f61e7 URL: https://github.com/llvm/llvm-project/commit/fbb23c9714f21c5f46ced5ccaed0cb90e05f61e7 DIFF: https://github.com/llvm/llvm-project/commit/fbb23c9714f21c5f46ced5ccaed0cb90e05f61e7.diff LOG: Fix profiling options on PS4 target: - libclang_rt.profile should be added when -fcs-profile-generate is on thecommand line. - OPT_fno_profile_instr_generate was used as a negative for OPT_fprofile_generate. Fix it to use OPT_fno_profile_generate. Differential Revision: https://reviews.llvm.org/D75274 Added: Modified: clang/lib/Driver/ToolChains/PS4CPU.cpp clang/test/Driver/ps4-runtime-flags.c Removed: diff --git a/clang/lib/Driver/ToolChains/PS4CPU.cpp b/clang/lib/Driver/ToolChains/PS4CPU.cpp index 93d86e6d04b1..9ecbb7241d45 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.cpp +++ b/clang/lib/Driver/ToolChains/PS4CPU.cpp @@ -30,13 +30,17 @@ void tools::PS4cpu::addProfileRTArgs(const ToolChain &TC, const ArgList &Args, if ((Args.hasFlag(options::OPT_fprofile_arcs, options::OPT_fno_profile_arcs, false) || Args.hasFlag(options::OPT_fprofile_generate, -options::OPT_fno_profile_instr_generate, false) || +options::OPT_fno_profile_generate, false) || Args.hasFlag(options::OPT_fprofile_generate_EQ, -options::OPT_fno_profile_instr_generate, false) || +options::OPT_fno_profile_generate, false) || Args.hasFlag(options::OPT_fprofile_instr_generate, options::OPT_fno_profile_instr_generate, false) || Args.hasFlag(options::OPT_fprofile_instr_generate_EQ, options::OPT_fno_profile_instr_generate, false) || + Args.hasFlag(options::OPT_fcs_profile_generate, +options::OPT_fno_profile_generate, false) || + Args.hasFlag(options::OPT_fcs_profile_generate_EQ, +options::OPT_fno_profile_generate, false) || Args.hasArg(options::OPT_fcreate_profile) || Args.hasArg(options::OPT_coverage))) CmdArgs.push_back("--dependent-lib=libclang_rt.profile-x86_64.a"); diff --git a/clang/test/Driver/ps4-runtime-flags.c b/clang/test/Driver/ps4-runtime-flags.c index 315976d4e228..3131690304db 100644 --- a/clang/test/Driver/ps4-runtime-flags.c +++ b/clang/test/Driver/ps4-runtime-flags.c @@ -10,10 +10,15 @@ // RUN: %clang -target x86_64-scei-ps4 -fprofile-arcs -fno-profile-arcs %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-NO-PROFILE %s // RUN: %clang -target x86_64-scei-ps4 -fprofile-generate %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-PROFILE %s // RUN: %clang -target x86_64-scei-ps4 -fno-profile-generate %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-NO-PROFILE %s +// RUN: %clang -target x86_64-scei-ps4 -fprofile-generate -fno-profile-generate %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-NO-PROFILE %s // RUN: %clang -target x86_64-scei-ps4 -fprofile-generate=dir %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-PROFILE %s // RUN: %clang -target x86_64-scei-ps4 -fprofile-instr-generate %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-PROFILE %s // RUN: %clang -target x86_64-scei-ps4 -fno-profile-instr-generate %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-NO-PROFILE %s +// RUN: %clang -target x86_64-scei-ps4 -fprofile-instr-generate -fno-profile-instr-generate %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-NO-PROFILE %s +// RUN: %clang -target x86_64-scei-ps4 -fprofile-generate -fno-profile-instr-generate %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-PROFILE %s // RUN: %clang -target x86_64-scei-ps4 -fprofile-instr-generate=somefile.profraw %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-PROFILE %s +// RUN: %clang -target x86_64-scei-ps4 -fcs-profile-generate %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-PROFILE %s +// RUN: %clang -target x86_64-scei-ps4 -fcs-profile-generate -fno-profile-generate %s -### 2>&1 | FileCheck --check-prefix=CHECK-PS4-NO-PROFILE %s // // CHECK-PS4-PROFILE: "--dependent-lib=libclang_rt.profile-x86_64.a" // CHECK-PS4-NO-PROFILE-NOT: "--dependent-lib=libclang_rt.profile-x86_64.a" ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits