[PATCH] D140896: [WIP] Move from llvm::makeArrayRef to ArrayRef deduction guides
This revision was not accepted when it landed; it landed in state "Needs Review". This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG3677ee65d192: Move from llvm::makeArrayRef to ArrayRef deduction guides (authored by serge-sans-paille). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140896/new/ https://reviews.llvm.org/D140896 Files: llvm/include/llvm/ADT/ArrayRef.h Index: llvm/include/llvm/ADT/ArrayRef.h === --- llvm/include/llvm/ADT/ArrayRef.h +++ llvm/include/llvm/ADT/ArrayRef.h @@ -466,9 +466,44 @@ ~OwningArrayRef() { delete[] this->data(); } }; - /// @name ArrayRef Convenience constructors + /// @name ArrayRef Deduction guides /// @{ + /// Deduction guide to construct an ArrayRef from a single element. + template ArrayRef(const T ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a pointer and length + template ArrayRef(const T *data, size_t length) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a range + template ArrayRef(const T *data, const T *end) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a SmallVector + template ArrayRef(const SmallVectorImpl ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a SmallVector + template + ArrayRef(const SmallVector ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a std::vector + template ArrayRef(const std::vector ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a std::array + template + ArrayRef(const std::array ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from an ArrayRef (no-op) (const) + template ArrayRef(const ArrayRef ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from an ArrayRef (no-op) + template ArrayRef(ArrayRef ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a C array. + template ArrayRef(const T ()[N]) -> ArrayRef; + /// @} + + /// @name ArrayRef Convenience constructors + /// @{ /// Construct an ArrayRef from a single element. template ArrayRef makeArrayRef(const T ) { Index: llvm/include/llvm/ADT/ArrayRef.h === --- llvm/include/llvm/ADT/ArrayRef.h +++ llvm/include/llvm/ADT/ArrayRef.h @@ -466,9 +466,44 @@ ~OwningArrayRef() { delete[] this->data(); } }; - /// @name ArrayRef Convenience constructors + /// @name ArrayRef Deduction guides /// @{ + /// Deduction guide to construct an ArrayRef from a single element. + template ArrayRef(const T ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a pointer and length + template ArrayRef(const T *data, size_t length) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a range + template ArrayRef(const T *data, const T *end) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a SmallVector + template ArrayRef(const SmallVectorImpl ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a SmallVector + template + ArrayRef(const SmallVector ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a std::vector + template ArrayRef(const std::vector ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a std::array + template + ArrayRef(const std::array ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from an ArrayRef (no-op) (const) + template ArrayRef(const ArrayRef ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from an ArrayRef (no-op) + template ArrayRef(ArrayRef ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a C array. + template ArrayRef(const T ()[N]) -> ArrayRef; + /// @} + + /// @name ArrayRef Convenience constructors + /// @{ /// Construct an ArrayRef from a single element. template ArrayRef makeArrayRef(const T ) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140896: [WIP] Move from llvm::makeArrayRef to ArrayRef deduction guides
serge-sans-paille updated this revision to Diff 486172. serge-sans-paille added a comment. Split the original patch in pieces: first just introduce the deduction guide. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140896/new/ https://reviews.llvm.org/D140896 Files: llvm/include/llvm/ADT/ArrayRef.h Index: llvm/include/llvm/ADT/ArrayRef.h === --- llvm/include/llvm/ADT/ArrayRef.h +++ llvm/include/llvm/ADT/ArrayRef.h @@ -466,9 +466,44 @@ ~OwningArrayRef() { delete[] this->data(); } }; - /// @name ArrayRef Convenience constructors + /// @name ArrayRef Deduction guides /// @{ + /// Deduction guide to construct an ArrayRef from a single element. + template ArrayRef(const T ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a pointer and length + template ArrayRef(const T *data, size_t length) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a range + template ArrayRef(const T *data, const T *end) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a SmallVector + template ArrayRef(const SmallVectorImpl ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a SmallVector + template + ArrayRef(const SmallVector ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a std::vector + template ArrayRef(const std::vector ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a std::array + template + ArrayRef(const std::array ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from an ArrayRef (no-op) (const) + template ArrayRef(const ArrayRef ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from an ArrayRef (no-op) + template ArrayRef(ArrayRef ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a C array. + template ArrayRef(const T ()[N]) -> ArrayRef; + /// @} + + /// @name ArrayRef Convenience constructors + /// @{ /// Construct an ArrayRef from a single element. template ArrayRef makeArrayRef(const T ) { Index: llvm/include/llvm/ADT/ArrayRef.h === --- llvm/include/llvm/ADT/ArrayRef.h +++ llvm/include/llvm/ADT/ArrayRef.h @@ -466,9 +466,44 @@ ~OwningArrayRef() { delete[] this->data(); } }; - /// @name ArrayRef Convenience constructors + /// @name ArrayRef Deduction guides /// @{ + /// Deduction guide to construct an ArrayRef from a single element. + template ArrayRef(const T ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a pointer and length + template ArrayRef(const T *data, size_t length) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a range + template ArrayRef(const T *data, const T *end) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a SmallVector + template ArrayRef(const SmallVectorImpl ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a SmallVector + template + ArrayRef(const SmallVector ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a std::vector + template ArrayRef(const std::vector ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a std::array + template + ArrayRef(const std::array ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from an ArrayRef (no-op) (const) + template ArrayRef(const ArrayRef ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from an ArrayRef (no-op) + template ArrayRef(ArrayRef ) -> ArrayRef; + + /// Deduction guide to construct an ArrayRef from a C array. + template ArrayRef(const T ()[N]) -> ArrayRef; + /// @} + + /// @name ArrayRef Convenience constructors + /// @{ /// Construct an ArrayRef from a single element. template ArrayRef makeArrayRef(const T ) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140896: [WIP] Move from llvm::makeArrayRef to ArrayRef deduction guides
MaskRay accepted this revision. MaskRay added a comment. LGTM if `makeArrayRef` is kept in this patch. Do we foresee compiler bugs (for supported compilers) in this area? If there may be a risk, consider migrate a part of the code base first. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140896/new/ https://reviews.llvm.org/D140896 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140896: [WIP] Move from llvm::makeArrayRef to ArrayRef deduction guides
serge-sans-paille updated this revision to Diff 486049. serge-sans-paille added a comment. + keep deprecated version, flagged appropriately CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140896/new/ https://reviews.llvm.org/D140896 Files: bolt/tools/bat-dump/bat-dump.cpp bolt/tools/driver/llvm-bolt.cpp bolt/tools/heatmap/heatmap.cpp clang-tools-extra/clang-apply-replacements/tool/ClangApplyReplacementsMain.cpp clang-tools-extra/clang-tidy/bugprone/ArgumentCommentCheck.cpp clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp clang-tools-extra/clang-tidy/concurrency/MtUnsafeCheck.cpp clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp clang-tools-extra/clangd/ClangdLSPServer.cpp clang-tools-extra/clangd/CompileCommands.cpp clang-tools-extra/clangd/FindSymbols.cpp clang-tools-extra/clangd/Preamble.cpp clang-tools-extra/clangd/Selection.cpp clang-tools-extra/clangd/XRefs.cpp clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp clang-tools-extra/clangd/tool/Check.cpp clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp clang-tools-extra/include-cleaner/lib/HTMLReport.cpp clang-tools-extra/pseudo/include/clang-pseudo/Forest.h clang-tools-extra/pseudo/include/clang-pseudo/GLR.h clang-tools-extra/pseudo/include/clang-pseudo/grammar/LRTable.h clang-tools-extra/pseudo/lib/Forest.cpp clang-tools-extra/pseudo/lib/GLR.cpp clang-tools-extra/pseudo/lib/grammar/Grammar.cpp clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp clang/include/clang/AST/Decl.h clang/include/clang/AST/DeclCXX.h clang/include/clang/AST/DeclObjC.h clang/include/clang/AST/DeclOpenMP.h clang/include/clang/AST/DeclTemplate.h clang/include/clang/AST/Expr.h clang/include/clang/AST/ExprCXX.h clang/include/clang/AST/ExprObjC.h clang/include/clang/AST/ExprOpenMP.h clang/include/clang/AST/OpenMPClause.h clang/include/clang/AST/PropertiesBase.td clang/include/clang/AST/Stmt.h clang/include/clang/AST/StmtOpenMP.h clang/include/clang/AST/TemplateBase.h clang/include/clang/AST/TemplateName.h clang/include/clang/AST/Type.h clang/include/clang/AST/TypeLoc.h clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h clang/include/clang/Basic/Diagnostic.h clang/include/clang/Basic/SyncScope.h clang/include/clang/CodeGen/CGFunctionInfo.h clang/include/clang/Lex/MacroInfo.h clang/include/clang/Parse/Parser.h clang/include/clang/Sema/DeclSpec.h clang/include/clang/Sema/DelayedDiagnostic.h clang/include/clang/Sema/Sema.h clang/include/clang/Serialization/ASTRecordReader.h clang/include/clang/Tooling/Refactoring/Rename/SymbolOccurrences.h clang/include/clang/Tooling/Transformer/RewriteRule.h clang/lib/AST/APValue.cpp clang/lib/AST/ASTContext.cpp clang/lib/AST/ASTDiagnostic.cpp clang/lib/AST/ASTImporter.cpp clang/lib/AST/CommentParser.cpp clang/lib/AST/CommentSema.cpp clang/lib/AST/ComputeDependence.cpp clang/lib/AST/Decl.cpp clang/lib/AST/DeclCXX.cpp clang/lib/AST/DeclTemplate.cpp clang/lib/AST/ExprCXX.cpp clang/lib/AST/ExprConstant.cpp clang/lib/AST/OpenMPClause.cpp clang/lib/AST/ParentMapContext.cpp clang/lib/AST/TemplateName.cpp clang/lib/AST/Type.cpp clang/lib/ASTMatchers/Dynamic/Marshallers.cpp clang/lib/Analysis/CFG.cpp clang/lib/Analysis/CalledOnceCheck.cpp clang/lib/Analysis/FlowSensitive/DataflowEnvironment.cpp clang/lib/Basic/Module.cpp clang/lib/Basic/Targets/AArch64.cpp clang/lib/Basic/Targets/AMDGPU.cpp clang/lib/Basic/Targets/ARC.h clang/lib/Basic/Targets/ARM.cpp clang/lib/Basic/Targets/AVR.h clang/lib/Basic/Targets/BPF.cpp clang/lib/Basic/Targets/CSKY.cpp clang/lib/Basic/Targets/Hexagon.cpp clang/lib/Basic/Targets/Lanai.cpp clang/lib/Basic/Targets/LoongArch.cpp clang/lib/Basic/Targets/M68k.cpp clang/lib/Basic/Targets/MSP430.cpp clang/lib/Basic/Targets/MSP430.h clang/lib/Basic/Targets/Mips.cpp clang/lib/Basic/Targets/Mips.h clang/lib/Basic/Targets/NVPTX.cpp clang/lib/Basic/Targets/PPC.cpp clang/lib/Basic/Targets/RISCV.cpp clang/lib/Basic/Targets/Sparc.cpp clang/lib/Basic/Targets/SystemZ.cpp clang/lib/Basic/Targets/VE.cpp clang/lib/Basic/Targets/VE.h clang/lib/Basic/Targets/WebAssembly.cpp clang/lib/Basic/Targets/X86.cpp clang/lib/Basic/Targets/XCore.cpp clang/lib/Basic/Targets/XCore.h clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExprConstant.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/CGObjCGNU.cpp clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/lib/CodeGen/CGStmtOpenMP.cpp clang/lib/CodeGen/CodeGenFunction.cpp clang/lib/CodeGen/CodeGenModule.cpp clang/lib/CodeGen/CodeGenPGO.cpp clang/lib/CodeGen/CodeGenTypes.cpp clang/lib/CodeGen/ConstantInitBuilder.cpp
[PATCH] D140896: [WIP] Move from llvm::makeArrayRef to ArrayRef deduction guides
jpienaar added inline comments. Comment at: llvm/include/llvm/ADT/ArrayRef.h:502 + /// Deduction guide to construct an ArrayRef from a C array. + template ArrayRef(const T ()[N]) -> ArrayRef; mehdi_amini wrote: > Can we keep the makeArrayRef functions for now and mark them deprecated? +1 that would also allow for this change to broken up so that the deduction guides land first and then the updates (potentially even 3 hops, 1) add guides, 2) update, 3) mark deprecated - 1 & 2 could be combined but it'll greatly simplify review/enable sharding it) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140896/new/ https://reviews.llvm.org/D140896 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140896: [WIP] Move from llvm::makeArrayRef to ArrayRef deduction guides
mehdi_amini added inline comments. Herald added a subscriber: Michael137. Comment at: llvm/include/llvm/ADT/ArrayRef.h:502 + /// Deduction guide to construct an ArrayRef from a C array. + template ArrayRef(const T ()[N]) -> ArrayRef; Can we keep the makeArrayRef functions for now and mark them deprecated? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140896/new/ https://reviews.llvm.org/D140896 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140896: [WIP] Move from llvm::makeArrayRef to ArrayRef deduction guides
serge-sans-paille created this revision. Herald added subscribers: libc-commits, hanchung, kadircet, Moerafaat, kmitropoulou, zero9178, Enna1, bzcheeseman, kosarev, mattd, gchakrabarti, ThomasRaoux, pmatos, asb, ayermolo, awarzynski, arjunp, sdasgup3, asavonic, carlosgalvezp, Groverkss, wenzhicui, wrengr, armkevincheng, ormris, foad, jsetoain, jsmolens, sjarus, eric-k256, cota, mravishankar, teijeong, frasercrmck, rdzhabarov, ecnelises, tatianashp, wenlei, mehdi_amini, jdoerfert, msifontes, jurahul, Kayjukh, grosul1, Joonsoo, kerbowa, liufengdb, aartbik, mgester, arpith-jacob, csigg, antiagainst, shauheen, rriddle, luismarques, apazos, sameer.abuasal, pengfei, s.egerton, Jim, jocewei, PkmX, arphaman, the_o, brucehoult, MartinMosbeck, rogfer01, steven_wu, atanasyan, edward-jones, zzheng, jrtc27, martong, niosHD, sabuasal, simoncook, johnrusso, rbar, fedor.sergeev, kbarton, hiraditya, jgravelle-google, arichardson, sbc100, jvesely, nemanjai, sdardis, emaste, dylanmckay, jyknight, dschuff, arsenm, qcolombet, MatzeB. Herald added a reviewer: JDevlieghere. Herald added a reviewer: alexander-shaposhnikov. Herald added a reviewer: shafik. Herald added a reviewer: jhenderson. Herald added a reviewer: antiagainst. Herald added a reviewer: rriddle. Herald added a reviewer: antiagainst. Herald added a reviewer: aartbik. Herald added a reviewer: MaskRay. Herald added a reviewer: jpienaar. Herald added a reviewer: ftynse. Herald added a reviewer: awarzynski. Herald added a reviewer: bondhugula. Herald added a reviewer: rafauler. Herald added a reviewer: Amir. Herald added a reviewer: maksfb. Herald added a reviewer: ThomasRaoux. Herald added a reviewer: NoQ. Herald added a reviewer: njames93. Herald added projects: libc-project, Flang, All. serge-sans-paille requested review of this revision. Herald added subscribers: cfe-commits, llvm-commits, lldb-commits, pcwang-thead, yota9, StephenFan, stephenneuendorffer, nicolasvasilache, aheejin, jholewinski. Herald added a reviewer: nicolasvasilache. Herald added a reviewer: herhut. Herald added a reviewer: dcaballe. Herald added projects: clang, LLDB, MLIR, LLVM, clang-tools-extra. Since we're now requiring C++17, Let's get rid of `makeXXX` functions like `makeArrayRef`, and use deduction guides instead. Apart from codebase modernization, there isn't much benefit from that move, but I can still mention that it would slightly (probably negligibly) decrease the number of symbols / debug info, as deduction guides don't generate new code. The only non-automatic changes have been: 1. Write the deduction guides 2. `ArrayRef(some_uint8_pointer, 0)` needs to be changed into `ArrayRef(some_uint8_pointer, (size_t)0)` to avoid an ambiguous call with `ArrayRef((uint8_t*), (uint8_t*))` 3. `CVSymbol sym(makeArrayRef(symStorage));` needed to be rewritten as `CVSymbol sym{ArrayRef(symStorage)};` otherwise the compiler is confused and thinks we have a (bad) function prototype. There was a few similar situation across the codebase. 4. ADL doesn't seem to work the same for deductio-guides and functions, so at some point the `llvm` namespace must be explicitly stated. 5. The "reference mode" of `makeArrayRef(ArrayRef &)` that acts as no-op is not supported (a constructor cannot achieve that). Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D140896 Files: bolt/tools/bat-dump/bat-dump.cpp bolt/tools/driver/llvm-bolt.cpp bolt/tools/heatmap/heatmap.cpp clang-tools-extra/clang-apply-replacements/tool/ClangApplyReplacementsMain.cpp clang-tools-extra/clang-tidy/bugprone/ArgumentCommentCheck.cpp clang-tools-extra/clang-tidy/bugprone/SignalHandlerCheck.cpp clang-tools-extra/clang-tidy/concurrency/MtUnsafeCheck.cpp clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp clang-tools-extra/clangd/ClangdLSPServer.cpp clang-tools-extra/clangd/CompileCommands.cpp clang-tools-extra/clangd/FindSymbols.cpp clang-tools-extra/clangd/Preamble.cpp clang-tools-extra/clangd/Selection.cpp clang-tools-extra/clangd/XRefs.cpp clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp clang-tools-extra/clangd/tool/Check.cpp clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp clang-tools-extra/include-cleaner/lib/HTMLReport.cpp clang-tools-extra/pseudo/include/clang-pseudo/Forest.h clang-tools-extra/pseudo/include/clang-pseudo/GLR.h clang-tools-extra/pseudo/include/clang-pseudo/grammar/LRTable.h clang-tools-extra/pseudo/lib/Forest.cpp clang-tools-extra/pseudo/lib/GLR.cpp clang-tools-extra/pseudo/lib/grammar/Grammar.cpp clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp clang/include/clang/AST/Decl.h clang/include/clang/AST/DeclCXX.h clang/include/clang/AST/DeclObjC.h clang/include/clang/AST/DeclOpenMP.h