From: Nico Weber Date: Thu, 3 Oct 2019 02:38:43 +0000 (+0000) Subject: Revert 373538 and follow-ups 373549 and 373552. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c10a6a0580e007991d1e3c7e6cb120c6289d1f7c;p=clang Revert 373538 and follow-ups 373549 and 373552. They break tests on (at least) macOS. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@373556 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/Action.h b/include/clang/Driver/Action.h index c6e90b2978..c1ff0b1a60 100644 --- a/include/clang/Driver/Action.h +++ b/include/clang/Driver/Action.h @@ -65,7 +65,6 @@ public: BackendJobClass, AssembleJobClass, LinkJobClass, - IfsMergeJobClass, LipoJobClass, DsymutilJobClass, VerifyDebugInfoJobClass, @@ -486,17 +485,6 @@ public: } }; -class IfsMergeJobAction : public JobAction { - void anchor() override; - -public: - IfsMergeJobAction(ActionList &Inputs, types::ID Type); - - static bool classof(const Action *A) { - return A->getKind() == IfsMergeJobClass; - } -}; - class LinkJobAction : public JobAction { void anchor() override; diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index 7fe99e2013..d31c4f46e6 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -633,9 +633,6 @@ def emit_llvm : Flag<["-"], "emit-llvm">, Flags<[CC1Option]>, Group; def emit_iterface_stubs : Flag<["-"], "emit-interface-stubs">, Flags<[CC1Option]>, Group, HelpText<"Generate Inteface Stub Files.">; -def emit_merged_ifs : Flag<["-"], "emit-merged-ifs">, - Flags<[CC1Option]>, Group, - HelpText<"Generate Interface Stub Files, emit merged text not binary.">; def iterface_stub_version_EQ : JoinedOrSeparate<["-"], "interface-stub-version=">, Flags<[CC1Option]>; def exported__symbols__list : Separate<["-"], "exported_symbols_list">; def e : JoinedOrSeparate<["-"], "e">, Group; diff --git a/include/clang/Driver/Phases.h b/include/clang/Driver/Phases.h index 63931c00c8..7199c65784 100644 --- a/include/clang/Driver/Phases.h +++ b/include/clang/Driver/Phases.h @@ -20,8 +20,7 @@ namespace phases { Compile, Backend, Assemble, - Link, - IfsMerge, + Link }; enum { diff --git a/include/clang/Driver/ToolChain.h b/include/clang/Driver/ToolChain.h index 2ba16ab21a..d6ed87574f 100644 --- a/include/clang/Driver/ToolChain.h +++ b/include/clang/Driver/ToolChain.h @@ -136,13 +136,11 @@ private: mutable std::unique_ptr Clang; mutable std::unique_ptr Assemble; mutable std::unique_ptr Link; - mutable std::unique_ptr IfsMerge; mutable std::unique_ptr OffloadBundler; Tool *getClang() const; Tool *getAssemble() const; Tool *getLink() const; - Tool *getIfsMerge() const; Tool *getClangAs() const; Tool *getOffloadBundler() const; diff --git a/include/clang/Driver/Types.def b/include/clang/Driver/Types.def index 79e8d109cd..a33598e7b7 100644 --- a/include/clang/Driver/Types.def +++ b/include/clang/Driver/Types.def @@ -84,8 +84,7 @@ TYPE("lto-bc", LTO_BC, INVALID, "o", phases // Misc. TYPE("ast", AST, INVALID, "ast", phases::Compile, phases::Backend, phases::Assemble, phases::Link) -TYPE("ifs", IFS, INVALID, "ifs", phases::IfsMerge) -TYPE("ifs-cpp", IFS_CPP, INVALID, "ifs", phases::Compile, phases::IfsMerge) +TYPE("ifs", IFS, INVALID, "ifs", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("pcm", ModuleFile, INVALID, "pcm", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("plist", Plist, INVALID, "plist", phases::Compile, phases::Backend, phases::Assemble, phases::Link) TYPE("rewritten-objc", RewrittenObjC,INVALID, "cpp", phases::Compile, phases::Backend, phases::Assemble, phases::Link) diff --git a/lib/Driver/Action.cpp b/lib/Driver/Action.cpp index 0187cf981e..47b03f6643 100644 --- a/lib/Driver/Action.cpp +++ b/lib/Driver/Action.cpp @@ -31,7 +31,6 @@ const char *Action::getClassName(ActionClass AC) { case CompileJobClass: return "compiler"; case BackendJobClass: return "backend"; case AssembleJobClass: return "assembler"; - case IfsMergeJobClass: return "interface-stub-merger"; case LinkJobClass: return "linker"; case LipoJobClass: return "lipo"; case DsymutilJobClass: return "dsymutil"; @@ -358,11 +357,6 @@ void AssembleJobAction::anchor() {} AssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType) : JobAction(AssembleJobClass, Input, OutputType) {} -void IfsMergeJobAction::anchor() {} - -IfsMergeJobAction::IfsMergeJobAction(ActionList &Inputs, types::ID Type) - : JobAction(IfsMergeJobClass, Inputs, Type) {} - void LinkJobAction::anchor() {} LinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type) diff --git a/lib/Driver/CMakeLists.txt b/lib/Driver/CMakeLists.txt index 64b5d70f42..d90c0ff436 100644 --- a/lib/Driver/CMakeLists.txt +++ b/lib/Driver/CMakeLists.txt @@ -66,7 +66,6 @@ add_clang_library(clangDriver ToolChains/WebAssembly.cpp ToolChains/XCore.cpp ToolChains/PPCLinux.cpp - ToolChains/InterfaceStubs.cpp Types.cpp XRayArgs.cpp diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index de7ca40d0c..5233691be6 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -274,11 +274,11 @@ phases::ID Driver::getFinalPhase(const DerivedArgList &DAL, (PhaseArg = DAL.getLastArg(options::OPT__SLASH_P))) { FinalPhase = phases::Preprocess; - // --precompile only runs up to precompilation. + // --precompile only runs up to precompilation. } else if ((PhaseArg = DAL.getLastArg(options::OPT__precompile))) { FinalPhase = phases::Precompile; - // -{fsyntax-only,-analyze,emit-ast} only run up to the compiler. + // -{fsyntax-only,-analyze,emit-ast} only run up to the compiler. } else if ((PhaseArg = DAL.getLastArg(options::OPT_fsyntax_only)) || (PhaseArg = DAL.getLastArg(options::OPT_print_supported_cpus)) || (PhaseArg = DAL.getLastArg(options::OPT_module_file_info)) || @@ -286,23 +286,20 @@ phases::ID Driver::getFinalPhase(const DerivedArgList &DAL, (PhaseArg = DAL.getLastArg(options::OPT_rewrite_objc)) || (PhaseArg = DAL.getLastArg(options::OPT_rewrite_legacy_objc)) || (PhaseArg = DAL.getLastArg(options::OPT__migrate)) || + (PhaseArg = DAL.getLastArg(options::OPT_emit_iterface_stubs)) || (PhaseArg = DAL.getLastArg(options::OPT__analyze)) || (PhaseArg = DAL.getLastArg(options::OPT_emit_ast))) { FinalPhase = phases::Compile; - // clang interface stubs - } else if ((PhaseArg = DAL.getLastArg(options::OPT_emit_iterface_stubs))) { - FinalPhase = phases::IfsMerge; - - // -S only runs up to the backend. + // -S only runs up to the backend. } else if ((PhaseArg = DAL.getLastArg(options::OPT_S))) { FinalPhase = phases::Backend; - // -c compilation only runs up to the assembler. + // -c compilation only runs up to the assembler. } else if ((PhaseArg = DAL.getLastArg(options::OPT_c))) { FinalPhase = phases::Assemble; - // Otherwise do everything. + // Otherwise do everything. } else FinalPhase = phases::Link; @@ -3326,7 +3323,6 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args, // Construct the actions to perform. HeaderModulePrecompileJobAction *HeaderModuleAction = nullptr; ActionList LinkerInputs; - ActionList MergerInputs; for (auto &I : Inputs) { types::ID InputType = I.first; @@ -3364,17 +3360,6 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args, break; } - // TODO: Consider removing this because the merged may not end up being - // the final Phase in the pipeline. Perhaps the merged could just merge - // and then pass an artifact of some sort to the Link Phase. - // Queue merger inputs. - if (Phase == phases::IfsMerge) { - assert(Phase == PL.back() && "merging must be final compilation step."); - MergerInputs.push_back(Current); - Current = nullptr; - break; - } - // Each precompiled header file after a module file action is a module // header of that same module file, rather than being compiled to a // separate PCH. @@ -3424,11 +3409,6 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args, Actions.push_back(LA); } - // Add an interface stubs merge action if necessary. - if (!MergerInputs.empty()) - Actions.push_back( - C.MakeAction(MergerInputs, types::TY_Image)); - // If --print-supported-cpus, -mcpu=? or -mtune=? is specified, build a custom // Compile phase that prints out supported cpu models and quits. if (Arg *A = Args.getLastArg(options::OPT_print_supported_cpus)) { @@ -3465,8 +3445,6 @@ Action *Driver::ConstructPhaseAction( switch (Phase) { case phases::Link: llvm_unreachable("link action invalid here."); - case phases::IfsMerge: - llvm_unreachable("ifsmerge action invalid here."); case phases::Preprocess: { types::ID OutputTy; // -M and -MM specify the dependency file name by altering the output type, @@ -3531,7 +3509,7 @@ Action *Driver::ConstructPhaseAction( if (Args.hasArg(options::OPT_verify_pch)) return C.MakeAction(Input, types::TY_Nothing); if (Args.hasArg(options::OPT_emit_iterface_stubs)) - return C.MakeAction(Input, types::TY_IFS_CPP); + return C.MakeAction(Input, types::TY_IFS); return C.MakeAction(Input, types::TY_LLVM_BC); } case phases::Backend: { diff --git a/lib/Driver/Phases.cpp b/lib/Driver/Phases.cpp index 01598c59bd..5b776c63f7 100644 --- a/lib/Driver/Phases.cpp +++ b/lib/Driver/Phases.cpp @@ -20,7 +20,6 @@ const char *phases::getPhaseName(ID Id) { case Backend: return "backend"; case Assemble: return "assembler"; case Link: return "linker"; - case IfsMerge: return "ifsmerger"; } llvm_unreachable("Invalid phase id."); diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp index db2497a108..4379da99d0 100644 --- a/lib/Driver/ToolChain.cpp +++ b/lib/Driver/ToolChain.cpp @@ -10,7 +10,6 @@ #include "InputInfo.h" #include "ToolChains/Arch/ARM.h" #include "ToolChains/Clang.h" -#include "ToolChains/InterfaceStubs.h" #include "clang/Basic/ObjCRuntime.h" #include "clang/Basic/Sanitizers.h" #include "clang/Config/config.h" @@ -280,12 +279,6 @@ Tool *ToolChain::getLink() const { return Link.get(); } -Tool *ToolChain::getIfsMerge() const { - if (!IfsMerge) - IfsMerge.reset(new tools::ifstool::Merger(*this)); - return IfsMerge.get(); -} - Tool *ToolChain::getOffloadBundler() const { if (!OffloadBundler) OffloadBundler.reset(new tools::OffloadBundler(*this)); @@ -297,9 +290,6 @@ Tool *ToolChain::getTool(Action::ActionClass AC) const { case Action::AssembleJobClass: return getAssemble(); - case Action::IfsMergeJobClass: - return getIfsMerge(); - case Action::LinkJobClass: return getLink(); diff --git a/lib/Driver/ToolChains/Clang.cpp b/lib/Driver/ToolChains/Clang.cpp index 26e8bc60bf..8628741f7d 100644 --- a/lib/Driver/ToolChains/Clang.cpp +++ b/lib/Driver/ToolChains/Clang.cpp @@ -3683,15 +3683,32 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, } else if (JA.getType() == types::TY_LLVM_BC || JA.getType() == types::TY_LTO_BC) { CmdArgs.push_back("-emit-llvm-bc"); - } else if (JA.getType() == types::TY_IFS || - JA.getType() == types::TY_IFS_CPP) { + } else if (JA.getType() == types::TY_IFS) { StringRef ArgStr = Args.hasArg(options::OPT_iterface_stub_version_EQ) ? Args.getLastArgValue(options::OPT_iterface_stub_version_EQ) - : "experimental-ifs-v1"; + : ""; + StringRef StubFormat = + llvm::StringSwitch(ArgStr) + .Case("experimental-ifs-v1", "experimental-ifs-v1") + .Default(""); + + if (StubFormat.empty()) { + std::string ErrorMessage = + "Invalid interface stub format: " + ArgStr.str() + + ((ArgStr == "experimental-yaml-elf-v1" || + ArgStr == "experimental-tapi-elf-v1") + ? " is deprecated." + : "."); + D.Diag(diag::err_drv_invalid_value) + << "Must specify a valid interface stub format type, ie: " + "-interface-stub-version=experimental-ifs-v1" + << ErrorMessage; + } + CmdArgs.push_back("-emit-interface-stubs"); CmdArgs.push_back( - Args.MakeArgString(Twine("-interface-stub-version=") + ArgStr.str())); + Args.MakeArgString(Twine("-interface-stub-version=") + StubFormat)); } else if (JA.getType() == types::TY_PP_Asm) { CmdArgs.push_back("-S"); } else if (JA.getType() == types::TY_AST) { diff --git a/lib/Driver/ToolChains/InterfaceStubs.cpp b/lib/Driver/ToolChains/InterfaceStubs.cpp deleted file mode 100644 index 6677843b2c..0000000000 --- a/lib/Driver/ToolChains/InterfaceStubs.cpp +++ /dev/null @@ -1,37 +0,0 @@ -//===--- InterfaceStubs.cpp - Base InterfaceStubs Implementations C++ ---===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "InterfaceStubs.h" -#include "CommonArgs.h" -#include "clang/Driver/Compilation.h" - -namespace clang { -namespace driver { -namespace tools { -namespace ifstool { -void Merger::ConstructJob(Compilation &C, const JobAction &JA, - const InputInfo &Output, const InputInfoList &Inputs, - const llvm::opt::ArgList &Args, - const char *LinkingOutput) const { - std::string Merger = getToolChain().GetProgramPath(getShortName()); - llvm::opt::ArgStringList CmdArgs; - CmdArgs.push_back("-action"); - CmdArgs.push_back(Args.getLastArg(options::OPT_emit_merged_ifs) - ? "write-ifs" - : "write-bin"); - CmdArgs.push_back("-o"); - CmdArgs.push_back(Output.getFilename()); - for (const auto &Input : Inputs) - CmdArgs.push_back(Input.getFilename()); - C.addCommand(std::make_unique(JA, *this, Args.MakeArgString(Merger), - CmdArgs, Inputs)); -} -} // namespace ifstool -} // namespace tools -} // namespace driver -} // namespace clang diff --git a/lib/Driver/ToolChains/InterfaceStubs.h b/lib/Driver/ToolChains/InterfaceStubs.h deleted file mode 100644 index 4afa73701a..0000000000 --- a/lib/Driver/ToolChains/InterfaceStubs.h +++ /dev/null @@ -1,36 +0,0 @@ -//===--- InterfaceStubs.cpp - Base InterfaceStubs Implementations C++ ---===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_IFS_H -#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_IFS_H - -#include "clang/Driver/Tool.h" -#include "clang/Driver/ToolChain.h" - -namespace clang { -namespace driver { -namespace tools { -namespace ifstool { -class LLVM_LIBRARY_VISIBILITY Merger : public Tool { -public: - Merger(const ToolChain &TC) : Tool("IFS::Merger", "llvm-ifs", TC) {} - - bool hasIntegratedCPP() const override { return false; } - bool isLinkJob() const override { return false; } - - void ConstructJob(Compilation &C, const JobAction &JA, - const InputInfo &Output, const InputInfoList &Inputs, - const llvm::opt::ArgList &TCArgs, - const char *LinkingOutput) const override; -}; -} // end namespace ifstool -} // end namespace tools -} // end namespace driver -} // end namespace clang - -#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_IFS_H diff --git a/lib/Driver/Types.cpp b/lib/Driver/Types.cpp index 6241fac0c8..da01e1acfc 100644 --- a/lib/Driver/Types.cpp +++ b/lib/Driver/Types.cpp @@ -269,7 +269,6 @@ types::ID types::lookupTypeForExtension(llvm::StringRef Ext) { .Case("lib", TY_Object) .Case("mii", TY_PP_ObjCXX) .Case("obj", TY_Object) - .Case("ifs", TY_IFS) .Case("pch", TY_PCH) .Case("pcm", TY_ModuleFile) .Case("c++m", TY_CXXModule) @@ -320,22 +319,6 @@ void types::getCompilationPhases(const clang::driver::Driver &Driver, llvm::copy_if(PhaseList, std::back_inserter(P), [](phases::ID Phase) { return Phase <= phases::Precompile; }); - // Treat Interface Stubs like its own compilation mode. - else if (DAL.getLastArg(options::OPT_emit_iterface_stubs)) { - llvm::SmallVector IfsModePhaseList; - llvm::SmallVector &PL = PhaseList; - phases::ID LastPhase = phases::IfsMerge; - if (Id != types::TY_IFS) { - if (DAL.hasArg(options::OPT_c)) - LastPhase = phases::Compile; - PL = IfsModePhaseList; - types::getCompilationPhases(types::TY_IFS_CPP, PL); - } - llvm::copy_if(PL, std::back_inserter(P), [&](phases::ID Phase) { - return Phase <= LastPhase; - }); - } - // -{fsyntax-only,-analyze,emit-ast} only run up to the compiler. else if (DAL.getLastArg(options::OPT_fsyntax_only) || DAL.getLastArg(options::OPT_print_supported_cpus) || @@ -344,6 +327,7 @@ void types::getCompilationPhases(const clang::driver::Driver &Driver, DAL.getLastArg(options::OPT_rewrite_objc) || DAL.getLastArg(options::OPT_rewrite_legacy_objc) || DAL.getLastArg(options::OPT__migrate) || + DAL.getLastArg(options::OPT_emit_iterface_stubs) || DAL.getLastArg(options::OPT__analyze) || DAL.getLastArg(options::OPT_emit_ast)) llvm::copy_if(PhaseList, std::back_inserter(P), diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 6fc8afcf3c..61a2c07890 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -1734,25 +1734,24 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, StringRef ArgStr = Args.hasArg(OPT_iterface_stub_version_EQ) ? Args.getLastArgValue(OPT_iterface_stub_version_EQ) - : "experimental-ifs-v1"; - if (ArgStr == "experimental-yaml-elf-v1" || - ArgStr == "experimental-tapi-elf-v1") { + : ""; + llvm::Optional ProgramAction = + llvm::StringSwitch>(ArgStr) + .Case("experimental-ifs-v1", frontend::GenerateInterfaceIfsExpV1) + .Default(llvm::None); + if (!ProgramAction) { std::string ErrorMessage = "Invalid interface stub format: " + ArgStr.str() + - " is deprecated."; - Diags.Report(diag::err_drv_invalid_value) - << "Must specify a valid interface stub format type, ie: " - "-interface-stub-version=experimental-ifs-v1" - << ErrorMessage; - } else if (ArgStr != "experimental-ifs-v1") { - std::string ErrorMessage = - "Invalid interface stub format: " + ArgStr.str() + "."; + ((ArgStr == "experimental-yaml-elf-v1" || + ArgStr == "experimental-tapi-elf-v1") + ? " is deprecated." + : "."); Diags.Report(diag::err_drv_invalid_value) << "Must specify a valid interface stub format type, ie: " "-interface-stub-version=experimental-ifs-v1" << ErrorMessage; } else { - Opts.ProgramAction = frontend::GenerateInterfaceIfsExpV1; + Opts.ProgramAction = *ProgramAction; } break; } diff --git a/test/InterfaceStubs/bad-format.cpp b/test/InterfaceStubs/bad-format.cpp index 4d51ac867e..f13ea2fc76 100644 --- a/test/InterfaceStubs/bad-format.cpp +++ b/test/InterfaceStubs/bad-format.cpp @@ -1,25 +1,28 @@ -// RUN: not %clang -emit-interface-stubs -interface-stub-version=bad-format %s 2>&1 | \ -// RUN: FileCheck %s +// REQUIRES: x86-registered-target +// RUN: not %clang -target x86_64-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=bar-format %s 2>&1 | FileCheck %s -// RUN: not %clang -emit-interface-stubs -interface-stub-version=experimental-tapi-elf-v1 %s 2>&1 | \ +// RUN: not %clang -target x86_64-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 %s 2>&1 | \ // RUN: FileCheck -check-prefix=CHECK-TAPI-DEPRECATED %s -// RUN: not %clang -emit-interface-stubs -interface-stub-version=experimental-yaml-elf-v1 %s 2>&1 | \ +// RUN: not %clang -target x86_64-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-yaml-elf-v1 %s 2>&1 | \ // RUN: FileCheck -check-prefix=CHECK-YAML-DEPRECATED %s -// RUN: not %clang -emit-interface-stubs -interface-stub-version=bad-format %s 2>&1 | \ -// RUN: FileCheck %s +// RUN: not %clang_cc1 -target x86_64-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=bar-format %s 2>&1 | FileCheck %s -// RUN: not %clang -emit-interface-stubs \ +// RUN: not %clang_cc1 -target x86_64-linux-gnu -o - -emit-interface-stubs \ // RUN: -interface-stub-version=experimental-tapi-elf-v1 %s 2>&1 | \ // RUN: FileCheck -check-prefix=CHECK-TAPI-DEPRECATED %s -// RUN: not %clang -emit-interface-stubs \ +// RUN: not %clang_cc1 -target x86_64-linux-gnu -o - -emit-interface-stubs \ // RUN: -interface-stub-version=experimental-yaml-elf-v1 %s 2>&1 | \ // RUN: FileCheck -check-prefix=CHECK-YAML-DEPRECATED %s // CHECK: error: invalid value -// CHECK: 'Invalid interface stub format: bad-format.' in 'Must specify a +// CHECK: 'Invalid interface stub format: bar-format.' in 'Must specify a // CHECK: valid interface stub format type, ie: // CHECK: -interface-stub-version=experimental-ifs-v1' diff --git a/test/InterfaceStubs/class-template-specialization.cpp b/test/InterfaceStubs/class-template-specialization.cpp index 0a68d3f1f1..29e4593904 100644 --- a/test/InterfaceStubs/class-template-specialization.cpp +++ b/test/InterfaceStubs/class-template-specialization.cpp @@ -1,9 +1,9 @@ // REQUIRES: x86-registered-target -// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -emit-merged-ifs \ +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ // RUN: -interface-stub-version=experimental-ifs-v1 %s | \ // RUN: FileCheck -check-prefix=CHECK-TAPI %s -// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -emit-merged-ifs \ +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ // RUN: -interface-stub-version=experimental-ifs-v1 %s | \ // RUN: FileCheck -check-prefix=CHECK-TAPI2 %s // RUN: %clang -target x86_64-unknown-linux-gnu -o - -c %s | \ diff --git a/test/InterfaceStubs/conflict-type.ifs b/test/InterfaceStubs/conflict-type.ifs deleted file mode 100644 index aaa04775e3..0000000000 --- a/test/InterfaceStubs/conflict-type.ifs +++ /dev/null @@ -1,16 +0,0 @@ -# RUN: not %clang -emit-merged-ifs -emit-interface-stubs -o - %s %S/func.ifs 2>&1 | \ -# RUN: FileCheck %s --check-prefixes=CHECK-IFS - -# Here we are testing to see if two symbols with identical names will fail to -# merge in conflict due to mismatched types. -# CHECK-IFS: error: Interface Stub: Type Mismatch for a. -# CHECK-IFS-NEXT: Filename: -# CHECK-IFS-NEXT: Type Values: Object Func - ---- !experimental-ifs-v1 -IfsVersion: 1.0 -Triple: x86_64-linux-gnu -ObjectFileFormat: ELF -Symbols: - a: { Type: Object, Size: 1 } -... diff --git a/test/InterfaceStubs/driver-test.c b/test/InterfaceStubs/driver-test.c deleted file mode 100644 index 12606affb7..0000000000 --- a/test/InterfaceStubs/driver-test.c +++ /dev/null @@ -1,19 +0,0 @@ -// REQUIRES: x86-registered-target - -// RUN: %clang -target x86_64-unknown-linux-gnu -x c -o %t1.so -emit-interface-stubs %s %S/object.c %S/weak.cpp && \ -// RUN: llvm-nm %t1.so 2>&1 | FileCheck --check-prefix=CHECK-IFS %s - -// RUN: %clang -target x86_64-unknown-linux-gnu -x c -o %t2.so -shared %s %S/object.c %S/weak.cpp && \ -// RUN: llvm-nm %t2.so 2>&1 | FileCheck --check-prefix=CHECK-SO %s - -// CHECK-IFS-DAG: data -// CHECK-IFS-DAG: foo -// CHECK-IFS-DAG: strongFunc -// CHECK-IFS-DAG: weakFunc - -// CHECK-SO-DAG: data -// CHECK-SO-DAG: foo -// CHECK-SO-DAG: strongFunc -// CHECK-SO-DAG: weakFunc - -int foo(int bar) { return 42 + 1844; } diff --git a/test/InterfaceStubs/externstatic.c b/test/InterfaceStubs/externstatic.c index 37d5b7db19..bc1aef477b 100644 --- a/test/InterfaceStubs/externstatic.c +++ b/test/InterfaceStubs/externstatic.c @@ -1,20 +1,24 @@ -// RUN: %clang -c -DSTORAGE="extern" -o - -emit-interface-stubs -std=c99 -xc %s | \ +// REQUIRES: x86-registered-target +// RUN: %clang -DSTORAGE="extern" -target x86_64-unknown-linux-gnu -o - \ +// RUN: -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 -std=c99 -xc %s | \ // RUN: FileCheck -check-prefix=CHECK-EXTERN %s - -// RUN: %clang -DSTORAGE="extern" -O0 -o - -c -std=c99 \ +// RUN: %clang -DSTORAGE="extern" -target x86_64-linux-gnu -O0 -o - -c -std=c99 \ // RUN: -xc %s | llvm-nm - 2>&1 | FileCheck -check-prefix=CHECK-EXTERN %s -// RUN: %clang -c -DSTORAGE="extern" -o - -emit-interface-stubs -std=c99 -xc %s | \ -// RUN: FileCheck -check-prefix=CHECK-EXTERN2 %s - -// RUN: %clang -DSTORAGE="extern" -O0 -o - -c -std=c99 -xc %s | llvm-nm - 2>&1 | \ +// RUN: %clang -DSTORAGE="extern" -target x86_64-unknown-linux-gnu -o - \ +// RUN: -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 -std=c99 -xc %s | \ // RUN: FileCheck -check-prefix=CHECK-EXTERN2 %s +// RUN: %clang -DSTORAGE="extern" -target x86_64-linux-gnu -O0 -o - -c -std=c99 \ +// RUN: -xc %s | llvm-nm - 2>&1 | FileCheck -check-prefix=CHECK-EXTERN2 %s -// RUN: %clang -c -DSTORAGE="static" -o - -emit-interface-stubs -std=c99 -xc %s | \ -// RUN: FileCheck -check-prefix=CHECK-STATIC %s - -// RUN: %clang -DSTORAGE="static" -O0 -o - -c -std=c99 -xc %s | llvm-nm - 2>&1 | \ +// RUN: %clang -DSTORAGE="static" -target x86_64-unknown-linux-gnu -o - \ +// RUN: -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 -std=c99 -xc %s | \ // RUN: FileCheck -check-prefix=CHECK-STATIC %s +// RUN: %clang -DSTORAGE="static" -target x86_64-linux-gnu -O0 -o - -c -std=c99 \ +// RUN: -xc %s | llvm-nm - 2>&1 | FileCheck -check-prefix=CHECK-STATIC %s // CHECK-EXTERN-NOT: foo // CHECK-STATIC-NOT: foo diff --git a/test/InterfaceStubs/func.ifs b/test/InterfaceStubs/func.ifs deleted file mode 100644 index d115523bfd..0000000000 --- a/test/InterfaceStubs/func.ifs +++ /dev/null @@ -1,40 +0,0 @@ -# RUN: %clang -emit-interface-stubs -o - %s %S/object.ifs -emit-merged-ifs | \ -# RUN: FileCheck %s --check-prefixes=CHECK-IFS - -# RUN: %clang -emit-interface-stubs -o - %s %S/object.ifs | llvm-readelf --all | \ -# RUN: FileCheck %s --check-prefixes=CHECK-ELF - -# RUN: %clang -emit-interface-stubs -o - %s %s -emit-merged-ifs | \ -# RUN: FileCheck %s --check-prefixes=CHECK-MERGE-IFS - -# CHECK-IFS: --- !experimental-ifs-v1 -# CHECK-IFS-NEXT: IfsVersion: 1.0 -# CHECK-IFS-NEXT: Triple: x86_64-linux-gnu -# CHECK-IFS-NEXT: ObjectFileFormat: ELF -# CHECK-IFS-NEXT: Symbols: -# CHECK-IFS-DAG: a: { Type: Func } -# CHECK-IFS-DAG: b: { Type: Object, Size: 4 } -# CHECK-IFS: ... - -# CHECK-ELF: ELF Header: -# CHECK-ELF: Class: ELF64 -# CHECK-ELF: Type: DYN (Shared object file) -# CHECK-ELF: FUNC GLOBAL DEFAULT 1 a -# CHECK-ELF: OBJECT GLOBAL DEFAULT 1 b - -# Here we are testing to see if two identical symbols will merge. -# CHECK-MERGE-IFS: --- !experimental-ifs-v1 -# CHECK-MERGE-IFS-NEXT: IfsVersion: 1.0 -# CHECK-MERGE-IFS-NEXT: Triple: x86_64-linux-gnu -# CHECK-MERGE-IFS-NEXT: ObjectFileFormat: ELF -# CHECK-MERGE-IFS-NEXT: Symbols: -# CHECK-MERGE-IFS-NEXT: a: { Type: Func } -# CHECK-MERGE-IFS-NEXT: ... - ---- !experimental-ifs-v1 -IfsVersion: 1.0 -Triple: x86_64-linux-gnu -ObjectFileFormat: ELF -Symbols: - a: { Type: Func } -... diff --git a/test/InterfaceStubs/function-template-specialization.cpp b/test/InterfaceStubs/function-template-specialization.cpp index f6ec64bcd9..f6e5c87e7f 100644 --- a/test/InterfaceStubs/function-template-specialization.cpp +++ b/test/InterfaceStubs/function-template-specialization.cpp @@ -1,15 +1,13 @@ // REQUIRES: x86-registered-target - -// TODO: Fix the case in llvm-ifs where it crashes on an empty Symbols list. -// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -c \ +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ // RUN: -interface-stub-version=experimental-ifs-v1 %s | FileCheck %s -// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -emit-merged-ifs \ +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ // RUN: -interface-stub-version=experimental-ifs-v1 \ // RUN: -DUSE_TEMPLATE_FUNCTION=1 %s | \ // RUN: FileCheck -check-prefix=CHECK-USES-TEMPLATE-FUNCTION %s -// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -emit-merged-ifs \ +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ // RUN: -interface-stub-version=experimental-ifs-v1 \ // RUN: -DSPECIALIZE_TEMPLATE_FUNCTION=1 %s | \ // RUN: FileCheck -check-prefix=CHECK-SPECIALIZES-TEMPLATE-FUNCTION %s diff --git a/test/InterfaceStubs/inline.c b/test/InterfaceStubs/inline.c index 06a58c4c1b..e32b4e1009 100644 --- a/test/InterfaceStubs/inline.c +++ b/test/InterfaceStubs/inline.c @@ -1,32 +1,37 @@ // REQUIRES: x86-registered-target -// RUN: %clang -c -DINLINE=inline -target x86_64-unknown-linux-gnu -o - \ -// RUN: -emit-interface-stubs -std=gnu89 -xc %s | \ +// RUN: %clang -DINLINE=inline -target x86_64-unknown-linux-gnu -o - \ +// RUN: -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 -std=gnu89 -xc %s | \ // RUN: FileCheck -check-prefix=CHECK-GNU %s // RUN: %clang -DINLINE=inline -target x86_64-linux-gnu -O0 -o - -c \ // RUN: -std=gnu89 -xc %s | llvm-nm - | FileCheck -check-prefix=CHECK-GNU %s -// RUN: %clang -c -DINLINE="__attribute__((always_inline))" \ -// RUN: -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -xc %s | \ +// RUN: %clang -DINLINE="__attribute__((always_inline))" \ +// RUN: -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 -xc %s | \ // RUN: FileCheck -check-prefix=CHECK-GNU %s // RUN: %clang -DINLINE="__attribute__((always_inline))" \ // RUN: -target x86_64-linux-gnu -O0 -o - -c -xc %s | \ // RUN: llvm-nm - | FileCheck -check-prefix=CHECK-GNU %s -// RUN: %clang -c -DINLINE=inline -target x86_64-unknown-linux-gnu -o - \ -// RUN: -emit-interface-stubs -std=c99 -xc %s | \ +// RUN: %clang -DINLINE=inline -target x86_64-unknown-linux-gnu -o - \ +// RUN: -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 -std=c99 -xc %s | \ // RUN: FileCheck -check-prefix=CHECK-STD %s // RUN: %clang -DINLINE=inline -target x86_64-linux-gnu -O0 -o - -c -std=c99 \ // RUN: -xc %s | llvm-nm - 2>&1 | FileCheck -check-prefix=CHECK-STD %s -// RUN: %clang -c -DINLINE="__attribute__((noinline))" \ -// RUN: -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -std=c99 -xc %s | \ +// RUN: %clang -DINLINE="__attribute__((noinline))" \ +// RUN: -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 -std=c99 -xc %s | \ // RUN: FileCheck -check-prefix=CHECK-NOINLINE %s // RUN: %clang -DINLINE="__attribute__((noinline))" -target x86_64-linux-gnu \ // RUN: -O0 -o - -c -std=c99 -xc %s | llvm-nm - 2>&1 | \ // RUN: FileCheck -check-prefix=CHECK-NOINLINE %s -// RUN: %clang -c -DINLINE="static" -target x86_64-unknown-linux-gnu -o - \ -// RUN: -emit-interface-stubs -std=c99 -xc %s | \ +// RUN: %clang -DINLINE="static" -target x86_64-unknown-linux-gnu -o - \ +// RUN: -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 -std=c99 -xc %s | \ // RUN: FileCheck -check-prefix=CHECK-STATIC %s // RUN: %clang -DINLINE="static" -target x86_64-linux-gnu -O0 -o - -c \ // RUN: -std=c99 -xc %s | llvm-nm - 2>&1 | \ @@ -45,12 +50,12 @@ INLINE int foo() { return var; } -// RUN: %clang -c -DINLINE=inline -target x86_64-linux-gnu -o - \ -// RUN: -emit-interface-stubs \ +// RUN: %clang -DINLINE=inline -target x86_64-linux-gnu -o - \ +// RUN: -emit-interface-stubs -interface-stub-version=experimental-ifs-v1 \ // RUN: -std=gnu89 -xc %s | FileCheck -check-prefix=CHECK-TAPI %s -// RUN: %clang -c -DINLINE=inline -target x86_64-linux-gnu -o - \ -// RUN: -emit-interface-stubs \ +// RUN: %clang -DINLINE=inline -target x86_64-linux-gnu -o - \ +// RUN: -emit-interface-stubs -interface-stub-version=experimental-ifs-v1 \ // RUN: -std=gnu89 -xc %s | FileCheck -check-prefix=CHECK-SYMBOLS %s // RUN: %clang -DINLINE=inline -target x86_64-linux-gnu -o - \ // RUN: -c -std=gnu89 -xc %s | llvm-nm - 2>&1 | \ diff --git a/test/InterfaceStubs/merge-conflict-test.c b/test/InterfaceStubs/merge-conflict-test.c deleted file mode 100644 index 2d006148ba..0000000000 --- a/test/InterfaceStubs/merge-conflict-test.c +++ /dev/null @@ -1,3 +0,0 @@ -// RUN: not %clang -o libfoo.so -emit-interface-stubs %s %S/driver-test.c 2>&1 | FileCheck %s -// CHECK: error: Interface Stub: Type Mismatch -int foo; \ No newline at end of file diff --git a/test/InterfaceStubs/object-double.c b/test/InterfaceStubs/object-double.c deleted file mode 100644 index c6d2b61a4d..0000000000 --- a/test/InterfaceStubs/object-double.c +++ /dev/null @@ -1,5 +0,0 @@ -// RUN: not %clang -o - -emit-interface-stubs %s %S/object.c 2>&1 | FileCheck %s -// Need to encode more type info or weak vs strong symbol resolution in llvm-ifs -// XFAIL: * -// CHECK: error: Interface Stub: Size Mismatch -float data = 42.0; \ No newline at end of file diff --git a/test/InterfaceStubs/object-float.c b/test/InterfaceStubs/object-float.c deleted file mode 100644 index 6dd056bb85..0000000000 --- a/test/InterfaceStubs/object-float.c +++ /dev/null @@ -1,3 +0,0 @@ -// RUN: not %clang -o - -emit-interface-stubs %s %S/object.c 2>&1 | FileCheck %s -// CHECK: error: Interface Stub: Size Mismatch -double data = 42.0; \ No newline at end of file diff --git a/test/InterfaceStubs/object.c b/test/InterfaceStubs/object.c deleted file mode 100644 index b07bea930e..0000000000 --- a/test/InterfaceStubs/object.c +++ /dev/null @@ -1,7 +0,0 @@ -// RUN: %clang -c -o - -emit-interface-stubs %s | FileCheck -check-prefix=CHECK-TAPI %s -// RUN: %clang -c -o - -emit-interface-stubs %s | FileCheck -check-prefix=CHECK-SYMBOLS %s -// RUN: %clang -c -o - %s | llvm-nm - 2>&1 | FileCheck -check-prefix=CHECK-SYMBOLS %s - -// CHECK-TAPI: data: { Type: Object, Size: 4 } -// CHECK-SYMBOLS: data -int data = 42; diff --git a/test/InterfaceStubs/object.cpp b/test/InterfaceStubs/object.cpp new file mode 100644 index 0000000000..7f11fe6bf3 --- /dev/null +++ b/test/InterfaceStubs/object.cpp @@ -0,0 +1,14 @@ +// REQUIRES: x86-registered-target +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 %s | \ +// RUN: FileCheck -check-prefix=CHECK-TAPI %s + +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-ifs-v1 %s | \ +// RUN: FileCheck -check-prefix=CHECK-SYMBOLS %s +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -c %s | llvm-nm - 2>&1 | \ +// RUN: FileCheck -check-prefix=CHECK-SYMBOLS %s + +// CHECK-TAPI: data: { Type: Object, Size: 4 } +// CHECK-SYMBOLS: data +int data = 42; diff --git a/test/InterfaceStubs/object.ifs b/test/InterfaceStubs/object.ifs deleted file mode 100644 index 7dc1134bac..0000000000 --- a/test/InterfaceStubs/object.ifs +++ /dev/null @@ -1,28 +0,0 @@ -# RUN: %clang -emit-interface-stubs -o - -emit-merged-ifs %s | \ -# RUN: FileCheck %s --check-prefixes=CHECK-IFS - -# RUN: %clang -emit-interface-stubs -o - %s | llvm-readelf --all | \ -# RUN: FileCheck %s --check-prefixes=CHECK-ELF - -# CHECK-IFS: --- !experimental-ifs-v1 -# CHECK-IFS-NEXT: IfsVersion: 1.0 -# CHECK-IFS-NEXT: Triple: x86_64-linux-gnu -# CHECK-IFS-NEXT: ObjectFileFormat: ELF -# CHECK-IFS-NEXT: Symbols: -# CHECK-IFS-NEXT: b: { Type: Object, Size: 4 } -# CHECK-IFS-NEXT: ... - -# CHECK-ELF: ELF Header: -# CHECK-ELF: Class: ELF64 -# CHECK-ELF: Data: 2's complement, little endian -# CHECK-ELF: Type: DYN (Shared object file) -# CHECK-ELF-NOT: FUNC GLOBAL DEFAULT 1 a -# CHECK-ELF: OBJECT GLOBAL DEFAULT 1 b - ---- !experimental-ifs-v1 -IfsVersion: 1.0 -Triple: x86_64-linux-gnu -ObjectFileFormat: ELF -Symbols: - b: { Type: Object, Size: 4 } -... diff --git a/test/InterfaceStubs/template-namespace-function.cpp b/test/InterfaceStubs/template-namespace-function.cpp index ad8606757c..4956525b40 100644 --- a/test/InterfaceStubs/template-namespace-function.cpp +++ b/test/InterfaceStubs/template-namespace-function.cpp @@ -1,5 +1,5 @@ // REQUIRES: x86-registered-target -// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs -emit-merged-ifs \ +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ // RUN: -interface-stub-version=experimental-ifs-v1 %s | \ // RUN: FileCheck %s diff --git a/test/InterfaceStubs/weak.cpp b/test/InterfaceStubs/weak.cpp index e1c2c232a9..13b7e5aa29 100644 --- a/test/InterfaceStubs/weak.cpp +++ b/test/InterfaceStubs/weak.cpp @@ -1,5 +1,5 @@ // REQUIRES: x86-registered-target -// RUN: %clang -target x86_64-linux-gnu -o - -emit-interface-stubs -emit-merged-ifs \ +// RUN: %clang -target x86_64-linux-gnu -o - -emit-interface-stubs \ // RUN: -interface-stub-version=experimental-ifs-v1 %s | \ // RUN: FileCheck %s diff --git a/test/lit.cfg.py b/test/lit.cfg.py index 1ffb6d094d..9ffe30ec50 100644 --- a/test/lit.cfg.py +++ b/test/lit.cfg.py @@ -26,7 +26,7 @@ config.test_format = lit.formats.ShTest(not llvm_config.use_lit_shell) # suffixes: A list of file extensions to treat as test files. config.suffixes = ['.c', '.cpp', '.cppm', '.m', '.mm', '.cu', - '.ll', '.cl', '.s', '.S', '.modulemap', '.test', '.rs', '.ifs'] + '.ll', '.cl', '.s', '.S', '.modulemap', '.test', '.rs'] # excludes: A list of directories to exclude from the testsuite. The 'Inputs' # subdirectories contain auxiliary inputs for various tests in their parent @@ -61,7 +61,7 @@ config.substitutions.append(('%PATH%', config.environment['PATH'])) tool_dirs = [config.clang_tools_dir, config.llvm_tools_dir] tools = [ - 'c-index-test', 'clang-diff', 'clang-format', 'clang-tblgen', 'opt', 'llvm-ifs', + 'c-index-test', 'clang-diff', 'clang-format', 'clang-tblgen', 'opt', ToolSubst('%clang_extdef_map', command=FindTool( 'clang-extdef-mapping'), unresolved='ignore'), ]