svn commit: r286427 - in vendor/clang/dist: docs include/clang-c include/clang/AST include/clang/ASTMatchers include/clang/ASTMatchers/Dynamic include/clang/Basic include/clang/CodeGen include/clan...
Dimitry Andric
dim at FreeBSD.org
Fri Aug 7 23:02:50 UTC 2015
Author: dim
Date: Fri Aug 7 23:02:44 2015
New Revision: 286427
URL: https://svnweb.freebsd.org/changeset/base/286427
Log:
Vendor import of clang trunk r242221:
https://llvm.org/svn/llvm-project/cfe/trunk@242221
Added:
vendor/clang/dist/include/clang/CodeGen/ObjectFilePCHContainerOperations.h (contents, props changed)
vendor/clang/dist/lib/CodeGen/ObjectFilePCHContainerOperations.cpp (contents, props changed)
vendor/clang/dist/test/Analysis/analyzer-checker-config.c (contents, props changed)
vendor/clang/dist/test/CodeGen/arm-long-calls.c (contents, props changed)
vendor/clang/dist/test/CodeGen/asm-attrs.c (contents, props changed)
vendor/clang/dist/test/CodeGen/available-externally-hidden.cpp (contents, props changed)
vendor/clang/dist/test/CodeGenCXX/cfi-ms-rtti.cpp (contents, props changed)
vendor/clang/dist/test/CodeGenCXX/eh-aggregate-copy-destroy.cpp (contents, props changed)
vendor/clang/dist/test/CodeGenCXX/eh-aggregated-inits-unwind.cpp (contents, props changed)
vendor/clang/dist/test/CodeGenCXX/eh-aggregated-inits.cpp (contents, props changed)
vendor/clang/dist/test/CodeGenCXX/pr24097.cpp (contents, props changed)
vendor/clang/dist/test/CodeGenCXX/sanitize-dtor-callback.cpp (contents, props changed)
vendor/clang/dist/test/CodeGenObjC/parameterized_classes.m
vendor/clang/dist/test/Driver/cuda-options.cu
vendor/clang/dist/test/Driver/ppc-dependent-options.cpp (contents, props changed)
vendor/clang/dist/test/Driver/ppc-endian.c (contents, props changed)
vendor/clang/dist/test/Index/annotate-parameterized-classes.m
vendor/clang/dist/test/Index/comment-objc-parameterized-classes.m
vendor/clang/dist/test/Index/complete-parameterized-classes.m
vendor/clang/dist/test/Index/index-file.cu
vendor/clang/dist/test/Modules/Inputs/diagnostics-aux-2.modulemap
vendor/clang/dist/test/Modules/Inputs/merge-template-pattern-visibility/
vendor/clang/dist/test/Modules/Inputs/merge-template-pattern-visibility/a.h (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/merge-template-pattern-visibility/b.h (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/merge-template-pattern-visibility/module.modulemap
vendor/clang/dist/test/Modules/Inputs/multiple-include/
vendor/clang/dist/test/Modules/Inputs/multiple-include/a.h (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/multiple-include/b.h (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/multiple-include/c.h (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/multiple-include/module.modulemap
vendor/clang/dist/test/Modules/Inputs/multiple-include/x.h (contents, props changed)
vendor/clang/dist/test/Modules/merge-template-pattern-visibility.cpp (contents, props changed)
vendor/clang/dist/test/Modules/multiple-include.cpp (contents, props changed)
vendor/clang/dist/test/Modules/pch_container.m
vendor/clang/dist/test/OpenMP/cancel_codegen.cpp (contents, props changed)
vendor/clang/dist/test/PCH/objc_kindof.m
vendor/clang/dist/test/PCH/objc_parameterized_classes.m
vendor/clang/dist/test/Profile/Inputs/gcc-flag-compatibility.proftext
vendor/clang/dist/test/Profile/gcc-flag-compatibility.c (contents, props changed)
vendor/clang/dist/test/Sema/inline-asm-validate-tmpl.cpp (contents, props changed)
vendor/clang/dist/test/Sema/tls_alignment.cpp (contents, props changed)
vendor/clang/dist/test/SemaCXX/cast-lvalue-to-rvalue-reference.cpp (contents, props changed)
vendor/clang/dist/test/SemaObjC/kindof.m
vendor/clang/dist/test/SemaObjC/parameterized_classes.m
vendor/clang/dist/test/SemaObjC/parameterized_classes_collection_literal.m
vendor/clang/dist/test/SemaObjC/parameterized_classes_subst.m
vendor/clang/dist/test/SemaObjCXX/Inputs/nullability-pragmas-generics-1.h (contents, props changed)
vendor/clang/dist/test/SemaObjCXX/parameterized_classes.mm
vendor/clang/dist/test/SemaObjCXX/parameterized_classes_subst.mm
Modified:
vendor/clang/dist/docs/ClangFormatStyleOptions.rst
vendor/clang/dist/docs/CrossCompilation.rst
vendor/clang/dist/docs/LanguageExtensions.rst
vendor/clang/dist/docs/PCHInternals.rst
vendor/clang/dist/docs/UsersManual.rst
vendor/clang/dist/include/clang-c/BuildSystem.h
vendor/clang/dist/include/clang/AST/ASTContext.h
vendor/clang/dist/include/clang/AST/DataRecursiveASTVisitor.h
vendor/clang/dist/include/clang/AST/DeclObjC.h
vendor/clang/dist/include/clang/AST/ExprObjC.h
vendor/clang/dist/include/clang/AST/RecursiveASTVisitor.h
vendor/clang/dist/include/clang/AST/Type.h
vendor/clang/dist/include/clang/AST/TypeLoc.h
vendor/clang/dist/include/clang/ASTMatchers/ASTMatchers.h
vendor/clang/dist/include/clang/ASTMatchers/ASTMatchersInternal.h
vendor/clang/dist/include/clang/ASTMatchers/Dynamic/VariantValue.h
vendor/clang/dist/include/clang/Basic/Attr.td
vendor/clang/dist/include/clang/Basic/AttrDocs.td
vendor/clang/dist/include/clang/Basic/BuiltinsPPC.def
vendor/clang/dist/include/clang/Basic/BuiltinsX86.def
vendor/clang/dist/include/clang/Basic/DeclNodes.td
vendor/clang/dist/include/clang/Basic/DiagnosticCommonKinds.td
vendor/clang/dist/include/clang/Basic/DiagnosticDriverKinds.td
vendor/clang/dist/include/clang/Basic/DiagnosticGroups.td
vendor/clang/dist/include/clang/Basic/DiagnosticParseKinds.td
vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td
vendor/clang/dist/include/clang/Basic/IdentifierTable.h
vendor/clang/dist/include/clang/Basic/LangOptions.def
vendor/clang/dist/include/clang/Basic/Sanitizers.h
vendor/clang/dist/include/clang/Basic/TargetInfo.h
vendor/clang/dist/include/clang/Basic/TokenKinds.def
vendor/clang/dist/include/clang/Driver/Action.h
vendor/clang/dist/include/clang/Driver/CLCompatOptions.td
vendor/clang/dist/include/clang/Driver/Driver.h
vendor/clang/dist/include/clang/Driver/Job.h
vendor/clang/dist/include/clang/Driver/Options.td
vendor/clang/dist/include/clang/Driver/SanitizerArgs.h
vendor/clang/dist/include/clang/Driver/Types.def
vendor/clang/dist/include/clang/Driver/Types.h
vendor/clang/dist/include/clang/Format/Format.h
vendor/clang/dist/include/clang/Frontend/CodeGenOptions.def
vendor/clang/dist/include/clang/Frontend/CodeGenOptions.h
vendor/clang/dist/include/clang/Frontend/CompilerInstance.h
vendor/clang/dist/include/clang/Lex/ModuleMap.h
vendor/clang/dist/include/clang/Lex/Preprocessor.h
vendor/clang/dist/include/clang/Parse/Parser.h
vendor/clang/dist/include/clang/Sema/CodeCompleteConsumer.h
vendor/clang/dist/include/clang/Sema/DeclSpec.h
vendor/clang/dist/include/clang/Sema/Sema.h
vendor/clang/dist/include/clang/Sema/Template.h
vendor/clang/dist/include/clang/Serialization/ASTBitCodes.h
vendor/clang/dist/include/clang/Serialization/ASTReader.h
vendor/clang/dist/include/clang/Serialization/ASTWriter.h
vendor/clang/dist/include/clang/StaticAnalyzer/Core/CheckerRegistry.h
vendor/clang/dist/lib/AST/ASTContext.cpp
vendor/clang/dist/lib/AST/ASTDiagnostic.cpp
vendor/clang/dist/lib/AST/ASTDumper.cpp
vendor/clang/dist/lib/AST/ASTImporter.cpp
vendor/clang/dist/lib/AST/Decl.cpp
vendor/clang/dist/lib/AST/DeclBase.cpp
vendor/clang/dist/lib/AST/DeclCXX.cpp
vendor/clang/dist/lib/AST/DeclObjC.cpp
vendor/clang/dist/lib/AST/DeclPrinter.cpp
vendor/clang/dist/lib/AST/Expr.cpp
vendor/clang/dist/lib/AST/ItaniumMangle.cpp
vendor/clang/dist/lib/AST/Type.cpp
vendor/clang/dist/lib/AST/TypeLoc.cpp
vendor/clang/dist/lib/AST/TypePrinter.cpp
vendor/clang/dist/lib/ASTMatchers/ASTMatchersInternal.cpp
vendor/clang/dist/lib/ASTMatchers/Dynamic/Parser.cpp
vendor/clang/dist/lib/ASTMatchers/Dynamic/VariantValue.cpp
vendor/clang/dist/lib/Basic/FileManager.cpp
vendor/clang/dist/lib/Basic/IdentifierTable.cpp
vendor/clang/dist/lib/Basic/Module.cpp
vendor/clang/dist/lib/Basic/Sanitizers.cpp
vendor/clang/dist/lib/Basic/TargetInfo.cpp
vendor/clang/dist/lib/Basic/Targets.cpp
vendor/clang/dist/lib/CodeGen/BackendUtil.cpp
vendor/clang/dist/lib/CodeGen/CGAtomic.cpp
vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp
vendor/clang/dist/lib/CodeGen/CGCall.cpp
vendor/clang/dist/lib/CodeGen/CGClass.cpp
vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp
vendor/clang/dist/lib/CodeGen/CGDebugInfo.h
vendor/clang/dist/lib/CodeGen/CGDecl.cpp
vendor/clang/dist/lib/CodeGen/CGException.cpp
vendor/clang/dist/lib/CodeGen/CGExpr.cpp
vendor/clang/dist/lib/CodeGen/CGObjC.cpp
vendor/clang/dist/lib/CodeGen/CGObjCRuntime.cpp
vendor/clang/dist/lib/CodeGen/CGOpenMPRuntime.cpp
vendor/clang/dist/lib/CodeGen/CGOpenMPRuntime.h
vendor/clang/dist/lib/CodeGen/CGRecordLayout.h
vendor/clang/dist/lib/CodeGen/CGRecordLayoutBuilder.cpp
vendor/clang/dist/lib/CodeGen/CGStmt.cpp
vendor/clang/dist/lib/CodeGen/CGStmtOpenMP.cpp
vendor/clang/dist/lib/CodeGen/CGVTables.cpp
vendor/clang/dist/lib/CodeGen/CMakeLists.txt
vendor/clang/dist/lib/CodeGen/CodeGenFunction.cpp
vendor/clang/dist/lib/CodeGen/CodeGenFunction.h
vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp
vendor/clang/dist/lib/CodeGen/CodeGenModule.h
vendor/clang/dist/lib/CodeGen/ItaniumCXXABI.cpp
vendor/clang/dist/lib/CodeGen/MicrosoftCXXABI.cpp
vendor/clang/dist/lib/CodeGen/TargetInfo.cpp
vendor/clang/dist/lib/Driver/Action.cpp
vendor/clang/dist/lib/Driver/Driver.cpp
vendor/clang/dist/lib/Driver/Job.cpp
vendor/clang/dist/lib/Driver/MSVCToolChain.cpp
vendor/clang/dist/lib/Driver/MinGWToolChain.cpp
vendor/clang/dist/lib/Driver/SanitizerArgs.cpp
vendor/clang/dist/lib/Driver/ToolChain.cpp
vendor/clang/dist/lib/Driver/ToolChains.cpp
vendor/clang/dist/lib/Driver/ToolChains.h
vendor/clang/dist/lib/Driver/Tools.cpp
vendor/clang/dist/lib/Driver/Types.cpp
vendor/clang/dist/lib/Format/ContinuationIndenter.cpp
vendor/clang/dist/lib/Format/Format.cpp
vendor/clang/dist/lib/Format/FormatToken.cpp
vendor/clang/dist/lib/Format/FormatToken.h
vendor/clang/dist/lib/Format/TokenAnnotator.cpp
vendor/clang/dist/lib/Format/UnwrappedLineParser.cpp
vendor/clang/dist/lib/Frontend/ASTUnit.cpp
vendor/clang/dist/lib/Frontend/CompilerInstance.cpp
vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp
vendor/clang/dist/lib/Frontend/CreateInvocationFromCommandLine.cpp
vendor/clang/dist/lib/Frontend/PCHContainerOperations.cpp
vendor/clang/dist/lib/Headers/Intrin.h
vendor/clang/dist/lib/Headers/altivec.h
vendor/clang/dist/lib/Headers/avx512vlbwintrin.h
vendor/clang/dist/lib/Lex/HeaderSearch.cpp
vendor/clang/dist/lib/Lex/ModuleMap.cpp
vendor/clang/dist/lib/Lex/PPMacroExpansion.cpp
vendor/clang/dist/lib/Parse/ParseDecl.cpp
vendor/clang/dist/lib/Parse/ParseDeclCXX.cpp
vendor/clang/dist/lib/Parse/ParseExprCXX.cpp
vendor/clang/dist/lib/Parse/ParseInit.cpp
vendor/clang/dist/lib/Parse/ParseObjc.cpp
vendor/clang/dist/lib/Parse/ParseTemplate.cpp
vendor/clang/dist/lib/Parse/ParseTentative.cpp
vendor/clang/dist/lib/Parse/Parser.cpp
vendor/clang/dist/lib/Sema/CodeCompleteConsumer.cpp
vendor/clang/dist/lib/Sema/DeclSpec.cpp
vendor/clang/dist/lib/Sema/SemaCast.cpp
vendor/clang/dist/lib/Sema/SemaChecking.cpp
vendor/clang/dist/lib/Sema/SemaCodeComplete.cpp
vendor/clang/dist/lib/Sema/SemaDecl.cpp
vendor/clang/dist/lib/Sema/SemaDeclAttr.cpp
vendor/clang/dist/lib/Sema/SemaDeclObjC.cpp
vendor/clang/dist/lib/Sema/SemaExceptionSpec.cpp
vendor/clang/dist/lib/Sema/SemaExpr.cpp
vendor/clang/dist/lib/Sema/SemaExprMember.cpp
vendor/clang/dist/lib/Sema/SemaExprObjC.cpp
vendor/clang/dist/lib/Sema/SemaObjCProperty.cpp
vendor/clang/dist/lib/Sema/SemaOpenMP.cpp
vendor/clang/dist/lib/Sema/SemaOverload.cpp
vendor/clang/dist/lib/Sema/SemaPseudoObject.cpp
vendor/clang/dist/lib/Sema/SemaStmt.cpp
vendor/clang/dist/lib/Sema/SemaStmtAsm.cpp
vendor/clang/dist/lib/Sema/SemaTemplate.cpp
vendor/clang/dist/lib/Sema/SemaTemplateInstantiate.cpp
vendor/clang/dist/lib/Sema/SemaType.cpp
vendor/clang/dist/lib/Sema/TreeTransform.h
vendor/clang/dist/lib/Serialization/ASTCommon.cpp
vendor/clang/dist/lib/Serialization/ASTReader.cpp
vendor/clang/dist/lib/Serialization/ASTReaderDecl.cpp
vendor/clang/dist/lib/Serialization/ASTReaderInternals.h
vendor/clang/dist/lib/Serialization/ASTWriter.cpp
vendor/clang/dist/lib/Serialization/ASTWriterDecl.cpp
vendor/clang/dist/lib/StaticAnalyzer/Checkers/ObjCMissingSuperCallChecker.cpp
vendor/clang/dist/lib/StaticAnalyzer/Core/CheckerRegistry.cpp
vendor/clang/dist/lib/StaticAnalyzer/Core/MemRegion.cpp
vendor/clang/dist/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp
vendor/clang/dist/test/ARCMT/check-with-pch.m
vendor/clang/dist/test/ARCMT/migrate-on-pch-and-module.m
vendor/clang/dist/test/ARCMT/objcmt-with-pch.m
vendor/clang/dist/test/ARCMT/objcmt-with-pch.m.result
vendor/clang/dist/test/Analysis/blocks.m
vendor/clang/dist/test/CMakeLists.txt
vendor/clang/dist/test/CXX/class/class.mem/p13.cpp
vendor/clang/dist/test/CXX/class/class.mem/p2.cpp
vendor/clang/dist/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp
vendor/clang/dist/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp
vendor/clang/dist/test/CXX/drs/dr19xx.cpp
vendor/clang/dist/test/CXX/drs/dr1xx.cpp
vendor/clang/dist/test/CXX/drs/dr3xx.cpp
vendor/clang/dist/test/CXX/expr/expr.const/p2-0x.cpp
vendor/clang/dist/test/CXX/expr/expr.unary/expr.unary.noexcept/cg.cpp
vendor/clang/dist/test/CodeGen/align-systemz.c
vendor/clang/dist/test/CodeGen/arm64-abi-vector.c
vendor/clang/dist/test/CodeGen/arm64-arguments.c
vendor/clang/dist/test/CodeGen/arm64-be-bitfield.c
vendor/clang/dist/test/CodeGen/atomic-ops.c
vendor/clang/dist/test/CodeGen/attr-target.c
vendor/clang/dist/test/CodeGen/available-externally-suppress.c
vendor/clang/dist/test/CodeGen/avx512vlbw-builtins.c
vendor/clang/dist/test/CodeGen/big-atomic-ops.c
vendor/clang/dist/test/CodeGen/bitfield-2.c
vendor/clang/dist/test/CodeGen/builtins-ppc-altivec.c
vendor/clang/dist/test/CodeGen/builtins-ppc-p8vector.c
vendor/clang/dist/test/CodeGen/builtins-ppc-vsx.c
vendor/clang/dist/test/CodeGen/debug-info-block.c
vendor/clang/dist/test/CodeGen/exceptions-seh-finally.c
vendor/clang/dist/test/CodeGen/exceptions-seh-leave.c
vendor/clang/dist/test/CodeGen/exceptions-seh.c
vendor/clang/dist/test/CodeGen/inline.c
vendor/clang/dist/test/CodeGen/packed-nest-unpacked.c
vendor/clang/dist/test/CodeGen/ppc64-struct-onefloat.c
vendor/clang/dist/test/CodeGen/ppc64le-aggregates.c
vendor/clang/dist/test/CodeGenCXX/2012-03-16-StoreAlign.cpp
vendor/clang/dist/test/CodeGenCXX/cfi-vcall.cpp
vendor/clang/dist/test/CodeGenCXX/debug-info-namespace.cpp
vendor/clang/dist/test/CodeGenCXX/exceptions-seh-filter-captures.cpp
vendor/clang/dist/test/CodeGenCXX/exceptions-seh.cpp
vendor/clang/dist/test/CodeGenCXX/varargs.cpp
vendor/clang/dist/test/CodeGenCXX/x86_64-arguments-avx.cpp
vendor/clang/dist/test/CodeGenCXX/x86_64-arguments.cpp
vendor/clang/dist/test/CodeGenObjCXX/mangle.mm
vendor/clang/dist/test/Driver/apple-kext-mkernel.c
vendor/clang/dist/test/Driver/arm-long-calls.c
vendor/clang/dist/test/Driver/cl-eh.cpp
vendor/clang/dist/test/Driver/clang_f_opts.c
vendor/clang/dist/test/Driver/crash-report-modules.m
vendor/clang/dist/test/Driver/crash-report.c
vendor/clang/dist/test/Driver/fsanitize.c
vendor/clang/dist/test/Driver/nacl-direct.c
vendor/clang/dist/test/Driver/ppc-abi.c
vendor/clang/dist/test/Driver/ppc-features.cpp
vendor/clang/dist/test/Frontend/ast-codegen.c
vendor/clang/dist/test/Headers/xmmintrin.c
vendor/clang/dist/test/Index/TestClassForwardDecl.m
vendor/clang/dist/test/Index/annotate-tokens.m
vendor/clang/dist/test/Index/attributes-cuda.cu
vendor/clang/dist/test/Index/c-index-api-loadTU-test.m
vendor/clang/dist/test/Index/c-index-getCursor-test.m
vendor/clang/dist/test/Index/complete-blocks.m
vendor/clang/dist/test/Index/complete-ctor-inits.cpp
vendor/clang/dist/test/Index/complete-method-decls.m
vendor/clang/dist/test/Index/pch-with-module.m
vendor/clang/dist/test/Index/print-mangled-name.cpp
vendor/clang/dist/test/Modules/Inputs/diagnostics-aux.modulemap
vendor/clang/dist/test/Modules/Inputs/explicit-build-prefer-self/map
vendor/clang/dist/test/Modules/Inputs/module.map
vendor/clang/dist/test/Modules/Inputs/namespaces-left.h
vendor/clang/dist/test/Modules/Inputs/namespaces-right.h
vendor/clang/dist/test/Modules/Inputs/namespaces-top.h
vendor/clang/dist/test/Modules/Inputs/submodules-merge-defs/defs.h
vendor/clang/dist/test/Modules/compiler_builtins_arm.m
vendor/clang/dist/test/Modules/dependency-gen-inferred-map.m
vendor/clang/dist/test/Modules/dependency-gen-pch.m
vendor/clang/dist/test/Modules/diagnostics.modulemap
vendor/clang/dist/test/Modules/irgen.c
vendor/clang/dist/test/Modules/linkage-merge.m
vendor/clang/dist/test/Modules/merge-target-features.cpp
vendor/clang/dist/test/Modules/requires.m
vendor/clang/dist/test/Modules/self-import-header.m
vendor/clang/dist/test/Modules/signal.m
vendor/clang/dist/test/Modules/submodules-merge-defs.cpp
vendor/clang/dist/test/Modules/templates-2.mm
vendor/clang/dist/test/Modules/templates.mm
vendor/clang/dist/test/Modules/va_list.m
vendor/clang/dist/test/OpenMP/atomic_capture_codegen.cpp
vendor/clang/dist/test/OpenMP/atomic_read_codegen.c
vendor/clang/dist/test/OpenMP/atomic_update_codegen.cpp
vendor/clang/dist/test/OpenMP/atomic_write_codegen.c
vendor/clang/dist/test/OpenMP/barrier_codegen.cpp
vendor/clang/dist/test/OpenMP/cancellation_point_codegen.cpp
vendor/clang/dist/test/OpenMP/critical_codegen.cpp
vendor/clang/dist/test/OpenMP/flush_codegen.cpp
vendor/clang/dist/test/OpenMP/for_codegen.cpp
vendor/clang/dist/test/OpenMP/for_firstprivate_codegen.cpp
vendor/clang/dist/test/OpenMP/for_lastprivate_codegen.cpp
vendor/clang/dist/test/OpenMP/for_private_codegen.cpp
vendor/clang/dist/test/OpenMP/for_reduction_codegen.cpp
vendor/clang/dist/test/OpenMP/for_simd_codegen.cpp
vendor/clang/dist/test/OpenMP/master_codegen.cpp
vendor/clang/dist/test/OpenMP/ordered_codegen.cpp
vendor/clang/dist/test/OpenMP/parallel_codegen.cpp
vendor/clang/dist/test/OpenMP/parallel_copyin_codegen.cpp
vendor/clang/dist/test/OpenMP/parallel_firstprivate_codegen.cpp
vendor/clang/dist/test/OpenMP/parallel_for_codegen.cpp
vendor/clang/dist/test/OpenMP/parallel_for_simd_codegen.cpp
vendor/clang/dist/test/OpenMP/parallel_private_codegen.cpp
vendor/clang/dist/test/OpenMP/parallel_reduction_codegen.cpp
vendor/clang/dist/test/OpenMP/parallel_sections_codegen.cpp
vendor/clang/dist/test/OpenMP/sections_codegen.cpp
vendor/clang/dist/test/OpenMP/sections_firstprivate_codegen.cpp
vendor/clang/dist/test/OpenMP/sections_lastprivate_codegen.cpp
vendor/clang/dist/test/OpenMP/sections_private_codegen.cpp
vendor/clang/dist/test/OpenMP/sections_reduction_codegen.cpp
vendor/clang/dist/test/OpenMP/simd_codegen.cpp
vendor/clang/dist/test/OpenMP/single_codegen.cpp
vendor/clang/dist/test/OpenMP/single_firstprivate_codegen.cpp
vendor/clang/dist/test/OpenMP/single_private_codegen.cpp
vendor/clang/dist/test/OpenMP/task_codegen.cpp
vendor/clang/dist/test/OpenMP/task_firstprivate_codegen.cpp
vendor/clang/dist/test/OpenMP/task_if_codegen.cpp
vendor/clang/dist/test/OpenMP/task_private_codegen.cpp
vendor/clang/dist/test/OpenMP/taskgroup_codegen.cpp
vendor/clang/dist/test/OpenMP/taskwait_codegen.cpp
vendor/clang/dist/test/OpenMP/taskyield_codegen.cpp
vendor/clang/dist/test/OpenMP/threadprivate_ast_print.cpp
vendor/clang/dist/test/OpenMP/threadprivate_codegen.cpp
vendor/clang/dist/test/OpenMP/threadprivate_messages.cpp
vendor/clang/dist/test/PCH/__va_list_tag.c
vendor/clang/dist/test/PCH/arc.m
vendor/clang/dist/test/PCH/asm.c
vendor/clang/dist/test/PCH/chain-external-defs.c
vendor/clang/dist/test/PCH/chain-openmp-threadprivate.cpp
vendor/clang/dist/test/PCH/chain-trivial.c
vendor/clang/dist/test/PCH/cxx-ms-function-specialization-class-scope.cpp
vendor/clang/dist/test/PCH/cxx1y-variable-templates.cpp
vendor/clang/dist/test/PCH/external-defs.c
vendor/clang/dist/test/PCH/floating-literal.c
vendor/clang/dist/test/PCH/local_static.cpp
vendor/clang/dist/test/PCH/pchpch.c
vendor/clang/dist/test/PCH/reloc.c
vendor/clang/dist/test/PCH/subscripting-literals.m
vendor/clang/dist/test/PCH/target-options.c
vendor/clang/dist/test/PCH/tentative-defs.c
vendor/clang/dist/test/PCH/thread-local.cpp
vendor/clang/dist/test/PCH/va_arg.c
vendor/clang/dist/test/PCH/va_arg.cpp
vendor/clang/dist/test/Parser/MicrosoftExtensions.c
vendor/clang/dist/test/Parser/MicrosoftExtensions.cpp
vendor/clang/dist/test/Parser/cxx-default-delete.cpp
vendor/clang/dist/test/Parser/objc-error-qualified-implementation.m
vendor/clang/dist/test/Parser/objcxx11-protocol-in-template.mm
vendor/clang/dist/test/Parser/placeholder-recovery.m
vendor/clang/dist/test/Sema/array-declared-as-incorrect-type.c
vendor/clang/dist/test/Sema/dllimport.c
vendor/clang/dist/test/Sema/enable_if.c
vendor/clang/dist/test/Sema/mrtd.c
vendor/clang/dist/test/Sema/shift.c
vendor/clang/dist/test/Sema/struct-compat.c
vendor/clang/dist/test/Sema/types.c
vendor/clang/dist/test/Sema/var-redecl.c
vendor/clang/dist/test/Sema/x86_64-linux-android.c
vendor/clang/dist/test/SemaCXX/alias-template.cpp
vendor/clang/dist/test/SemaCXX/array-bound-merge.cpp
vendor/clang/dist/test/SemaCXX/constructor.cpp
vendor/clang/dist/test/SemaCXX/cxx11-thread-local.cpp
vendor/clang/dist/test/SemaCXX/cxx1y-generic-lambdas.cpp
vendor/clang/dist/test/SemaCXX/cxx1y-variable-templates_in_class.cpp
vendor/clang/dist/test/SemaCXX/cxx1y-variable-templates_top_level.cpp
vendor/clang/dist/test/SemaCXX/dllimport.cpp
vendor/clang/dist/test/SemaCXX/extern-c.cpp
vendor/clang/dist/test/SemaCXX/lambda-expressions.cpp
vendor/clang/dist/test/SemaCXX/lookup-member.cpp
vendor/clang/dist/test/SemaCXX/struct-class-redecl.cpp
vendor/clang/dist/test/SemaCXX/using-decl-1.cpp
vendor/clang/dist/test/SemaObjC/block-type-safety.m
vendor/clang/dist/test/SemaObjC/conditional-expr-8.m
vendor/clang/dist/test/SemaObjC/conditional-expr.m
vendor/clang/dist/test/SemaObjC/interface-1.m
vendor/clang/dist/test/SemaObjC/objc2-merge-gc-attribue-decl.m
vendor/clang/dist/test/SemaObjC/protocol-archane.m
vendor/clang/dist/test/SemaObjC/protocol-warn.m
vendor/clang/dist/test/SemaObjCXX/nullability-pragmas.mm
vendor/clang/dist/test/SemaObjCXX/objc2-merge-gc-attribue-decl.mm
vendor/clang/dist/test/SemaTemplate/injected-class-name.cpp
vendor/clang/dist/test/Tooling/ms-asm-no-target.cpp
vendor/clang/dist/test/lit.cfg
vendor/clang/dist/tools/c-arcmt-test/Makefile
vendor/clang/dist/tools/c-index-test/Makefile
vendor/clang/dist/tools/clang-check/CMakeLists.txt
vendor/clang/dist/tools/clang-check/ClangCheck.cpp
vendor/clang/dist/tools/clang-check/Makefile
vendor/clang/dist/tools/clang-format/clang-format.py
vendor/clang/dist/tools/driver/CMakeLists.txt
vendor/clang/dist/tools/driver/cc1_main.cpp
vendor/clang/dist/tools/libclang/BuildSystem.cpp
vendor/clang/dist/tools/libclang/CIndex.cpp
vendor/clang/dist/tools/libclang/CIndexCodeCompletion.cpp
vendor/clang/dist/tools/libclang/CMakeLists.txt
vendor/clang/dist/tools/libclang/CXCursor.cpp
vendor/clang/dist/tools/libclang/CursorVisitor.h
vendor/clang/dist/tools/libclang/Makefile
vendor/clang/dist/tools/libclang/libclang.exports
vendor/clang/dist/unittests/ASTMatchers/ASTMatchersTest.h
vendor/clang/dist/unittests/ASTMatchers/Dynamic/Makefile
vendor/clang/dist/unittests/ASTMatchers/Dynamic/ParserTest.cpp
vendor/clang/dist/unittests/ASTMatchers/Dynamic/RegistryTest.cpp
vendor/clang/dist/unittests/ASTMatchers/Dynamic/VariantValueTest.cpp
vendor/clang/dist/unittests/CMakeLists.txt
vendor/clang/dist/unittests/Format/FormatTest.cpp
vendor/clang/dist/unittests/Format/FormatTestJS.cpp
vendor/clang/dist/unittests/Frontend/CMakeLists.txt
vendor/clang/dist/unittests/libclang/LibclangTest.cpp
vendor/clang/dist/unittests/libclang/Makefile
vendor/clang/dist/utils/TableGen/ClangAttrEmitter.cpp
vendor/clang/dist/utils/analyzer/CmpRuns.py
vendor/clang/dist/utils/analyzer/SATestBuild.py
vendor/clang/dist/www/cxx_dr_status.html
Modified: vendor/clang/dist/docs/ClangFormatStyleOptions.rst
==============================================================================
--- vendor/clang/dist/docs/ClangFormatStyleOptions.rst Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/docs/ClangFormatStyleOptions.rst Fri Aug 7 23:02:44 2015 (r286427)
@@ -275,6 +275,9 @@ the configuration (without a prefix: ``A
* ``BS_Linux`` (in configuration: ``Linux``)
Like ``Attach``, but break before braces on function, namespace and
class definitions.
+ * ``BS_Mozilla`` (in configuration: ``Mozilla``)
+ Like ``Attach``, but break before braces on enum, function, and record
+ definitions.
* ``BS_Stroustrup`` (in configuration: ``Stroustrup``)
Like ``Attach``, but break before function definitions, and 'else'.
* ``BS_Allman`` (in configuration: ``Allman``)
@@ -394,6 +397,12 @@ the configuration (without a prefix: ``A
(https://developers.google.com/protocol-buffers/).
+**MacroBlockBegin** (``std::string``)
+ A regular expression matching macros that start a block.
+
+**MacroBlockEnd** (``std::string``)
+ A regular expression matching macros that end a block.
+
**MaxEmptyLinesToKeep** (``unsigned``)
The maximum number of consecutive empty lines to keep.
Modified: vendor/clang/dist/docs/CrossCompilation.rst
==============================================================================
--- vendor/clang/dist/docs/CrossCompilation.rst Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/docs/CrossCompilation.rst Fri Aug 7 23:02:44 2015 (r286427)
@@ -92,7 +92,7 @@ will be assumed, which sets the defaults
The system name is generally the OS (linux, darwin), but could be special
like the bare-metal "none".
-When a parameter is not important, they can be omitted, or you can
+When a parameter is not important, it can be omitted, or you can
choose ``unknown`` and the defaults will be used. If you choose a parameter
that Clang doesn't know, like ``blerg``, it'll ignore and assume
``unknown``, which is not always desired, so be careful.
Modified: vendor/clang/dist/docs/LanguageExtensions.rst
==============================================================================
--- vendor/clang/dist/docs/LanguageExtensions.rst Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/docs/LanguageExtensions.rst Fri Aug 7 23:02:44 2015 (r286427)
@@ -1991,10 +1991,10 @@ compile time. Partial unrolling replicat
reduces the trip count.
If ``unroll(full)`` is specified the unroller will attempt to fully unroll the
-loop if the trip count is known at compile time. If the loop count is not known
-or the fully unrolled code size is greater than the limit specified by the
-`-pragma-unroll-threshold` command line option the loop will be partially
-unrolled subject to the same limit.
+loop if the trip count is known at compile time. If the fully unrolled code size
+is greater than an internal limit the loop will be partially unrolled up to this
+limit. If the loop count is not known at compile time the loop will not be
+unrolled.
.. code-block:: c++
@@ -2006,7 +2006,7 @@ unrolled subject to the same limit.
The unroll count can be specified explicitly with ``unroll_count(_value_)`` where
_value_ is a positive integer. If this value is greater than the trip count the
loop will be fully unrolled. Otherwise the loop is partially unrolled subject
-to the `-pragma-unroll-threshold` limit.
+to the same code size limit as with ``unroll(full)``.
.. code-block:: c++
Modified: vendor/clang/dist/docs/PCHInternals.rst
==============================================================================
--- vendor/clang/dist/docs/PCHInternals.rst Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/docs/PCHInternals.rst Fri Aug 7 23:02:44 2015 (r286427)
@@ -124,20 +124,30 @@ section <pchinternals-chained>`.
AST File Contents
-----------------
-Clang's AST files are organized into several different blocks, each of which
-contains the serialized representation of a part of Clang's internal
+An AST file produced by clang is an object file container with a ``clangast``
+(COFF) or ``__clangast`` (ELF and Mach-O) section containing the serialized AST.
+Other target-specific sections in the object file container are used to hold
+debug information for the data types defined in the AST. Tools built on top of
+libclang that do not need debug information may also produce raw AST files that
+only contain the serialized AST.
+
+The ``clangast`` section is organized into several different blocks, each of
+which contains the serialized representation of a part of Clang's internal
representation. Each of the blocks corresponds to either a block or a record
within `LLVM's bitstream format <http://llvm.org/docs/BitCodeFormat.html>`_.
The contents of each of these logical blocks are described below.
.. image:: PCHLayout.png
-For a given AST file, the `llvm-bcanalyzer
-<http://llvm.org/docs/CommandGuide/llvm-bcanalyzer.html>`_ utility can be used
-to examine the actual structure of the bitstream for the AST file. This
-information can be used both to help understand the structure of the AST file
-and to isolate areas where AST files can still be optimized, e.g., through the
-introduction of abbreviations.
+The ``llvm-objdump`` utility provides a ``-raw-clang-ast`` option to extract the
+binary contents of the AST section from an object file container.
+
+The `llvm-bcanalyzer <http://llvm.org/docs/CommandGuide/llvm-bcanalyzer.html>`_
+utility can be used to examine the actual structure of the bitstream for the AST
+section. This information can be used both to help understand the structure of
+the AST section and to isolate areas where the AST representation can still be
+optimized, e.g., through the introduction of abbreviations.
+
Metadata Block
^^^^^^^^^^^^^^
Modified: vendor/clang/dist/docs/UsersManual.rst
==============================================================================
--- vendor/clang/dist/docs/UsersManual.rst Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/docs/UsersManual.rst Fri Aug 7 23:02:44 2015 (r286427)
@@ -1488,6 +1488,45 @@ instrumentation:
profile. As you make changes to your code, clang may no longer be able to
use the profile data. It will warn you when this happens.
+Profile generation and use can also be controlled by the GCC-compatible flags
+``-fprofile-generate`` and ``-fprofile-use``. Although these flags are
+semantically equivalent to their GCC counterparts, they *do not* handle
+GCC-compatible profiles. They are only meant to implement GCC's semantics
+with respect to profile creation and use.
+
+.. option:: -fprofile-generate[=<dirname>]
+
+ Without any other arguments, ``-fprofile-generate`` behaves identically to
+ ``-fprofile-instr-generate``. When given a directory name, it generates the
+ profile file ``default.profraw`` in the directory named ``dirname``. If
+ ``dirname`` does not exist, it will be created at runtime. The environment
+ variable ``LLVM_PROFILE_FILE`` can be used to override the directory and
+ filename for the profile file at runtime. For example,
+
+ .. code-block:: console
+
+ $ clang++ -O2 -fprofile-generate=yyy/zzz code.cc -o code
+
+ When ``code`` is executed, the profile will be written to the file
+ ``yyy/zzz/default.profraw``. This can be altered at runtime via the
+ ``LLVM_PROFILE_FILE`` environment variable:
+
+ .. code-block:: console
+
+ $ LLVM_PROFILE_FILE=/tmp/myprofile/code.profraw ./code
+
+ The above invocation will produce the profile file
+ ``/tmp/myprofile/code.profraw`` instead of ``yyy/zzz/default.profraw``.
+ Notice that ``LLVM_PROFILE_FILE`` overrides the directory *and* the file
+ name for the profile file.
+
+.. option:: -fprofile-use[=<pathname>]
+
+ Without any other arguments, ``-fprofile-use`` behaves identically to
+ ``-fprofile-instr-use``. Otherwise, if ``pathname`` is the full path to a
+ profile file, it reads from that file. If ``pathname`` is a directory name,
+ it reads from ``pathname/default.profdata``.
+
Controlling Size of Debug Information
-------------------------------------
Modified: vendor/clang/dist/include/clang-c/BuildSystem.h
==============================================================================
--- vendor/clang/dist/include/clang-c/BuildSystem.h Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/include/clang-c/BuildSystem.h Fri Aug 7 23:02:44 2015 (r286427)
@@ -73,7 +73,7 @@ clang_VirtualFileOverlay_setCaseSensitiv
*
* \param options is reserved, always pass 0.
* \param out_buffer_ptr pointer to receive the buffer pointer, which should be
- * disposed using \c free().
+ * disposed using \c clang_free().
* \param out_buffer_size pointer to receive the buffer size.
* \returns 0 for success, non-zero to indicate an error.
*/
@@ -83,6 +83,14 @@ clang_VirtualFileOverlay_writeToBuffer(C
unsigned *out_buffer_size);
/**
+ * \brief free memory allocated by libclang, such as the buffer returned by
+ * \c CXVirtualFileOverlay() or \c clang_ModuleMapDescriptor_writeToBuffer().
+ *
+ * \param buffer memory pointer to free.
+ */
+CINDEX_LINKAGE void clang_free(void *buffer);
+
+/**
* \brief Dispose a \c CXVirtualFileOverlay object.
*/
CINDEX_LINKAGE void clang_VirtualFileOverlay_dispose(CXVirtualFileOverlay);
@@ -122,7 +130,7 @@ clang_ModuleMapDescriptor_setUmbrellaHea
*
* \param options is reserved, always pass 0.
* \param out_buffer_ptr pointer to receive the buffer pointer, which should be
- * disposed using \c free().
+ * disposed using \c clang_free().
* \param out_buffer_size pointer to receive the buffer size.
* \returns 0 for success, non-zero to indicate an error.
*/
Modified: vendor/clang/dist/include/clang/AST/ASTContext.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/ASTContext.h Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/include/clang/AST/ASTContext.h Fri Aug 7 23:02:44 2015 (r286427)
@@ -236,6 +236,12 @@ class ASTContext : public RefCountedBase
QualType ObjCClassRedefinitionType;
QualType ObjCSelRedefinitionType;
+ /// The identifier 'NSObject'.
+ IdentifierInfo *NSObjectName = nullptr;
+
+ /// The identifier 'NSCopying'.
+ IdentifierInfo *NSCopyingName = nullptr;
+
QualType ObjCConstantStringType;
mutable RecordDecl *CFConstantStringTypeDecl;
@@ -1189,9 +1195,15 @@ public:
QualType getObjCInterfaceType(const ObjCInterfaceDecl *Decl,
ObjCInterfaceDecl *PrevDecl = nullptr) const;
+ /// Legacy interface: cannot provide type arguments or __kindof.
QualType getObjCObjectType(QualType Base,
ObjCProtocolDecl * const *Protocols,
unsigned NumProtocols) const;
+
+ QualType getObjCObjectType(QualType Base,
+ ArrayRef<QualType> typeArgs,
+ ArrayRef<ObjCProtocolDecl *> protocols,
+ bool isKindOf) const;
bool ObjCObjectAdoptsQTypeProtocols(QualType QT, ObjCInterfaceDecl *Decl);
/// QIdProtocolsAdoptObjCObjectProtocols - Checks that protocols in
@@ -1351,6 +1363,24 @@ public:
ObjCSelRedefinitionType = RedefType;
}
+ /// Retrieve the identifier 'NSObject'.
+ IdentifierInfo *getNSObjectName() {
+ if (!NSObjectName) {
+ NSObjectName = &Idents.get("NSObject");
+ }
+
+ return NSObjectName;
+ }
+
+ /// Retrieve the identifier 'NSCopying'.
+ IdentifierInfo *getNSCopyingName() {
+ if (!NSCopyingName) {
+ NSCopyingName = &Idents.get("NSCopying");
+ }
+
+ return NSCopyingName;
+ }
+
/// \brief Retrieve the Objective-C "instancetype" type, if already known;
/// otherwise, returns a NULL type;
QualType getObjCInstanceType() {
Modified: vendor/clang/dist/include/clang/AST/DataRecursiveASTVisitor.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/DataRecursiveASTVisitor.h Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/include/clang/AST/DataRecursiveASTVisitor.h Fri Aug 7 23:02:44 2015 (r286427)
@@ -940,6 +940,9 @@ DEF_TRAVERSE_TYPE(ObjCObjectType, {
// type is itself.
if (T->getBaseType().getTypePtr() != T)
TRY_TO(TraverseType(T->getBaseType()));
+ for (auto typeArg : T->getTypeArgsAsWritten()) {
+ TRY_TO(TraverseType(typeArg));
+ }
})
DEF_TRAVERSE_TYPE(ObjCObjectPointerType,
@@ -1166,6 +1169,8 @@ DEF_TRAVERSE_TYPELOC(ObjCObjectType, {
// type is itself.
if (TL.getTypePtr()->getBaseType().getTypePtr() != TL.getTypePtr())
TRY_TO(TraverseTypeLoc(TL.getBaseLoc()));
+ for (unsigned i = 0, n = TL.getNumTypeArgs(); i != n; ++i)
+ TRY_TO(TraverseTypeLoc(TL.getTypeArgTInfo(i)->getTypeLoc()));
})
DEF_TRAVERSE_TYPELOC(ObjCObjectPointerType,
@@ -1307,7 +1312,13 @@ DEF_TRAVERSE_DECL(ObjCCompatibleAliasDec
})
DEF_TRAVERSE_DECL(ObjCCategoryDecl, {// FIXME: implement
- })
+ if (ObjCTypeParamList *typeParamList = D->getTypeParamList()) {
+ for (auto typeParam : *typeParamList) {
+ TRY_TO(TraverseObjCTypeParamDecl(typeParam));
+ }
+ }
+ return true;
+})
DEF_TRAVERSE_DECL(ObjCCategoryImplDecl, {// FIXME: implement
})
@@ -1316,7 +1327,16 @@ DEF_TRAVERSE_DECL(ObjCImplementationDecl
})
DEF_TRAVERSE_DECL(ObjCInterfaceDecl, {// FIXME: implement
- })
+ if (ObjCTypeParamList *typeParamList = D->getTypeParamListAsWritten()) {
+ for (auto typeParam : *typeParamList) {
+ TRY_TO(TraverseObjCTypeParamDecl(typeParam));
+ }
+ }
+
+ if (TypeSourceInfo *superTInfo = D->getSuperClassTInfo()) {
+ TRY_TO(TraverseTypeLoc(superTInfo->getTypeLoc()));
+ }
+})
DEF_TRAVERSE_DECL(ObjCProtocolDecl, {// FIXME: implement
})
@@ -1335,6 +1355,15 @@ DEF_TRAVERSE_DECL(ObjCMethodDecl, {
return true;
})
+DEF_TRAVERSE_DECL(ObjCTypeParamDecl, {
+ if (D->hasExplicitBound()) {
+ TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
+ // We shouldn't traverse D->getTypeForDecl(); it's a result of
+ // declaring the type alias, not something that was written in the
+ // source.
+ }
+})
+
DEF_TRAVERSE_DECL(ObjCPropertyDecl, {
if (D->getTypeSourceInfo())
TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
Modified: vendor/clang/dist/include/clang/AST/DeclObjC.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/DeclObjC.h Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/include/clang/AST/DeclObjC.h Fri Aug 7 23:02:44 2015 (r286427)
@@ -332,10 +332,14 @@ public:
SourceRange getReturnTypeSourceRange() const;
/// \brief Determine the type of an expression that sends a message to this
- /// function.
- QualType getSendResultType() const {
- return getReturnType().getNonLValueExprType(getASTContext());
- }
+ /// function. This replaces the type parameters with the types they would
+ /// get if the receiver was parameterless (e.g. it may replace the type
+ /// parameter with 'id').
+ QualType getSendResultType() const;
+
+ /// Determine the type of an expression that sends a message to this
+ /// function with the given receiver type.
+ QualType getSendResultType(QualType receiverType) const;
TypeSourceInfo *getReturnTypeSourceInfo() const { return ReturnTInfo; }
void setReturnTypeSourceInfo(TypeSourceInfo *TInfo) { ReturnTInfo = TInfo; }
@@ -399,6 +403,11 @@ public:
/// have already been created.
void createImplicitParams(ASTContext &Context, const ObjCInterfaceDecl *ID);
+ /// \return the type for \c self and set \arg selfIsPseudoStrong and
+ /// \arg selfIsConsumed accordingly.
+ QualType getSelfType(ASTContext &Context, const ObjCInterfaceDecl *OID,
+ bool &selfIsPseudoStrong, bool &selfIsConsumed);
+
ImplicitParamDecl * getSelfDecl() const { return SelfDecl; }
void setSelfDecl(ImplicitParamDecl *SD) { SelfDecl = SD; }
ImplicitParamDecl * getCmdDecl() const { return CmdDecl; }
@@ -501,6 +510,183 @@ public:
friend class ASTDeclWriter;
};
+/// Describes the variance of a given generic parameter.
+enum class ObjCTypeParamVariance : uint8_t {
+ /// The parameter is invariant: must match exactly.
+ Invariant,
+ /// The parameter is covariant, e.g., X<T> is a subtype of X<U> when
+ /// the type parameter is covariant and T is a subtype of U.
+ Covariant,
+ /// The parameter is contravariant, e.g., X<T> is a subtype of X<U>
+ /// when the type parameter is covariant and U is a subtype of T.
+ Contravariant,
+};
+
+/// Represents the declaration of an Objective-C type parameter.
+///
+/// \code
+/// @interface NSDictionary<Key : id<NSCopying>, Value>
+/// @end
+/// \endcode
+///
+/// In the example above, both \c Key and \c Value are represented by
+/// \c ObjCTypeParamDecl. \c Key has an explicit bound of \c id<NSCopying>,
+/// while \c Value gets an implicit bound of \c id.
+///
+/// Objective-C type parameters are typedef-names in the grammar,
+class ObjCTypeParamDecl : public TypedefNameDecl {
+ void anchor() override;
+
+ /// Index of this type parameter in the type parameter list.
+ unsigned Index : 14;
+
+ /// The variance of the type parameter.
+ unsigned Variance : 2;
+
+ /// The location of the variance, if any.
+ SourceLocation VarianceLoc;
+
+ /// The location of the ':', which will be valid when the bound was
+ /// explicitly specified.
+ SourceLocation ColonLoc;
+
+ ObjCTypeParamDecl(ASTContext &ctx, DeclContext *dc,
+ ObjCTypeParamVariance variance, SourceLocation varianceLoc,
+ unsigned index,
+ SourceLocation nameLoc, IdentifierInfo *name,
+ SourceLocation colonLoc, TypeSourceInfo *boundInfo)
+ : TypedefNameDecl(ObjCTypeParam, ctx, dc, nameLoc, nameLoc, name,
+ boundInfo),
+ Index(index), Variance(static_cast<unsigned>(variance)),
+ VarianceLoc(varianceLoc), ColonLoc(colonLoc) { }
+
+public:
+ static ObjCTypeParamDecl *Create(ASTContext &ctx, DeclContext *dc,
+ ObjCTypeParamVariance variance,
+ SourceLocation varianceLoc,
+ unsigned index,
+ SourceLocation nameLoc,
+ IdentifierInfo *name,
+ SourceLocation colonLoc,
+ TypeSourceInfo *boundInfo);
+ static ObjCTypeParamDecl *CreateDeserialized(ASTContext &ctx, unsigned ID);
+
+ SourceRange getSourceRange() const override LLVM_READONLY;
+
+ /// Determine the variance of this type parameter.
+ ObjCTypeParamVariance getVariance() const {
+ return static_cast<ObjCTypeParamVariance>(Variance);
+ }
+
+ /// Set the variance of this type parameter.
+ void setVariance(ObjCTypeParamVariance variance) {
+ Variance = static_cast<unsigned>(variance);
+ }
+
+ /// Retrieve the location of the variance keyword.
+ SourceLocation getVarianceLoc() const { return VarianceLoc; }
+
+ /// Retrieve the index into its type parameter list.
+ unsigned getIndex() const { return Index; }
+
+ /// Whether this type parameter has an explicitly-written type bound, e.g.,
+ /// "T : NSView".
+ bool hasExplicitBound() const { return ColonLoc.isValid(); }
+
+ /// Retrieve the location of the ':' separating the type parameter name
+ /// from the explicitly-specified bound.
+ SourceLocation getColonLoc() const { return ColonLoc; }
+
+ // Implement isa/cast/dyncast/etc.
+ static bool classof(const Decl *D) { return classofKind(D->getKind()); }
+ static bool classofKind(Kind K) { return K == ObjCTypeParam; }
+
+ friend class ASTDeclReader;
+ friend class ASTDeclWriter;
+};
+
+/// Stores a list of Objective-C type parameters for a parameterized class
+/// or a category/extension thereof.
+///
+/// \code
+/// @interface NSArray<T> // stores the <T>
+/// @end
+/// \endcode
+class ObjCTypeParamList {
+ /// Stores the components of a SourceRange as a POD.
+ struct PODSourceRange {
+ unsigned Begin;
+ unsigned End;
+ };
+
+ union {
+ /// Location of the left and right angle brackets.
+ PODSourceRange Brackets;
+
+ // Used only for alignment.
+ ObjCTypeParamDecl *AlignmentHack;
+ };
+
+ /// The number of parameters in the list, which are tail-allocated.
+ unsigned NumParams;
+
+ ObjCTypeParamList(SourceLocation lAngleLoc,
+ ArrayRef<ObjCTypeParamDecl *> typeParams,
+ SourceLocation rAngleLoc);
+
+public:
+ /// Create a new Objective-C type parameter list.
+ static ObjCTypeParamList *create(ASTContext &ctx,
+ SourceLocation lAngleLoc,
+ ArrayRef<ObjCTypeParamDecl *> typeParams,
+ SourceLocation rAngleLoc);
+
+ /// Iterate through the type parameters in the list.
+ typedef ObjCTypeParamDecl **iterator;
+
+ iterator begin() { return reinterpret_cast<ObjCTypeParamDecl **>(this + 1); }
+
+ iterator end() { return begin() + size(); }
+
+ /// Determine the number of type parameters in this list.
+ unsigned size() const { return NumParams; }
+
+ // Iterate through the type parameters in the list.
+ typedef ObjCTypeParamDecl * const *const_iterator;
+
+ const_iterator begin() const {
+ return reinterpret_cast<ObjCTypeParamDecl * const *>(this + 1);
+ }
+
+ const_iterator end() const {
+ return begin() + size();
+ }
+
+ ObjCTypeParamDecl *front() const {
+ assert(size() > 0 && "empty Objective-C type parameter list");
+ return *begin();
+ }
+
+ ObjCTypeParamDecl *back() const {
+ assert(size() > 0 && "empty Objective-C type parameter list");
+ return *(end() - 1);
+ }
+
+ SourceLocation getLAngleLoc() const {
+ return SourceLocation::getFromRawEncoding(Brackets.Begin);
+ }
+ SourceLocation getRAngleLoc() const {
+ return SourceLocation::getFromRawEncoding(Brackets.End);
+ }
+ SourceRange getSourceRange() const {
+ return SourceRange(getLAngleLoc(), getRAngleLoc());
+ }
+
+ /// Gather the default set of type arguments to be substituted for
+ /// these type parameters when dealing with an unspecialized type.
+ void gatherDefaultTypeArgs(SmallVectorImpl<QualType> &typeArgs) const;
+};
+
/// ObjCContainerDecl - Represents a container for method declarations.
/// Current sub-classes are ObjCInterfaceDecl, ObjCCategoryDecl,
/// ObjCProtocolDecl, and ObjCImplDecl.
@@ -676,9 +862,9 @@ class ObjCInterfaceDecl : public ObjCCon
/// declaration.
ObjCInterfaceDecl *Definition;
- /// Class's super class.
- ObjCInterfaceDecl *SuperClass;
-
+ /// When non-null, this is always an ObjCObjectType.
+ TypeSourceInfo *SuperClassTInfo;
+
/// Protocols referenced in the \@interface declaration
ObjCProtocolList ReferencedProtocols;
@@ -719,16 +905,13 @@ class ObjCInterfaceDecl : public ObjCCon
};
/// One of the \c InheritedDesignatedInitializersState enumeratos.
mutable unsigned InheritedDesignatedInitializers : 2;
-
- /// \brief The location of the superclass, if any.
- SourceLocation SuperClassLoc;
/// \brief The location of the last location in this declaration, before
/// the properties/methods. For example, this will be the '>', '}', or
/// identifier,
SourceLocation EndLoc;
- DefinitionData() : Definition(), SuperClass(), CategoryList(), IvarList(),
+ DefinitionData() : Definition(), SuperClassTInfo(), CategoryList(), IvarList(),
ExternallyCompleted(),
IvarListMissingImplementation(true),
HasDesignatedInitializers(),
@@ -736,11 +919,15 @@ class ObjCInterfaceDecl : public ObjCCon
};
ObjCInterfaceDecl(const ASTContext &C, DeclContext *DC, SourceLocation AtLoc,
- IdentifierInfo *Id, SourceLocation CLoc,
- ObjCInterfaceDecl *PrevDecl, bool IsInternal);
+ IdentifierInfo *Id, ObjCTypeParamList *typeParamList,
+ SourceLocation CLoc, ObjCInterfaceDecl *PrevDecl,
+ bool IsInternal);
void LoadExternalDefinition() const;
+ /// The type parameters associated with this class, if any.
+ ObjCTypeParamList *TypeParamList;
+
/// \brief Contains a pointer to the data associated with this class,
/// which will be NULL if this class has not yet been defined.
///
@@ -771,12 +958,33 @@ public:
static ObjCInterfaceDecl *Create(const ASTContext &C, DeclContext *DC,
SourceLocation atLoc,
IdentifierInfo *Id,
+ ObjCTypeParamList *typeParamList,
ObjCInterfaceDecl *PrevDecl,
SourceLocation ClassLoc = SourceLocation(),
bool isInternal = false);
static ObjCInterfaceDecl *CreateDeserialized(const ASTContext &C, unsigned ID);
+ /// Retrieve the type parameters of this class.
+ ///
+ /// This function looks for a type parameter list for the given
+ /// class; if the class has been declared (with \c \@class) but not
+ /// defined (with \c \@interface), it will search for a declaration that
+ /// has type parameters, skipping any declarations that do not.
+ ObjCTypeParamList *getTypeParamList() const;
+
+ /// Set the type parameters of this class.
+ ///
+ /// This function is used by the AST importer, which must import the type
+ /// parameters after creating their DeclContext to avoid loops.
+ void setTypeParamList(ObjCTypeParamList *TPL);
+
+ /// Retrieve the type parameters written on this particular declaration of
+ /// the class.
+ ObjCTypeParamList *getTypeParamListAsWritten() const {
+ return TypeParamList;
+ }
+
SourceRange getSourceRange() const override LLVM_READONLY {
if (isThisDeclarationADefinition())
return ObjCContainerDecl::getSourceRange();
@@ -1023,7 +1231,16 @@ public:
/// a forward declaration (\@class) to a definition (\@interface).
void startDefinition();
- ObjCInterfaceDecl *getSuperClass() const {
+ /// Retrieve the superclass type.
+ const ObjCObjectType *getSuperClassType() const {
+ if (TypeSourceInfo *TInfo = getSuperClassTInfo())
+ return TInfo->getType()->castAs<ObjCObjectType>();
+
+ return nullptr;
+ }
+
+ // Retrieve the type source information for the superclass.
+ TypeSourceInfo *getSuperClassTInfo() const {
// FIXME: Should make sure no callers ever do this.
if (!hasDefinition())
return nullptr;
@@ -1031,13 +1248,15 @@ public:
if (data().ExternallyCompleted)
LoadExternalDefinition();
- return data().SuperClass;
+ return data().SuperClassTInfo;
}
- void setSuperClass(ObjCInterfaceDecl * superCls) {
- data().SuperClass =
- (superCls && superCls->hasDefinition()) ? superCls->getDefinition()
- : superCls;
+ // Retrieve the declaration for the superclass of this class, which
+ // does not include any type arguments that apply to the superclass.
+ ObjCInterfaceDecl *getSuperClass() const;
+
+ void setSuperClass(TypeSourceInfo *superClass) {
+ data().SuperClassTInfo = superClass;
}
/// \brief Iterator that walks over the list of categories, filtering out
@@ -1329,8 +1548,8 @@ public:
void setEndOfDefinitionLoc(SourceLocation LE) { data().EndLoc = LE; }
- void setSuperClassLoc(SourceLocation Loc) { data().SuperClassLoc = Loc; }
- SourceLocation getSuperClassLoc() const { return data().SuperClassLoc; }
+ /// Retrieve the starting location of the superclass.
+ SourceLocation getSuperClassLoc() const;
/// isImplicitInterfaceDecl - check that this is an implicitly declared
/// ObjCInterfaceDecl node. This is for legacy objective-c \@implementation
@@ -1438,6 +1657,10 @@ public:
void setSynthesize(bool synth) { Synthesized = synth; }
bool getSynthesize() const { return Synthesized; }
+ /// Retrieve the type of this instance variable when viewed as a member of a
+ /// specific object type.
+ QualType getUsageType(QualType objectType) const;
+
// Implement isa/cast/dyncast/etc.
static bool classof(const Decl *D) { return classofKind(D->getKind()); }
static bool classofKind(Kind K) { return K == ObjCIvar; }
@@ -1719,6 +1942,9 @@ class ObjCCategoryDecl : public ObjCCont
/// Interface belonging to this category
ObjCInterfaceDecl *ClassInterface;
+ /// The type parameters associated with this category, if any.
+ ObjCTypeParamList *TypeParamList;
+
/// referenced protocols in this category.
ObjCProtocolList ReferencedProtocols;
@@ -1736,13 +1962,9 @@ class ObjCCategoryDecl : public ObjCCont
ObjCCategoryDecl(DeclContext *DC, SourceLocation AtLoc,
SourceLocation ClassNameLoc, SourceLocation CategoryNameLoc,
IdentifierInfo *Id, ObjCInterfaceDecl *IDecl,
+ ObjCTypeParamList *typeParamList,
SourceLocation IvarLBraceLoc=SourceLocation(),
- SourceLocation IvarRBraceLoc=SourceLocation())
- : ObjCContainerDecl(ObjCCategory, DC, Id, ClassNameLoc, AtLoc),
- ClassInterface(IDecl), NextClassCategory(nullptr),
- CategoryNameLoc(CategoryNameLoc),
- IvarLBraceLoc(IvarLBraceLoc), IvarRBraceLoc(IvarRBraceLoc) {
- }
+ SourceLocation IvarRBraceLoc=SourceLocation());
public:
@@ -1752,6 +1974,7 @@ public:
SourceLocation CategoryNameLoc,
IdentifierInfo *Id,
ObjCInterfaceDecl *IDecl,
+ ObjCTypeParamList *typeParamList,
SourceLocation IvarLBraceLoc=SourceLocation(),
SourceLocation IvarRBraceLoc=SourceLocation());
static ObjCCategoryDecl *CreateDeserialized(ASTContext &C, unsigned ID);
@@ -1759,6 +1982,17 @@ public:
ObjCInterfaceDecl *getClassInterface() { return ClassInterface; }
const ObjCInterfaceDecl *getClassInterface() const { return ClassInterface; }
+ /// Retrieve the type parameter list associated with this category or
+ /// extension.
+ ObjCTypeParamList *getTypeParamList() const { return TypeParamList; }
+
+ /// Set the type parameters of this category.
+ ///
+ /// This function is used by the AST importer, which must import the type
+ /// parameters after creating their DeclContext to avoid loops.
+ void setTypeParamList(ObjCTypeParamList *TPL);
+
+
ObjCCategoryImplDecl *getImplementation() const;
void setImplementation(ObjCCategoryImplDecl *ImplD);
@@ -2275,6 +2509,10 @@ public:
DeclTypeSourceInfo = TSI;
}
+ /// Retrieve the type when this property is used with a specific base object
+ /// type.
+ QualType getUsageType(QualType objectType) const;
+
PropertyAttributeKind getPropertyAttributes() const {
return PropertyAttributeKind(PropertyAttributes);
}
Modified: vendor/clang/dist/include/clang/AST/ExprObjC.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/ExprObjC.h Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/include/clang/AST/ExprObjC.h Fri Aug 7 23:02:44 2015 (r286427)
@@ -687,40 +687,7 @@ public:
QualType getSuperReceiverType() const {
return QualType(Receiver.get<const Type*>(), 0);
}
- QualType getGetterResultType() const {
- QualType ResultType;
- if (isExplicitProperty()) {
- const ObjCPropertyDecl *PDecl = getExplicitProperty();
- if (const ObjCMethodDecl *Getter = PDecl->getGetterMethodDecl())
- ResultType = Getter->getReturnType();
- else
- ResultType = PDecl->getType();
- } else {
- const ObjCMethodDecl *Getter = getImplicitPropertyGetter();
- if (Getter)
- ResultType = Getter->getReturnType(); // with reference!
- }
- return ResultType;
- }
- QualType getSetterArgType() const {
- QualType ArgType;
- if (isImplicitProperty()) {
- const ObjCMethodDecl *Setter = getImplicitPropertySetter();
- ObjCMethodDecl::param_const_iterator P = Setter->param_begin();
- ArgType = (*P)->getType();
- } else {
- if (ObjCPropertyDecl *PDecl = getExplicitProperty())
- if (const ObjCMethodDecl *Setter = PDecl->getSetterMethodDecl()) {
- ObjCMethodDecl::param_const_iterator P = Setter->param_begin();
- ArgType = (*P)->getType();
- }
- if (ArgType.isNull())
- ArgType = getType();
- }
- return ArgType;
- }
-
ObjCInterfaceDecl *getClassReceiver() const {
return Receiver.get<ObjCInterfaceDecl*>();
}
@@ -728,6 +695,9 @@ public:
bool isSuperReceiver() const { return Receiver.is<const Type*>(); }
bool isClassReceiver() const { return Receiver.is<ObjCInterfaceDecl*>(); }
+ /// Determine the type of the base, regardless of the kind of receiver.
+ QualType getReceiverType(const ASTContext &ctx) const;
+
SourceLocation getLocStart() const LLVM_READONLY {
return isObjectReceiver() ? getBase()->getLocStart() :getReceiverLocation();
}
Modified: vendor/clang/dist/include/clang/AST/RecursiveASTVisitor.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/RecursiveASTVisitor.h Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/include/clang/AST/RecursiveASTVisitor.h Fri Aug 7 23:02:44 2015 (r286427)
@@ -1008,6 +1008,9 @@ DEF_TRAVERSE_TYPE(ObjCObjectType, {
// type is itself.
if (T->getBaseType().getTypePtr() != T)
TRY_TO(TraverseType(T->getBaseType()));
+ for (auto typeArg : T->getTypeArgsAsWritten()) {
+ TRY_TO(TraverseType(typeArg));
+ }
})
DEF_TRAVERSE_TYPE(ObjCObjectPointerType,
@@ -1234,6 +1237,8 @@ DEF_TRAVERSE_TYPELOC(ObjCObjectType, {
// type is itself.
if (TL.getTypePtr()->getBaseType().getTypePtr() != TL.getTypePtr())
TRY_TO(TraverseTypeLoc(TL.getBaseLoc()));
+ for (unsigned i = 0, n = TL.getNumTypeArgs(); i != n; ++i)
+ TRY_TO(TraverseTypeLoc(TL.getTypeArgTInfo(i)->getTypeLoc()));
})
DEF_TRAVERSE_TYPELOC(ObjCObjectPointerType,
@@ -1382,7 +1387,12 @@ DEF_TRAVERSE_DECL(ObjCCompatibleAliasDec
})
DEF_TRAVERSE_DECL(ObjCCategoryDecl, {// FIXME: implement
- })
+ if (ObjCTypeParamList *typeParamList = D->getTypeParamList()) {
+ for (auto typeParam : *typeParamList) {
+ TRY_TO(TraverseObjCTypeParamDecl(typeParam));
+ }
+ }
+})
DEF_TRAVERSE_DECL(ObjCCategoryImplDecl, {// FIXME: implement
})
@@ -1391,7 +1401,16 @@ DEF_TRAVERSE_DECL(ObjCImplementationDecl
})
DEF_TRAVERSE_DECL(ObjCInterfaceDecl, {// FIXME: implement
- })
+ if (ObjCTypeParamList *typeParamList = D->getTypeParamListAsWritten()) {
+ for (auto typeParam : *typeParamList) {
+ TRY_TO(TraverseObjCTypeParamDecl(typeParam));
+ }
+ }
+
+ if (TypeSourceInfo *superTInfo = D->getSuperClassTInfo()) {
+ TRY_TO(TraverseTypeLoc(superTInfo->getTypeLoc()));
+ }
+})
DEF_TRAVERSE_DECL(ObjCProtocolDecl, {// FIXME: implement
})
@@ -1410,6 +1429,15 @@ DEF_TRAVERSE_DECL(ObjCMethodDecl, {
return true;
})
+DEF_TRAVERSE_DECL(ObjCTypeParamDecl, {
+ if (D->hasExplicitBound()) {
+ TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
+ // We shouldn't traverse D->getTypeForDecl(); it's a result of
+ // declaring the type alias, not something that was written in the
+ // source.
+ }
+})
+
DEF_TRAVERSE_DECL(ObjCPropertyDecl, {
if (D->getTypeSourceInfo())
TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
Modified: vendor/clang/dist/include/clang/AST/Type.h
==============================================================================
--- vendor/clang/dist/include/clang/AST/Type.h Fri Aug 7 23:02:14 2015 (r286426)
+++ vendor/clang/dist/include/clang/AST/Type.h Fri Aug 7 23:02:44 2015 (r286427)
@@ -533,6 +533,24 @@ struct SplitQualType {
}
};
+/// The kind of type we are substituting Objective-C type arguments into.
+///
+/// The kind of substitution affects the replacement of type parameters when
+/// no concrete type information is provided, e.g., when dealing with an
+/// unspecialized type.
+enum class ObjCSubstitutionContext {
+ /// An ordinary type.
+ Ordinary,
+ /// The result type of a method or function.
+ Result,
+ /// The parameter type of a method or function.
+ Parameter,
+ /// The type of a property.
+ Property,
+ /// The superclass of a type.
+ Superclass,
+};
+
/// QualType - For efficiency, we don't store CV-qualified types as nodes on
/// their own: instead each reference to a type stores the qualifiers. This
/// greatly reduces the number of nodes we need to allocate for types (for
@@ -994,6 +1012,51 @@ public:
/// type other than void.
bool isCForbiddenLValueType() const;
+ /// Substitute type arguments for the Objective-C type parameters used in the
+ /// subject type.
+ ///
+ /// \param ctx ASTContext in which the type exists.
+ ///
+ /// \param typeArgs The type arguments that will be substituted for the
+ /// Objective-C type parameters in the subject type, which are generally
+ /// computed via \c Type::getObjCSubstitutions. If empty, the type
+ /// parameters will be replaced with their bounds or id/Class, as appropriate
+ /// for the context.
+ ///
+ /// \param context The context in which the subject type was written.
+ ///
+ /// \returns the resulting type.
+ QualType substObjCTypeArgs(ASTContext &ctx,
+ ArrayRef<QualType> typeArgs,
+ ObjCSubstitutionContext context) const;
+
+ /// Substitute type arguments from an object type for the Objective-C type
+ /// parameters used in the subject type.
+ ///
+ /// This operation combines the computation of type arguments for
+ /// substitution (\c Type::getObjCSubstitutions) with the actual process of
+ /// substitution (\c QualType::substObjCTypeArgs) for the convenience of
+ /// callers that need to perform a single substitution in isolation.
+ ///
+ /// \param objectType The type of the object whose member type we're
+ /// substituting into. For example, this might be the receiver of a message
+ /// or the base of a property access.
+ ///
+ /// \param dc The declaration context from which the subject type was
+ /// retrieved, which indicates (for example) which type parameters should
+ /// be substituted.
+ ///
+ /// \param context The context in which the subject type was written.
+ ///
+ /// \returns the subject type after replacing all of the Objective-C type
+ /// parameters with their corresponding arguments.
+ QualType substObjCMemberType(QualType objectType,
+ const DeclContext *dc,
+ ObjCSubstitutionContext context) const;
+
+ /// Strip Objective-C "__kindof" types from the given type.
+ QualType stripObjCKindOfType(const ASTContext &ctx) const;
+
private:
// These methods are implemented in a separate translation unit;
// "static"-ize them to avoid creating temporary QualTypes in the
@@ -1288,10 +1351,17 @@ protected:
unsigned : NumTypeBits;
+ /// The number of type arguments stored directly on this object type.
+ unsigned NumTypeArgs : 7;
+
/// NumProtocols - The number of protocols stored directly on this
/// object type.
- unsigned NumProtocols : 32 - NumTypeBits;
+ unsigned NumProtocols : 6;
+
+ /// Whether this is a "kindof" type.
+ unsigned IsKindOf : 1;
};
+ static_assert(NumTypeBits + 7 + 6 + 1 <= 32, "Does not fit in an unsigned");
class ReferenceTypeBitfields {
friend class ReferenceType;
@@ -1585,7 +1655,28 @@ public:
bool isObjCQualifiedClassType() const; // Class<foo>
bool isObjCObjectOrInterfaceType() const;
bool isObjCIdType() const; // id
+
+ /// Whether the type is Objective-C 'id' or a __kindof type of an
+ /// object type, e.g., __kindof NSView * or __kindof id
+ /// <NSCopying>.
+ ///
+ /// \param bound Will be set to the bound on non-id subtype types,
+ /// which will be (possibly specialized) Objective-C class type, or
+ /// null for 'id.
+ bool isObjCIdOrObjectKindOfType(const ASTContext &ctx,
+ const ObjCObjectType *&bound) const;
+
bool isObjCClassType() const; // Class
+
+ /// Whether the type is Objective-C 'Class' or a __kindof type of an
+ /// Class type, e.g., __kindof Class <NSCopying>.
+ ///
+ /// Unlike \c isObjCIdOrObjectKindOfType, there is no relevant bound
+ /// here because Objective-C's type system cannot express "a class
+ /// object for a subclass of NSFoo".
+ bool isObjCClassOrClassKindOfType() const;
+
+ bool isBlockCompatibleObjCPointerType(ASTContext &ctx) const;
bool isObjCSelType() const; // Class
bool isObjCBuiltinType() const; // 'id' or 'Class'
bool isObjCARCBridgableType() const;
@@ -1697,6 +1788,7 @@ public:
/// NOTE: getAs*ArrayType are methods on ASTContext.
const RecordType *getAsUnionType() const;
const ComplexType *getAsComplexIntegerType() const; // GCC complex int type.
+ const ObjCObjectType *getAsObjCInterfaceType() const;
// The following is a convenience method that returns an ObjCObjectPointerType
// for object declared using an interface.
const ObjCObjectPointerType *getAsObjCInterfacePointerType() const;
@@ -1832,6 +1924,28 @@ public:
/// pointer type.
bool canHaveNullability() const;
+ /// Retrieve the set of substitutions required when accessing a member
+ /// of the Objective-C receiver type that is declared in the given context.
+ ///
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-vendor
mailing list