From 3191b2b32a96e1a6ee833fcca73e5c8e0c67ba65 Mon Sep 17 00:00:00 2001 From: dim Date: Wed, 27 May 2015 18:47:56 +0000 Subject: [PATCH] Vendor import of clang trunk r238337: https://llvm.org/svn/llvm-project/cfe/trunk@238337 --- CMakeLists.txt | 6 + CODE_OWNERS.TXT | 12 +- LICENSE.TXT | 2 +- bindings/python/clang/cindex.py | 40 + bindings/python/tests/cindex/test_type.py | 21 +- docs/AddressSanitizer.rst | 3 +- docs/AutomaticReferenceCounting.rst | 10 +- docs/ClangFormatStyleOptions.rst | 30 +- docs/ControlFlowIntegrity.rst | 145 + docs/ControlFlowIntegrityDesign.rst | 275 ++ docs/InternalsManual.rst | 434 ++- docs/LanguageExtensions.rst | 8 + docs/LibASTMatchersReference.html | 85 +- docs/MSVCCompatibility.rst | 27 +- docs/Makefile | 30 +- docs/MemorySanitizer.rst | 46 +- docs/Modules.rst | 31 +- docs/ReleaseNotes.rst | 196 +- docs/SanitizerCoverage.rst | 355 +++ docs/ThreadSafetyAnalysis.rst | 3 + docs/ThreadSanitizer.rst | 3 +- docs/UsersManual.rst | 61 +- docs/conf.py | 4 +- docs/doxygen.cfg.in | 2565 ++++++++++++----- docs/doxygen.css | 408 --- docs/doxygen.footer | 10 - docs/doxygen.header | 9 - docs/index.rst | 2 + docs/tools/dump_ast_matchers.py | 4 +- .../PrintFunctionNames/PrintFunctionNames.cpp | 63 +- include/clang-c/Index.h | 74 +- include/clang/AST/ASTConsumer.h | 6 +- include/clang/AST/ASTContext.h | 46 +- include/clang/AST/ASTImporter.h | 5 + include/clang/AST/ASTMutationListener.h | 18 +- include/clang/AST/ASTUnresolvedSet.h | 2 +- include/clang/AST/Attr.h | 38 +- include/clang/AST/AttrIterator.h | 2 +- include/clang/AST/CXXInheritance.h | 6 +- include/clang/AST/CanonicalType.h | 110 +- include/clang/AST/CommentCommandTraits.h | 4 +- include/clang/AST/CommentLexer.h | 4 +- include/clang/AST/CommentParser.h | 4 +- include/clang/AST/CommentSema.h | 4 +- include/clang/AST/DataRecursiveASTVisitor.h | 54 +- include/clang/AST/Decl.h | 219 +- include/clang/AST/DeclBase.h | 157 +- include/clang/AST/DeclCXX.h | 42 +- include/clang/AST/DeclContextInternals.h | 16 +- include/clang/AST/DeclObjC.h | 23 +- include/clang/AST/DeclTemplate.h | 109 +- include/clang/AST/DeclarationName.h | 6 +- include/clang/AST/Expr.h | 76 +- include/clang/AST/ExprCXX.h | 25 +- include/clang/AST/ExternalASTSource.h | 182 +- include/clang/AST/LambdaCapture.h | 5 - include/clang/AST/Mangle.h | 27 + include/clang/AST/NSAPI.h | 49 +- include/clang/AST/NestedNameSpecifier.h | 4 +- include/clang/AST/OpenMPClause.h | 562 +++- include/clang/AST/RecordLayout.h | 6 +- include/clang/AST/RecursiveASTVisitor.h | 74 +- include/clang/AST/Redeclarable.h | 26 +- include/clang/AST/Stmt.h | 90 +- include/clang/AST/StmtCXX.h | 2 +- include/clang/AST/StmtIterator.h | 4 +- include/clang/AST/StmtObjC.h | 21 +- include/clang/AST/StmtOpenMP.h | 96 +- include/clang/AST/TemplateBase.h | 2 +- include/clang/AST/Type.h | 8 +- include/clang/AST/TypeLoc.h | 2 +- include/clang/AST/TypeNodes.def | 2 +- include/clang/AST/UnresolvedSet.h | 88 +- include/clang/AST/VTableBuilder.h | 4 +- include/clang/ASTMatchers/ASTMatchers.h | 278 +- .../clang/ASTMatchers/ASTMatchersInternal.h | 390 +-- include/clang/ASTMatchers/ASTMatchersMacros.h | 15 +- include/clang/ASTMatchers/Dynamic/Parser.h | 2 +- include/clang/ASTMatchers/Dynamic/Registry.h | 2 +- .../clang/ASTMatchers/Dynamic/VariantValue.h | 6 +- include/clang/Analysis/Analyses/Dominators.h | 4 +- .../clang/Analysis/Analyses/FormatString.h | 24 +- .../clang/Analysis/Analyses/LiveVariables.h | 7 +- .../clang/Analysis/Analyses/ThreadSafety.h | 15 +- .../Analysis/Analyses/ThreadSafetyCommon.h | 12 +- .../clang/Analysis/Analyses/ThreadSafetyTIL.h | 8 +- .../Analysis/Analyses/ThreadSafetyUtil.h | 54 +- include/clang/Analysis/AnalysisContext.h | 10 +- include/clang/Analysis/CFG.h | 3 +- include/clang/Basic/ABI.h | 9 +- include/clang/Basic/Attr.td | 104 +- include/clang/Basic/AttrDocs.td | 37 + include/clang/Basic/Builtins.def | 35 +- include/clang/Basic/Builtins.h | 6 + include/clang/Basic/BuiltinsARM.def | 2 +- include/clang/Basic/BuiltinsPPC.def | 79 + include/clang/Basic/BuiltinsSystemZ.def | 252 ++ include/clang/Basic/BuiltinsX86.def | 280 +- include/clang/Basic/DeclNodes.td | 1 + include/clang/Basic/Diagnostic.h | 21 +- include/clang/Basic/DiagnosticASTKinds.td | 8 + include/clang/Basic/DiagnosticCommentKinds.td | 2 +- include/clang/Basic/DiagnosticCommonKinds.td | 15 + include/clang/Basic/DiagnosticDriverKinds.td | 15 + .../clang/Basic/DiagnosticFrontendKinds.td | 10 +- include/clang/Basic/DiagnosticGroups.td | 18 +- include/clang/Basic/DiagnosticIDs.h | 2 +- include/clang/Basic/DiagnosticLexKinds.td | 15 +- include/clang/Basic/DiagnosticOptions.h | 2 +- include/clang/Basic/DiagnosticParseKinds.td | 30 +- include/clang/Basic/DiagnosticSemaKinds.td | 344 ++- .../Basic/DiagnosticSerializationKinds.td | 5 +- include/clang/Basic/FileManager.h | 10 +- include/clang/Basic/IdentifierTable.h | 40 +- include/clang/Basic/LLVM.h | 2 + include/clang/Basic/LangOptions.def | 11 +- include/clang/Basic/LangOptions.h | 20 +- include/clang/Basic/Linkage.h | 4 + include/clang/Basic/Module.h | 102 +- include/clang/Basic/PlistSupport.h | 23 +- include/clang/Basic/SanitizerBlacklist.h | 3 +- include/clang/Basic/Sanitizers.def | 33 +- include/clang/Basic/Sanitizers.h | 53 +- include/clang/Basic/SourceManager.h | 36 +- include/clang/Basic/SourceManagerInternals.h | 5 - include/clang/Basic/Specifiers.h | 7 +- include/clang/Basic/TargetBuiltins.h | 10 + include/clang/Basic/TargetInfo.h | 16 +- include/clang/Basic/TokenKinds.def | 35 +- include/clang/Basic/VersionTuple.h | 54 +- include/clang/CodeGen/BackendUtil.h | 2 +- include/clang/CodeGen/CGFunctionInfo.h | 8 +- include/clang/CodeGen/CodeGenAction.h | 2 +- include/clang/CodeGen/ModuleBuilder.h | 2 - include/clang/Driver/CC1Options.td | 50 +- include/clang/Driver/CLCompatOptions.td | 44 +- include/clang/Driver/Driver.h | 15 +- include/clang/Driver/Job.h | 2 +- include/clang/Driver/Multilib.h | 22 +- include/clang/Driver/Options.td | 143 +- include/clang/Driver/SanitizerArgs.h | 9 +- include/clang/Driver/ToolChain.h | 16 + include/clang/Driver/Types.def | 3 +- include/clang/Format/Format.h | 31 +- include/clang/Frontend/ASTUnit.h | 14 +- include/clang/Frontend/CodeGenOptions.def | 26 +- include/clang/Frontend/CodeGenOptions.h | 13 + include/clang/Frontend/CommandLineSourceLoc.h | 2 +- include/clang/Frontend/CompilerInstance.h | 52 +- include/clang/Frontend/CompilerInvocation.h | 2 +- .../clang/Frontend/DependencyOutputOptions.h | 9 +- include/clang/Frontend/DiagnosticRenderer.h | 4 +- include/clang/Frontend/FrontendActions.h | 20 +- include/clang/Frontend/FrontendOptions.h | 1 + include/clang/Frontend/MultiplexConsumer.h | 4 +- .../Frontend/PreprocessorOutputOptions.h | 2 + include/clang/Frontend/TextDiagnostic.h | 4 +- .../clang/Frontend/TextDiagnosticPrinter.h | 2 +- include/clang/Frontend/Utils.h | 5 +- .../clang/Frontend/VerifyDiagnosticConsumer.h | 6 +- include/clang/Index/USRGeneration.h | 6 +- .../clang/Lex/ExternalPreprocessorSource.h | 4 + include/clang/Lex/HeaderMap.h | 4 +- include/clang/Lex/HeaderSearch.h | 12 +- include/clang/Lex/Lexer.h | 24 +- include/clang/Lex/LiteralSupport.h | 14 +- include/clang/Lex/MacroArgs.h | 3 +- include/clang/Lex/MacroInfo.h | 236 +- include/clang/Lex/ModuleLoader.h | 3 +- include/clang/Lex/ModuleMap.h | 11 +- include/clang/Lex/PPCallbacks.h | 44 +- .../clang/Lex/PPConditionalDirectiveRecord.h | 4 +- include/clang/Lex/PTHLexer.h | 7 +- include/clang/Lex/PTHManager.h | 7 +- include/clang/Lex/Pragma.h | 2 +- include/clang/Lex/PreprocessingRecord.h | 226 +- include/clang/Lex/Preprocessor.h | 321 ++- include/clang/Lex/PreprocessorLexer.h | 4 +- include/clang/Lex/Token.h | 19 +- include/clang/Lex/TokenLexer.h | 4 +- include/clang/Parse/Parser.h | 53 +- include/clang/Rewrite/Core/DeltaTree.h | 2 +- include/clang/Rewrite/Core/RewriteBuffer.h | 117 + include/clang/Rewrite/Core/RewriteRope.h | 2 +- include/clang/Rewrite/Core/Rewriter.h | 97 +- include/clang/Rewrite/Core/TokenRewriter.h | 4 +- .../clang/Rewrite/Frontend/FixItRewriter.h | 2 +- .../clang/Rewrite/Frontend/FrontendActions.h | 2 +- include/clang/Sema/AttributeList.h | 12 +- include/clang/Sema/CodeCompleteConsumer.h | 25 +- include/clang/Sema/DeclSpec.h | 20 +- include/clang/Sema/DelayedDiagnostic.h | 15 +- include/clang/Sema/ExternalSemaSource.h | 26 +- include/clang/Sema/Initialization.h | 17 +- include/clang/Sema/Lookup.h | 23 +- .../clang/Sema/MultiplexExternalSemaSource.h | 36 +- include/clang/Sema/Overload.h | 4 +- include/clang/Sema/Ownership.h | 2 +- include/clang/Sema/Scope.h | 55 +- include/clang/Sema/ScopeInfo.h | 38 +- include/clang/Sema/Sema.h | 508 ++-- include/clang/Sema/SemaInternal.h | 59 +- include/clang/Sema/Template.h | 4 +- include/clang/Sema/TemplateDeduction.h | 18 +- include/clang/Sema/TypoCorrection.h | 2 +- include/clang/Serialization/ASTBitCodes.h | 50 +- .../ASTDeserializationListener.h | 13 +- include/clang/Serialization/ASTReader.h | 339 +-- include/clang/Serialization/ASTWriter.h | 95 +- .../clang/Serialization/ContinuousRangeMap.h | 4 +- .../clang/Serialization/GlobalModuleIndex.h | 4 +- include/clang/Serialization/Module.h | 9 +- include/clang/Serialization/ModuleManager.h | 62 +- .../StaticAnalyzer/Core/AnalyzerOptions.h | 98 +- .../Core/BugReporter/BugReporter.h | 4 +- .../Core/BugReporter/PathDiagnostic.h | 30 +- include/clang/StaticAnalyzer/Core/Checker.h | 49 +- .../StaticAnalyzer/Core/CheckerManager.h | 63 +- .../Core/PathSensitive/AnalysisManager.h | 4 +- .../Core/PathSensitive/CallEvent.h | 2 +- .../Core/PathSensitive/CoreEngine.h | 6 +- .../Core/PathSensitive/Environment.h | 1 - .../Core/PathSensitive/ExplodedGraph.h | 2 - .../Core/PathSensitive/ExprEngine.h | 2 +- .../Core/PathSensitive/MemRegion.h | 4 +- .../Core/PathSensitive/ProgramState.h | 2 +- .../StaticAnalyzer/Core/PathSensitive/SVals.h | 10 +- .../StaticAnalyzer/Core/PathSensitive/Store.h | 2 +- .../Core/PathSensitive/SymbolManager.h | 4 +- include/clang/Tooling/CompilationDatabase.h | 2 +- include/clang/Tooling/Tooling.h | 8 +- include/clang/module.modulemap | 93 +- lib/ARCMigrate/ARCMT.cpp | 6 +- lib/ARCMigrate/ObjCMT.cpp | 99 +- lib/ARCMigrate/PlistReporter.cpp | 14 +- lib/ARCMigrate/TransAPIUses.cpp | 2 +- lib/ARCMigrate/TransRetainReleaseDealloc.cpp | 2 +- lib/ARCMigrate/TransUnusedInitDelegate.cpp | 2 +- lib/ARCMigrate/Transforms.cpp | 8 +- lib/ARCMigrate/Transforms.h | 2 +- lib/AST/ASTContext.cpp | 144 +- lib/AST/ASTDumper.cpp | 56 +- lib/AST/ASTImporter.cpp | 753 ++++- lib/AST/AttrImpl.cpp | 8 +- lib/AST/CXXABI.h | 16 + lib/AST/CXXInheritance.cpp | 138 +- lib/AST/CommentLexer.cpp | 6 + lib/AST/Decl.cpp | 282 +- lib/AST/DeclBase.cpp | 210 +- lib/AST/DeclCXX.cpp | 32 +- lib/AST/DeclGroup.cpp | 2 + lib/AST/DeclObjC.cpp | 31 +- lib/AST/DeclTemplate.cpp | 86 +- lib/AST/Expr.cpp | 140 +- lib/AST/ExprCXX.cpp | 21 +- lib/AST/ExprClassification.cpp | 12 +- lib/AST/ExprConstant.cpp | 49 +- lib/AST/ExternalASTSource.cpp | 5 + lib/AST/InheritViz.cpp | 19 +- lib/AST/ItaniumCXXABI.cpp | 18 +- lib/AST/ItaniumMangle.cpp | 749 +++-- lib/AST/MicrosoftCXXABI.cpp | 55 +- lib/AST/MicrosoftMangle.cpp | 451 ++- lib/AST/NSAPI.cpp | 102 +- lib/AST/RecordLayoutBuilder.cpp | 221 +- lib/AST/Stmt.cpp | 230 +- lib/AST/StmtPrinter.cpp | 56 +- lib/AST/StmtProfile.cpp | 52 +- lib/AST/Type.cpp | 34 +- lib/AST/TypePrinter.cpp | 24 +- lib/AST/VTableBuilder.cpp | 223 +- lib/ASTMatchers/ASTMatchFinder.cpp | 2 +- lib/ASTMatchers/CMakeLists.txt | 1 + lib/ASTMatchers/Dynamic/Diagnostics.cpp | 10 +- lib/ASTMatchers/Dynamic/Marshallers.h | 53 +- lib/ASTMatchers/Dynamic/Registry.cpp | 10 + lib/Analysis/AnalysisDeclContext.cpp | 8 +- lib/Analysis/CFG.cpp | 15 +- lib/Analysis/Consumed.cpp | 15 +- lib/Analysis/FormatString.cpp | 101 +- lib/Analysis/LiveVariables.cpp | 7 +- lib/Analysis/PrintfFormatString.cpp | 43 +- lib/Analysis/ThreadSafety.cpp | 301 +- lib/Analysis/ThreadSafetyCommon.cpp | 38 +- lib/Analysis/ThreadSafetyTIL.cpp | 23 +- lib/Analysis/UninitializedValues.cpp | 59 +- lib/Basic/Diagnostic.cpp | 13 +- lib/Basic/DiagnosticIDs.cpp | 2 +- lib/Basic/FileManager.cpp | 2 +- lib/Basic/IdentifierTable.cpp | 30 +- lib/Basic/LangOptions.cpp | 2 +- lib/Basic/Module.cpp | 111 +- lib/Basic/OpenMPKinds.cpp | 3 +- lib/Basic/SanitizerBlacklist.cpp | 6 +- lib/Basic/Sanitizers.cpp | 41 +- lib/Basic/SourceManager.cpp | 4 +- lib/Basic/TargetInfo.cpp | 1 + lib/Basic/Targets.cpp | 815 ++++-- lib/Basic/Version.cpp | 2 +- lib/Basic/VersionTuple.cpp | 16 +- lib/Basic/VirtualFileSystem.cpp | 10 +- lib/CodeGen/ABIInfo.h | 2 + lib/CodeGen/BackendUtil.cpp | 165 +- lib/CodeGen/CGAtomic.cpp | 962 +++++-- lib/CodeGen/CGBlocks.cpp | 132 +- lib/CodeGen/CGBuilder.h | 2 +- lib/CodeGen/CGBuiltin.cpp | 719 +++-- lib/CodeGen/CGCUDANV.cpp | 218 +- lib/CodeGen/CGCUDARuntime.h | 17 +- lib/CodeGen/CGCXX.cpp | 7 +- lib/CodeGen/CGCXXABI.cpp | 7 + lib/CodeGen/CGCXXABI.h | 11 + lib/CodeGen/CGCall.cpp | 193 +- lib/CodeGen/CGClass.cpp | 414 ++- lib/CodeGen/CGCleanup.cpp | 46 +- lib/CodeGen/CGCleanup.h | 13 +- lib/CodeGen/CGDebugInfo.cpp | 1186 ++++---- lib/CodeGen/CGDebugInfo.h | 421 +-- lib/CodeGen/CGDecl.cpp | 89 +- lib/CodeGen/CGDeclCXX.cpp | 68 +- lib/CodeGen/CGException.cpp | 1026 +++---- lib/CodeGen/CGExpr.cpp | 123 +- lib/CodeGen/CGExprAgg.cpp | 78 +- lib/CodeGen/CGExprCXX.cpp | 50 +- lib/CodeGen/CGExprComplex.cpp | 29 +- lib/CodeGen/CGExprConstant.cpp | 20 +- lib/CodeGen/CGExprScalar.cpp | 321 ++- lib/CodeGen/CGLoopInfo.cpp | 5 +- lib/CodeGen/CGLoopInfo.h | 4 +- lib/CodeGen/CGObjC.cpp | 64 +- lib/CodeGen/CGObjCGNU.cpp | 171 +- lib/CodeGen/CGObjCMac.cpp | 68 +- lib/CodeGen/CGObjCRuntime.cpp | 2 +- lib/CodeGen/CGOpenMPRuntime.cpp | 2202 +++++++++++--- lib/CodeGen/CGOpenMPRuntime.h | 392 ++- lib/CodeGen/CGRecordLayout.h | 4 +- lib/CodeGen/CGRecordLayoutBuilder.cpp | 48 +- lib/CodeGen/CGStmt.cpp | 125 +- lib/CodeGen/CGStmtOpenMP.cpp | 2112 +++++++++++--- lib/CodeGen/CGVTT.cpp | 16 +- lib/CodeGen/CGVTables.cpp | 92 +- lib/CodeGen/CGValue.h | 2 + lib/CodeGen/CMakeLists.txt | 2 +- lib/CodeGen/CodeGenAction.cpp | 74 +- lib/CodeGen/CodeGenFunction.cpp | 153 +- lib/CodeGen/CodeGenFunction.h | 407 ++- lib/CodeGen/CodeGenModule.cpp | 274 +- lib/CodeGen/CodeGenModule.h | 25 +- lib/CodeGen/CodeGenPGO.cpp | 910 +++--- lib/CodeGen/CodeGenPGO.h | 135 +- lib/CodeGen/CodeGenTypes.cpp | 15 +- lib/CodeGen/CodeGenTypes.h | 29 +- lib/CodeGen/CoverageMappingGen.cpp | 1257 ++++---- lib/CodeGen/EHScopeStack.h | 148 +- lib/CodeGen/ItaniumCXXABI.cpp | 461 ++- lib/CodeGen/MicrosoftCXXABI.cpp | 1268 ++++++-- lib/CodeGen/ModuleBuilder.cpp | 10 +- lib/CodeGen/SanitizerMetadata.h | 4 +- lib/CodeGen/TargetInfo.cpp | 838 +++--- lib/Driver/CrossWindowsToolChain.cpp | 2 +- lib/Driver/Driver.cpp | 129 +- lib/Driver/Job.cpp | 14 +- lib/Driver/MSVCToolChain.cpp | 7 +- lib/Driver/Multilib.cpp | 125 +- lib/Driver/SanitizerArgs.cpp | 553 ++-- lib/Driver/ToolChain.cpp | 53 +- lib/Driver/ToolChains.cpp | 377 ++- lib/Driver/ToolChains.h | 99 +- lib/Driver/Tools.cpp | 1409 ++++++--- lib/Driver/Tools.h | 57 +- lib/Driver/Types.cpp | 5 +- lib/Edit/EditedSource.cpp | 10 +- lib/Format/BreakableToken.cpp | 18 +- lib/Format/ContinuationIndenter.cpp | 184 +- lib/Format/Format.cpp | 292 +- lib/Format/FormatToken.cpp | 55 +- lib/Format/FormatToken.h | 194 +- lib/Format/TokenAnnotator.cpp | 433 ++- lib/Format/TokenAnnotator.h | 22 +- lib/Format/UnwrappedLineFormatter.cpp | 941 +++--- lib/Format/UnwrappedLineFormatter.h | 132 +- lib/Format/UnwrappedLineParser.cpp | 361 ++- lib/Format/UnwrappedLineParser.h | 16 +- lib/Format/WhitespaceManager.cpp | 100 +- lib/Format/WhitespaceManager.h | 7 + lib/Frontend/ASTConsumers.cpp | 1 - lib/Frontend/ASTMerge.cpp | 8 +- lib/Frontend/ASTUnit.cpp | 204 +- lib/Frontend/CacheTokens.cpp | 31 +- lib/Frontend/ChainedIncludesSource.cpp | 7 +- lib/Frontend/CompilerInstance.cpp | 330 +-- lib/Frontend/CompilerInvocation.cpp | 169 +- lib/Frontend/DependencyFile.cpp | 82 +- lib/Frontend/FrontendAction.cpp | 46 +- lib/Frontend/FrontendActions.cpp | 134 +- lib/Frontend/FrontendOptions.cpp | 1 + lib/Frontend/HeaderIncludeGen.cpp | 2 +- lib/Frontend/InitHeaderSearch.cpp | 31 +- lib/Frontend/InitPreprocessor.cpp | 13 +- lib/Frontend/ModuleDependencyCollector.cpp | 4 +- lib/Frontend/MultiplexConsumer.cpp | 25 +- lib/Frontend/PrintPreprocessedOutput.cpp | 38 +- lib/Frontend/Rewrite/InclusionRewriter.cpp | 24 +- lib/Frontend/Rewrite/RewriteModernObjC.cpp | 85 +- lib/Frontend/Rewrite/RewriteObjC.cpp | 36 +- lib/Frontend/SerializedDiagnosticPrinter.cpp | 9 +- lib/Frontend/TextDiagnostic.cpp | 8 +- lib/Frontend/VerifyDiagnosticConsumer.cpp | 6 +- lib/Headers/CMakeLists.txt | 6 + lib/Headers/Intrin.h | 11 +- lib/Headers/__stddef_max_align_t.h | 9 +- lib/Headers/altivec.h | 1362 ++++++++- lib/Headers/arm_acle.h | 68 +- lib/Headers/avx2intrin.h | 37 +- lib/Headers/avx512bwintrin.h | 438 ++- lib/Headers/avx512dqintrin.h | 237 ++ lib/Headers/avx512erintrin.h | 326 ++- lib/Headers/avx512fintrin.h | 995 ++++++- lib/Headers/avx512vlbwintrin.h | 774 +++++ lib/Headers/avx512vldqintrin.h | 349 +++ lib/Headers/avx512vlintrin.h | 1236 ++++++++ lib/Headers/avxintrin.h | 196 +- lib/Headers/cuda_builtin_vars.h | 110 + lib/Headers/emmintrin.h | 84 +- lib/Headers/htmintrin.h | 226 ++ lib/Headers/htmxlintrin.h | 363 +++ lib/Headers/immintrin.h | 8 + lib/Headers/module.modulemap | 15 +- lib/Headers/s390intrin.h | 35 + lib/Headers/stdatomic.h | 4 +- lib/Headers/unwind.h | 18 +- lib/Headers/xmmintrin.h | 2 +- lib/Index/SimpleFormatContext.h | 2 - lib/Index/USRGeneration.cpp | 2 +- lib/Lex/HeaderSearch.cpp | 47 +- lib/Lex/Lexer.cpp | 12 +- lib/Lex/LiteralSupport.cpp | 90 +- lib/Lex/MacroArgs.cpp | 7 +- lib/Lex/MacroInfo.cpp | 17 +- lib/Lex/ModuleMap.cpp | 184 +- lib/Lex/PPConditionalDirectiveRecord.cpp | 4 +- lib/Lex/PPDirectives.cpp | 325 +-- lib/Lex/PPExpressions.cpp | 25 +- lib/Lex/PPLexerChange.cpp | 130 +- lib/Lex/PPMacroExpansion.cpp | 293 +- lib/Lex/Pragma.cpp | 67 +- lib/Lex/PreprocessingRecord.cpp | 74 +- lib/Lex/Preprocessor.cpp | 82 +- lib/Lex/ScratchBuffer.cpp | 5 +- lib/Lex/TokenLexer.cpp | 9 +- lib/Parse/ParseCXXInlineMethods.cpp | 54 +- lib/Parse/ParseDecl.cpp | 268 +- lib/Parse/ParseDeclCXX.cpp | 272 +- lib/Parse/ParseExpr.cpp | 104 +- lib/Parse/ParseExprCXX.cpp | 65 +- lib/Parse/ParseInit.cpp | 2 +- lib/Parse/ParseObjc.cpp | 11 +- lib/Parse/ParseOpenMP.cpp | 11 +- lib/Parse/ParsePragma.cpp | 43 +- lib/Parse/ParseStmt.cpp | 53 +- lib/Parse/ParseStmtAsm.cpp | 12 +- lib/Parse/ParseTemplate.cpp | 4 +- lib/Parse/Parser.cpp | 70 +- lib/Parse/RAIIObjectsForParser.h | 22 +- lib/Rewrite/RewriteRope.cpp | 4 +- lib/Rewrite/Rewriter.cpp | 2 +- lib/Sema/AnalysisBasedWarnings.cpp | 43 +- lib/Sema/CodeCompleteConsumer.cpp | 47 +- lib/Sema/DeclSpec.cpp | 14 +- lib/Sema/DelayedDiagnostic.cpp | 2 + lib/Sema/IdentifierResolver.cpp | 7 +- lib/Sema/JumpDiagnostics.cpp | 55 +- lib/Sema/MultiplexExternalSemaSource.cpp | 32 +- lib/Sema/Scope.cpp | 23 +- lib/Sema/ScopeInfo.cpp | 2 + lib/Sema/Sema.cpp | 109 +- lib/Sema/SemaAccess.cpp | 2 +- lib/Sema/SemaAttr.cpp | 5 +- lib/Sema/SemaCUDA.cpp | 21 +- lib/Sema/SemaCXXScopeSpec.cpp | 36 +- lib/Sema/SemaCast.cpp | 47 +- lib/Sema/SemaChecking.cpp | 781 ++++- lib/Sema/SemaCodeComplete.cpp | 440 ++- lib/Sema/SemaDecl.cpp | 887 ++++-- lib/Sema/SemaDeclAttr.cpp | 334 ++- lib/Sema/SemaDeclCXX.cpp | 383 ++- lib/Sema/SemaDeclObjC.cpp | 128 +- lib/Sema/SemaExceptionSpec.cpp | 12 +- lib/Sema/SemaExpr.cpp | 856 ++++-- lib/Sema/SemaExprCXX.cpp | 623 +++- lib/Sema/SemaExprMember.cpp | 103 +- lib/Sema/SemaExprObjC.cpp | 183 +- lib/Sema/SemaFixItUtils.cpp | 7 +- lib/Sema/SemaInit.cpp | 600 ++-- lib/Sema/SemaLambda.cpp | 268 +- lib/Sema/SemaLookup.cpp | 239 +- lib/Sema/SemaObjCProperty.cpp | 42 +- lib/Sema/SemaOpenMP.cpp | 1666 ++++++++--- lib/Sema/SemaOverload.cpp | 307 +- lib/Sema/SemaPseudoObject.cpp | 22 +- lib/Sema/SemaStmt.cpp | 638 ++-- lib/Sema/SemaStmtAsm.cpp | 53 +- lib/Sema/SemaTemplate.cpp | 87 +- lib/Sema/SemaTemplateDeduction.cpp | 286 +- lib/Sema/SemaTemplateInstantiate.cpp | 268 +- lib/Sema/SemaTemplateInstantiateDecl.cpp | 105 +- lib/Sema/SemaTemplateVariadic.cpp | 13 +- lib/Sema/SemaType.cpp | 181 +- lib/Sema/TreeTransform.h | 162 +- lib/Serialization/ASTCommon.cpp | 25 +- lib/Serialization/ASTCommon.h | 23 +- lib/Serialization/ASTReader.cpp | 1273 ++++---- lib/Serialization/ASTReaderDecl.cpp | 779 +++-- lib/Serialization/ASTReaderStmt.cpp | 94 +- lib/Serialization/ASTWriter.cpp | 1345 ++++----- lib/Serialization/ASTWriterDecl.cpp | 264 +- lib/Serialization/ASTWriterStmt.cpp | 44 +- lib/Serialization/GlobalModuleIndex.cpp | 8 +- lib/Serialization/Module.cpp | 1 + lib/Serialization/ModuleManager.cpp | 93 +- .../Checkers/CStringChecker.cpp | 4 - .../Checkers/CheckSecuritySyntaxOnly.cpp | 1 + lib/StaticAnalyzer/Checkers/Checkers.td | 6 +- .../Checkers/DeadStoresChecker.cpp | 2 +- .../Checkers/DereferenceChecker.cpp | 2 +- lib/StaticAnalyzer/Checkers/InterCheckerAPI.h | 2 + .../Checkers/IvarInvalidationChecker.cpp | 2 +- .../Checkers/MacOSKeychainAPIChecker.cpp | 22 +- lib/StaticAnalyzer/Checkers/MallocChecker.cpp | 507 +++- .../MallocOverflowSecurityChecker.cpp | 8 +- .../Checkers/RetainCountChecker.cpp | 351 ++- lib/StaticAnalyzer/Core/AnalyzerOptions.cpp | 59 +- lib/StaticAnalyzer/Core/BugReporter.cpp | 41 +- .../Core/BugReporterVisitors.cpp | 11 +- lib/StaticAnalyzer/Core/Checker.cpp | 8 - lib/StaticAnalyzer/Core/ExprEngine.cpp | 15 +- lib/StaticAnalyzer/Core/ExprEngineC.cpp | 2 +- lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp | 8 +- lib/StaticAnalyzer/Core/MemRegion.cpp | 15 +- lib/StaticAnalyzer/Core/PathDiagnostic.cpp | 22 +- lib/StaticAnalyzer/Core/PlistDiagnostics.cpp | 28 +- lib/StaticAnalyzer/Core/RegionStore.cpp | 2 +- .../Core/SimpleConstraintManager.h | 2 +- lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp | 2 +- .../Frontend/AnalysisConsumer.cpp | 13 +- .../Frontend/CheckerRegistration.cpp | 2 +- lib/StaticAnalyzer/Frontend/ModelInjector.h | 4 +- lib/Tooling/CommonOptionsParser.cpp | 12 +- lib/Tooling/CompilationDatabase.cpp | 22 +- lib/Tooling/Core/Replacement.cpp | 8 +- lib/Tooling/FileMatchTrie.cpp | 15 +- lib/Tooling/JSONCompilationDatabase.cpp | 6 +- lib/Tooling/Tooling.cpp | 2 +- runtime/compiler-rt/Makefile | 21 +- test/ARCMT/nonobjc-to-objc-cast.m | 11 +- test/ARCMT/nonobjc-to-objc-cast.m.result | 11 +- test/ARCMT/objcmt-ns-macros.m | 23 + test/ARCMT/objcmt-ns-macros.m.result | 27 +- test/ARCMT/objcmt-property-dot-syntax.m | 63 +- .../ARCMT/objcmt-property-dot-syntax.m.result | 63 +- test/ARCMT/objcmt-property.m | 8 + test/ARCMT/objcmt-property.m.result | 7 + test/ASTMerge/Inputs/body1.c | 6 + test/ASTMerge/Inputs/body2.c | 4 + test/ASTMerge/codegen-body.c | 6 + test/ASTMerge/codegen-exprs.c | 5 + ...Malloc+MismatchedDeallocator+NewDelete.cpp | 8 +- ...oc+MismatchedDeallocator_intersections.cpp | 13 +- .../MismatchedDeallocator-checker-test.mm | 16 +- .../MismatchedDeallocator-path-notes.cpp | 180 +- test/Analysis/NewDelete-checker-test.cpp | 29 +- test/Analysis/NewDelete-intersections.mm | 16 +- test/Analysis/NewDelete-path-notes.cpp | 2 + test/Analysis/array-struct.c | 16 + test/Analysis/conditional-path-notes.c | 9 + test/Analysis/crash-trace.c | 4 + test/Analysis/cxx-for-range.cpp | 6 + .../diagnostics/deref-track-symbolic-region.c | 2 + .../report-issues-within-main-file.cpp | 9 +- .../Analysis/diagnostics/undef-value-caller.c | 1 + test/Analysis/diagnostics/undef-value-param.c | 3 + test/Analysis/diagnostics/undef-value-param.m | 2 + test/Analysis/dtor.cpp | 2 +- test/Analysis/edges-new.mm | 51 + test/Analysis/free.c | 17 +- test/Analysis/html-diags.c | 2 - test/Analysis/inline-plist.c | 7 + test/Analysis/inline-unique-reports.c | 1 + .../inlining/eager-reclamation-path-notes.c | 2 + .../inlining/eager-reclamation-path-notes.cpp | 1 + test/Analysis/inlining/path-notes.c | 12 + test/Analysis/inlining/path-notes.cpp | 29 +- test/Analysis/inlining/path-notes.m | 6 + test/Analysis/malloc-annotations.c | 2 +- test/Analysis/malloc-plist.c | 17 + test/Analysis/malloc.c | 115 + test/Analysis/method-call-path-notes.cpp | 6 + test/Analysis/model-file.cpp | 1 + test/Analysis/null-deref-path-notes.m | 3 + test/Analysis/objc-arc.m | 17 + test/Analysis/objc-radar17039661.m | 1183 +++++++- test/Analysis/outofbound.c | 2 +- test/Analysis/plist-macros.cpp | 14 +- test/Analysis/plist-output-alternate.m | 7 + test/Analysis/plist-output.m | 23 + test/Analysis/properties.m | 342 ++- test/Analysis/redefined_system.c | 2 +- test/Analysis/retain-release-path-notes-gc.m | 5 + test/Analysis/retain-release-path-notes.m | 92 + test/Analysis/security-syntax-checks.m | 4 + test/Analysis/stack-addr-ps.c | 7 + test/Analysis/undef-buffers.c | 2 +- test/Analysis/unix-fns.c | 14 + .../basic.lookup.qual/class.qual/p2.cpp | 2 +- test/CXX/basic/basic.types/p10.cpp | 2 + test/CXX/class.derived/class.virtual/p2.cpp | 2 +- test/CXX/class/class.friend/p1.cpp | 4 + test/CXX/conv/conv.mem/p4.cpp | 2 +- test/CXX/dcl.dcl/dcl.attr/dcl.align/p5.cpp | 6 + .../CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp | 4 + .../CXX/dcl.dcl/dcl.spec/dcl.constexpr/p9.cpp | 4 +- .../dcl.fct.def/dcl.fct.def.default/p2.cpp | 4 +- .../dcl.decl/dcl.init/dcl.init.list/p7-0x.cpp | 3 + .../dcl.decl/dcl.init/dcl.init.ref/p5-0x.cpp | 2 +- .../dcl.decl/dcl.init/dcl.init.ref/p5-var.cpp | 14 +- test/CXX/dcl.decl/dcl.init/p6.cpp | 6 +- .../dcl.meaning/dcl.fct.default/p3.cpp | 3 + .../dcl.meaning/dcl.fct.default/p4.cpp | 20 + test/CXX/drs/dr0xx.cpp | 6 +- test/CXX/drs/dr14xx.cpp | 148 + test/CXX/drs/dr15xx.cpp | 83 + test/CXX/drs/dr16xx.cpp | 26 + test/CXX/drs/dr1748.cpp | 35 + test/CXX/drs/dr17xx.cpp | 34 + test/CXX/drs/dr19xx.cpp | 71 + test/CXX/drs/dr2xx.cpp | 15 +- test/CXX/drs/dr3xx.cpp | 4 +- test/CXX/drs/dr412.cpp | 2 +- test/CXX/drs/dr4xx.cpp | 4 +- test/CXX/drs/dr7xx.cpp | 20 + test/CXX/except/except.spec/p14-ir.cpp | 8 +- .../expr.prim/expr.prim.general/p8-0x.cpp | 4 +- .../expr/expr.prim/expr.prim.lambda/p16.cpp | 8 +- .../expr/expr.prim/expr.prim.lambda/p2.cpp | 7 +- .../expr.prim/expr.prim.lambda/templates.cpp | 5 +- test/CXX/expr/p10-0x.cpp | 22 +- test/CXX/special/class.copy/implicit-move.cpp | 2 +- test/CXX/special/class.copy/p15-inclass.cpp | 12 +- test/CXX/special/class.dtor/p10-0x.cpp | 4 +- test/CXX/special/class.dtor/p9.cpp | 7 + test/CXX/special/class.inhctor/p2.cpp | 2 +- .../stmt.stmt/stmt.iter/stmt.ranged/p1.cpp | 14 +- .../CXX/temp/temp.arg/temp.arg.nontype/p5.cpp | 2 +- .../temp.class/temp.mem.func/p1inst.cpp | 2 +- .../temp.fct/temp.func.order/p4.cpp | 23 +- test/CXX/temp/temp.decls/temp.mem/p5.cpp | 4 +- test/CXX/temp/temp.param/p15-cxx0x.cpp | 2 +- test/CXX/temp/temp.res/temp.local/p3.cpp | 2 +- test/CodeGen/2004-06-17-UnorderedCompares.c | 4 +- .../2005-12-04-DeclarationLineNumbers.c | 23 - test/CodeGen/2007-02-25-C-DotDotDot.c | 2 +- test/CodeGen/2007-03-27-VarLengthArray.c | 2 +- test/CodeGen/2008-07-29-override-alias-decl.c | 2 +- test/CodeGen/2008-08-07-AlignPadding1.c | 2 +- test/CodeGen/2009-01-05-BlockInlining.c | 6 +- .../CodeGen/2009-02-13-zerosize-union-field.c | 8 +- test/CodeGen/2009-10-20-GlobalDebug.c | 10 +- test/CodeGen/2010-02-15-DbgStaticVar.c | 4 +- test/CodeGen/2010-02-16-DbgScopes.c | 8 +- test/CodeGen/2010-03-09-DbgInfo.c | 3 +- test/CodeGen/2010-03-5-LexicalScope.c | 4 +- test/CodeGen/2010-07-08-DeclDebugLineNo.c | 4 +- .../2010-07-14-overconservative-align.c | 2 +- test/CodeGen/2010-07-14-ref-off-end.c | 4 +- test/CodeGen/2010-08-10-DbgConstant.c | 3 +- test/CodeGen/24-bit.c | 2 +- test/CodeGen/aarch64-inline-asm.c | 8 +- test/CodeGen/aarch64-varargs.c | 110 +- test/CodeGen/address-safety-attr.cpp | 88 +- test/CodeGen/address-space-field1.c | 20 +- test/CodeGen/address-space.c | 13 +- test/CodeGen/align-local.c | 4 +- test/CodeGen/align-systemz.c | 27 + test/CodeGen/alignment.c | 2 +- test/CodeGen/annotations-builtin.c | 2 +- test/CodeGen/annotations-field.c | 4 +- test/CodeGen/annotations-var.c | 6 +- test/CodeGen/arm-aapcs-vfp.c | 10 +- test/CodeGen/arm-abi-vector.c | 82 +- test/CodeGen/arm-arguments.c | 14 +- test/CodeGen/arm-asm-variable.c | 2 +- test/CodeGen/arm-atomics-m.c | 2 +- test/CodeGen/arm-atomics.c | 4 +- test/CodeGen/arm-bitfield-alignment.c | 15 + test/CodeGen/arm-clear.c | 4 +- test/CodeGen/arm-homogenous.c | 2 +- test/CodeGen/arm-pnaclcall.c | 33 - test/CodeGen/arm-target-features.c | 38 + test/CodeGen/arm-vector-align.c | 2 +- test/CodeGen/arm64-abi-vector.c | 78 +- test/CodeGen/arm64-arguments.c | 168 +- test/CodeGen/arm64_neon_high_half.c | 12 +- test/CodeGen/arm64_vMaxMin.c | 90 +- test/CodeGen/arm64_vset_lane.c | 8 +- test/CodeGen/arm64_vtst.c | 8 +- test/CodeGen/asm-errors.c | 6 + test/CodeGen/asm-inout.c | 2 +- test/CodeGen/asm-reg-var-local.c | 28 +- test/CodeGen/atomic-arm64.c | 8 +- test/CodeGen/atomic-ops.c | 54 +- test/CodeGen/atomic_ops.c | 20 + test/CodeGen/atomics-inlining.c | 48 +- test/CodeGen/attributes.c | 2 +- test/CodeGen/avx-builtins.c | 30 +- test/CodeGen/avx-shuffle-builtins.c | 118 +- test/CodeGen/avx2-builtins.c | 59 +- test/CodeGen/avx512bw-builtins.c | 402 +++ test/CodeGen/avx512dq-builtins.c | 164 ++ test/CodeGen/avx512er-builtins.c | 346 +++ test/CodeGen/avx512f-builtins.c | 703 ++++- test/CodeGen/avx512vl-builtins.c | 1072 +++++++ test/CodeGen/avx512vlbw-builtins.c | 743 +++++ test/CodeGen/avx512vldq-builtins.c | 231 ++ test/CodeGen/big-atomic-ops.c | 10 +- test/CodeGen/block-byref-aggr.c | 22 +- test/CodeGen/blocks-opencl.cl | 2 +- test/CodeGen/blocks-seq.c | 12 +- test/CodeGen/blocks.c | 2 +- test/CodeGen/blocksignature.c | 6 +- test/CodeGen/bool_test.c | 2 +- test/CodeGen/builtin-assume.c | 23 +- test/CodeGen/builtin-expect.c | 18 +- test/CodeGen/builtin-nan-legacy.c | 13 + test/CodeGen/builtins-ppc-crypto-disabled.c | 53 + test/CodeGen/builtins-ppc-crypto.c | 303 ++ test/CodeGen/builtins-ppc-htm.c | 62 + test/CodeGen/builtins-ppc-p7-disabled.c | 33 + test/CodeGen/builtins-ppc-p7.c | 52 + test/CodeGen/builtins-ppc-p8vector.c | 698 +++++ test/CodeGen/builtins-ppc-quadword.c | 159 + test/CodeGen/builtins-systemz-error.c | 9 + test/CodeGen/builtins-systemz-vector-error.c | 174 ++ test/CodeGen/builtins-systemz-vector.c | 610 ++++ test/CodeGen/builtins-systemz.c | 144 + test/CodeGen/builtins-x86.c | 13 +- test/CodeGen/builtins.c | 32 +- test/CodeGen/c-strings.c | 12 +- test/CodeGen/c11atomics-ios.c | 108 +- test/CodeGen/c11atomics.c | 104 +- test/CodeGen/call.c | 2 +- test/CodeGen/capture-complex-expr-in-block.c | 8 +- test/CodeGen/captured-statements-nested.c | 86 +- test/CodeGen/captured-statements.c | 23 +- test/CodeGen/catch-undef-behavior.c | 23 +- test/CodeGen/cfstring.c | 4 +- test/CodeGen/cleanup-destslot-simple.c | 19 + test/CodeGen/cleanup-stack.c | 4 +- test/CodeGen/clear_cache.c | 2 +- test/CodeGen/complex-convert.c | 608 ++-- test/CodeGen/compound-literal.c | 26 +- test/CodeGen/const-arithmetic.c | 4 +- test/CodeGen/const-init.c | 4 +- test/CodeGen/darwin-string-literals.c | 12 +- test/CodeGen/debug-info-257-args.c | 25 + test/CodeGen/debug-info-args.c | 2 +- test/CodeGen/debug-info-block-decl.c | 4 +- test/CodeGen/debug-info-block-out-return.c | 4 +- test/CodeGen/debug-info-block.c | 4 +- test/CodeGen/debug-info-enum.c | 5 +- test/CodeGen/debug-info-file-change.c | 22 + test/CodeGen/debug-info-gline-tables-only2.c | 6 +- test/CodeGen/debug-info-limited.c | 4 +- test/CodeGen/debug-info-line.c | 26 +- test/CodeGen/debug-info-line3.c | 2 +- test/CodeGen/debug-info-line4.c | 2 +- test/CodeGen/debug-info-same-line.c | 7 + test/CodeGen/debug-info-scope-file.c | 8 +- test/CodeGen/debug-info-scope.c | 20 +- test/CodeGen/debug-info-static.c | 2 +- test/CodeGen/debug-info-typedef.c | 4 +- test/CodeGen/debug-info-var-location.c | 22 - test/CodeGen/debug-info-vector.c | 6 +- test/CodeGen/debug-info-version.c | 2 +- test/CodeGen/debug-info-vla.c | 5 +- test/CodeGen/debug-info.c | 2 +- test/CodeGen/dllexport.c | 8 +- test/CodeGen/dllimport.c | 12 +- test/CodeGen/enum.c | 7 +- test/CodeGen/exceptions-seh-finally.c | 242 ++ test/CodeGen/exceptions-seh-leave.c | 349 +++ test/CodeGen/exceptions-seh.c | 181 +- test/CodeGen/exprs.c | 17 +- test/CodeGen/ext-vector-indexing.c | 4 +- test/CodeGen/ext-vector-member-alignment.c | 8 +- test/CodeGen/extern-inline.c | 6 +- test/CodeGen/finite-math.c | 10 +- test/CodeGen/fp16-ops.c | 477 +-- test/CodeGen/function-target-features.c | 26 + test/CodeGen/funique-sections.c | 13 + test/CodeGen/init.c | 4 +- test/CodeGen/inline-asm-matching-constraint.c | 11 + test/CodeGen/inline.c | 7 +- test/CodeGen/integer-overflow.c | 12 +- test/CodeGen/kr-func-promote.c | 3 +- test/CodeGen/lifetime-debuginfo-1.c | 13 + test/CodeGen/lifetime-debuginfo-2.c | 29 + test/CodeGen/lineno-dbginfo.c | 5 +- test/CodeGen/linetable-endscope.c | 4 +- test/CodeGen/link-bitcode-file.c | 5 + test/CodeGen/mangle-blocks.c | 4 +- test/CodeGen/mangle-windows.c | 4 +- test/CodeGen/mips-inline-asm-modifiers.c | 4 +- test/CodeGen/mips-inline-asm.c | 19 + test/CodeGen/mips-unsigned-ext-var.c | 22 + test/CodeGen/mips-unsigned-extend.c | 15 + test/CodeGen/mips-unsupported-nan.c | 25 + test/CodeGen/mips-varargs.c | 68 +- test/CodeGen/mrtd.c | 2 +- test/CodeGen/ms-align-tentative.c | 12 +- test/CodeGen/ms-anonymous-struct.c | 84 +- test/CodeGen/ms-declspecs.c | 10 +- test/CodeGen/ms-declspecs.cpp | 15 + test/CodeGen/ms-inline-asm.c | 2 +- test/CodeGen/ms-inline-asm.cpp | 4 +- test/CodeGen/ms-intrinsics.c | 2 +- test/CodeGen/ms-setjmp.c | 32 + test/CodeGen/ms-volatile.c | 62 + test/CodeGen/mult-alt-generic.c | 8 +- test/CodeGen/named_reg_global.c | 2 +- test/CodeGen/no-opt-volatile-memcpy.c | 8 +- test/CodeGen/nvptx-cpus.c | 1 + test/CodeGen/object-size.c | 32 +- test/CodeGen/packed-arrays.c | 30 +- test/CodeGen/packed-nest-unpacked.c | 14 +- test/CodeGen/packed-structure.c | 16 +- test/CodeGen/pointer-signext.c | 4 +- test/CodeGen/ppc-varargs-struct.c | 28 +- test/CodeGen/ppc64-align-long-double.c | 2 +- test/CodeGen/ppc64-align-struct.c | 24 +- test/CodeGen/ppc64-complex-parms.c | 96 +- test/CodeGen/ppc64-elf-abi.c | 21 +- test/CodeGen/ppc64-qpx-vector.c | 29 + test/CodeGen/ppc64-struct-onefloat.c | 32 +- test/CodeGen/ppc64-varargs-complex.c | 48 +- test/CodeGen/ppc64le-aggregates.c | 62 +- test/CodeGen/ppc64le-varargs-complex.c | 48 +- test/CodeGen/pr12251.c | 2 +- test/CodeGen/pr3518.c | 6 +- test/CodeGen/pr4349.c | 6 +- test/CodeGen/pr5406.c | 2 +- test/CodeGen/pragma-comment.c | 11 +- test/CodeGen/private-extern.c | 7 +- test/CodeGen/redefine_extname.c | 2 +- test/CodeGen/sanitize-thread-attr.cpp | 15 +- test/CodeGen/sha-builtins.c | 2 +- test/CodeGen/sparcv9-abi.c | 28 +- test/CodeGen/sparcv9-dwarf.c | 176 +- test/CodeGen/sse-builtins.c | 54 +- test/CodeGen/sse.c | 40 + test/CodeGen/systemz-abi-vector.c | 590 ++++ test/CodeGen/systemz-abi.c | 591 ++++ test/CodeGen/systemz-abi.cpp | 9 + test/CodeGen/systemz-inline-asm.c | 4 +- test/CodeGen/target-data.c | 15 +- test/CodeGen/tbaa.cpp | 8 +- test/CodeGen/trapv.c | 12 +- test/CodeGen/unsigned-overflow.c | 32 +- test/CodeGen/unsigned-promotion.c | 48 +- test/CodeGen/variadic-gpfp-x86.c | 6 +- test/CodeGen/variadic-null-win64.c | 4 +- test/CodeGen/vla-2.c | 3 +- test/CodeGen/vla-3.c | 3 +- test/CodeGen/vla.c | 54 +- test/CodeGen/volatile-1.c | 60 +- test/CodeGen/volatile-2.c | 8 +- test/CodeGen/volatile-complex.c | 48 +- test/CodeGen/volatile.c | 116 +- .../windows-on-arm-dllimport-dllexport.c | 2 +- .../CodeGen/windows-on-arm-stack-probe-size.c | 28 + test/CodeGen/x86-atomic-long_double.c | 172 +- test/CodeGen/x86_32-arguments-darwin.c | 2 +- test/CodeGen/x86_32-arguments-linux.c | 2 +- test/CodeGen/x86_64-arguments-nacl.c | 28 - test/CodeGen/x86_64-arguments-win32.c | 15 + test/CodeGen/x86_64-arguments.c | 26 +- test/CodeGen/xcore-abi.c | 48 +- test/CodeGenCUDA/address-spaces.cu | 31 +- test/CodeGenCUDA/cuda-builtin-vars.cu | 28 + test/CodeGenCUDA/device-stub.cu | 41 +- test/CodeGenCUDA/filter-decl.cu | 6 + test/CodeGenCUDA/host-device-calls-host.cu | 32 + test/CodeGenCUDA/launch-bounds.cu | 51 + test/CodeGenCXX/2009-12-23-MissingSext.cpp | 8 +- test/CodeGenCXX/2010-07-23-DeclLoc.cpp | 5 +- test/CodeGenCXX/2011-12-19-init-list-ctor.cpp | 16 +- test/CodeGenCXX/2012-03-16-StoreAlign.cpp | 2 +- .../Inputs/debug-info-class-limited.cpp | 8 +- test/CodeGenCXX/PR19955.cpp | 4 +- test/CodeGenCXX/PR20038.cpp | 8 +- .../aarch64-aapcs-zerolength-bitfield.cpp | 249 ++ test/CodeGenCXX/aarch64-neon.cpp | 2 + .../CodeGenCXX/align-avx-complete-objects.cpp | 24 +- .../anonymous-union-member-initializer.cpp | 10 +- ...all-2.C => apple-kext-indirect-call-2.cpp} | 14 +- test/CodeGenCXX/apple-kext-indirect-call.C | 14 - test/CodeGenCXX/apple-kext-indirect-call.cpp | 42 + .../apple-kext-indirect-virtual-dtor-call.cpp | 43 +- ...-kext-linkage.C => apple-kext-linkage.cpp} | 0 ...C => apple-kext-no-staticinit-section.cpp} | 0 test/CodeGenCXX/arm-vaarg.cpp | 6 +- test/CodeGenCXX/arm.cpp | 46 +- test/CodeGenCXX/arm64-constructor-return.cpp | 2 +- test/CodeGenCXX/arm64-empty-struct.cpp | 4 +- test/CodeGenCXX/arm64.cpp | 30 +- test/CodeGenCXX/atomicinit.cpp | 4 +- test/CodeGenCXX/auto-variable-template.cpp | 14 + test/CodeGenCXX/bitfield.cpp | 112 +- test/CodeGenCXX/blocks-cxx11.cpp | 20 +- test/CodeGenCXX/blocks.cpp | 10 +- test/CodeGenCXX/call-with-static-chain.cpp | 2 +- test/CodeGenCXX/captured-statements.cpp | 28 +- test/CodeGenCXX/catch-undef-behavior.cpp | 45 +- test/CodeGenCXX/catch-undef-behavior2.cpp | 2 +- test/CodeGenCXX/cfi-cast.cpp | 109 + test/CodeGenCXX/cfi-nvcall.cpp | 35 + test/CodeGenCXX/cfi-vcall.cpp | 90 + test/CodeGenCXX/compound-literals.cpp | 20 +- test/CodeGenCXX/condition.cpp | 8 +- test/CodeGenCXX/conditional-gnu-ext.cpp | 6 +- test/CodeGenCXX/const-init-cxx11.cpp | 74 +- test/CodeGenCXX/const-init-cxx1y.cpp | 6 +- test/CodeGenCXX/const-init.cpp | 11 +- .../constructor-destructor-return-this.cpp | 4 +- test/CodeGenCXX/constructor-init.cpp | 32 +- test/CodeGenCXX/constructor-template.cpp | 4 +- test/CodeGenCXX/constructors.cpp | 2 +- test/CodeGenCXX/convert-to-fptr.cpp | 4 +- test/CodeGenCXX/copy-constructor-elim.cpp | 14 + .../copy-constructor-synthesis-2.cpp | 24 +- .../CodeGenCXX/copy-constructor-synthesis.cpp | 32 +- test/CodeGenCXX/coverage.cpp | 6 +- test/CodeGenCXX/crash.cpp | 11 +- test/CodeGenCXX/ctor-dtor-alias.cpp | 25 +- test/CodeGenCXX/cxx0x-initializer-array.cpp | 7 +- .../cxx0x-initializer-references.cpp | 54 +- ...initializer-stdinitializerlist-pr12086.cpp | 136 +- ...nitializer-stdinitializerlist-startend.cpp | 10 +- .../cxx0x-initializer-stdinitializerlist.cpp | 142 +- test/CodeGenCXX/cxx11-exception-spec.cpp | 16 +- .../cxx11-initializer-aggregate.cpp | 6 +- .../cxx11-initializer-array-new.cpp | 70 +- .../cxx11-thread-local-reference.cpp | 2 +- test/CodeGenCXX/cxx11-thread-local.cpp | 18 +- .../CodeGenCXX/cxx11-user-defined-literal.cpp | 14 +- test/CodeGenCXX/cxx11-vtable-key-function.cpp | 6 +- test/CodeGenCXX/cxx1y-generic-lambdas.cpp | 13 + test/CodeGenCXX/cxx1y-init-captures.cpp | 43 +- .../cxx1y-initializer-aggregate.cpp | 10 +- test/CodeGenCXX/cxx1y-sized-deallocation.cpp | 14 +- test/CodeGenCXX/debug-info-access.cpp | 22 +- test/CodeGenCXX/debug-info-alias.cpp | 18 +- .../CodeGenCXX/debug-info-anon-union-vars.cpp | 28 +- test/CodeGenCXX/debug-info-artificial-arg.cpp | 12 +- test/CodeGenCXX/debug-info-blocks.cpp | 8 +- test/CodeGenCXX/debug-info-char16.cpp | 3 +- test/CodeGenCXX/debug-info-class-nolimit.cpp | 8 +- test/CodeGenCXX/debug-info-class.cpp | 84 +- test/CodeGenCXX/debug-info-cxx1y.cpp | 17 +- test/CodeGenCXX/debug-info-decl-nested.cpp | 27 +- test/CodeGenCXX/debug-info-dup-fwd-decl.cpp | 6 +- test/CodeGenCXX/debug-info-enum-class.cpp | 64 +- test/CodeGenCXX/debug-info-enum.cpp | 28 +- test/CodeGenCXX/debug-info-flex-member.cpp | 2 +- test/CodeGenCXX/debug-info-fn-template.cpp | 4 +- .../debug-info-function-context.cpp | 12 +- test/CodeGenCXX/debug-info-fwd-ref.cpp | 9 +- .../debug-info-global-ctor-dtor.cpp | 16 +- test/CodeGenCXX/debug-info-global.cpp | 8 +- test/CodeGenCXX/debug-info-globalinit.cpp | 8 +- .../debug-info-indirect-field-decl.cpp | 13 +- test/CodeGenCXX/debug-info-limited.cpp | 11 +- test/CodeGenCXX/debug-info-line-if.cpp | 8 +- test/CodeGenCXX/debug-info-line.cpp | 194 +- test/CodeGenCXX/debug-info-method.cpp | 20 +- test/CodeGenCXX/debug-info-namespace.cpp | 90 +- test/CodeGenCXX/debug-info-nullptr.cpp | 2 +- .../debug-info-ptr-to-member-function.cpp | 15 +- test/CodeGenCXX/debug-info-qualifiers.cpp | 32 +- test/CodeGenCXX/debug-info-rvalue-ref.cpp | 3 +- test/CodeGenCXX/debug-info-same-line.cpp | 64 - test/CodeGenCXX/debug-info-scope.cpp | 51 +- test/CodeGenCXX/debug-info-static-fns.cpp | 5 +- test/CodeGenCXX/debug-info-static-member.cpp | 84 +- ...-info-template-explicit-specialization.cpp | 39 +- test/CodeGenCXX/debug-info-template-fwd.cpp | 4 +- test/CodeGenCXX/debug-info-template-limit.cpp | 4 +- .../CodeGenCXX/debug-info-template-member.cpp | 45 +- ...g-info-template-partial-specialization.cpp | 6 +- test/CodeGenCXX/debug-info-template-quals.cpp | 20 +- test/CodeGenCXX/debug-info-template.cpp | 116 +- test/CodeGenCXX/debug-info-thunk.cpp | 5 +- test/CodeGenCXX/debug-info-union-template.cpp | 6 +- test/CodeGenCXX/debug-info-union.cpp | 12 +- test/CodeGenCXX/debug-info-uuid.cpp | 33 +- test/CodeGenCXX/debug-info-varargs.cpp | 18 +- test/CodeGenCXX/debug-info-vtable-optzn.cpp | 2 +- test/CodeGenCXX/debug-info-wchar.cpp | 2 +- test/CodeGenCXX/debug-info-windows-dtor.cpp | 4 +- .../debug-info-zero-length-arrays.cpp | 10 +- test/CodeGenCXX/debug-info.cpp | 68 +- test/CodeGenCXX/debug-lambda-expressions.cpp | 101 +- test/CodeGenCXX/debug-lambda-this.cpp | 8 +- test/CodeGenCXX/deferred-global-init.cpp | 2 +- test/CodeGenCXX/delete-two-arg.cpp | 8 +- test/CodeGenCXX/delete.cpp | 24 +- test/CodeGenCXX/derived-to-base-conv.cpp | 2 +- ...ived-to-virtual-base-class-calls-final.cpp | 2 +- test/CodeGenCXX/destructor-debug-info.cpp | 2 +- test/CodeGenCXX/destructors.cpp | 42 +- test/CodeGenCXX/dllexport-members.cpp | 38 +- test/CodeGenCXX/dllexport.cpp | 175 +- test/CodeGenCXX/dllimport-rtti.cpp | 4 +- test/CodeGenCXX/dllimport.cpp | 45 +- test/CodeGenCXX/eh.cpp | 22 +- test/CodeGenCXX/empty-classes.cpp | 16 + .../exceptions-seh-filter-captures.cpp | 80 + test/CodeGenCXX/exceptions-seh.cpp | 142 + test/CodeGenCXX/exceptions.cpp | 52 +- test/CodeGenCXX/field-access-debug-info.cpp | 9 +- test/CodeGenCXX/global-array-destruction.cpp | 2 +- test/CodeGenCXX/global-dtor-no-atexit.cpp | 2 +- test/CodeGenCXX/global-init.cpp | 29 +- test/CodeGenCXX/globalinit-loc.cpp | 7 +- test/CodeGenCXX/homogeneous-aggregates.cpp | 2 +- .../CodeGenCXX/implicit-record-visibility.cpp | 12 + test/CodeGenCXX/inheriting-constructor.cpp | 6 +- test/CodeGenCXX/inline-dllexport-member.cpp | 11 + test/CodeGenCXX/key-function-vtable.cpp | 18 +- .../lambda-expressions-nested-linkage.cpp | 17 +- test/CodeGenCXX/lambda-expressions.cpp | 49 +- test/CodeGenCXX/linetable-cleanup.cpp | 23 +- test/CodeGenCXX/linetable-eh.cpp | 12 +- test/CodeGenCXX/linetable-fnbegin.cpp | 8 +- .../CodeGenCXX/linetable-virtual-variadic.cpp | 23 + test/CodeGenCXX/lpad-linetable.cpp | 2 +- test/CodeGenCXX/lvalue-bitcasts.cpp | 90 +- test/CodeGenCXX/m64-ptr.cpp | 2 +- test/CodeGenCXX/mangle-abi-examples.cpp | 2 +- test/CodeGenCXX/mangle-exprs.cpp | 48 + test/CodeGenCXX/mangle-fail.cpp | 26 + test/CodeGenCXX/mangle-lambdas.cpp | 91 +- .../CodeGenCXX/mangle-local-class-vtables.cpp | 28 +- .../mangle-local-classes-nested.cpp | 4 +- test/CodeGenCXX/mangle-ms-abi-examples.cpp | 8 +- test/CodeGenCXX/mangle-ms-arg-qualifiers.cpp | 9 + test/CodeGenCXX/mangle-ms-cxx11.cpp | 12 +- test/CodeGenCXX/mangle-ms-cxx14.cpp | 10 +- .../mangle-ms-return-qualifiers.cpp | 4 + test/CodeGenCXX/mangle-ms.cpp | 9 + test/CodeGenCXX/mangle-subst-std.cpp | 5 +- test/CodeGenCXX/mangle-subst.cpp | 16 + test/CodeGenCXX/mangle-template.cpp | 25 +- test/CodeGenCXX/mangle.cpp | 108 +- test/CodeGenCXX/member-expressions.cpp | 2 +- test/CodeGenCXX/member-function-pointers.cpp | 4 +- test/CodeGenCXX/member-functions.cpp | 7 +- test/CodeGenCXX/member-init-anon-union.cpp | 26 +- test/CodeGenCXX/microsoft-abi-arg-order.cpp | 12 +- .../microsoft-abi-array-cookies.cpp | 8 +- test/CodeGenCXX/microsoft-abi-byval-sret.cpp | 12 +- .../CodeGenCXX/microsoft-abi-byval-thunks.cpp | 20 +- .../CodeGenCXX/microsoft-abi-dynamic-cast.cpp | 66 +- test/CodeGenCXX/microsoft-abi-eh-catch.cpp | 154 + ...ions.cpp => microsoft-abi-eh-cleanups.cpp} | 39 +- .../CodeGenCXX/microsoft-abi-eh-terminate.cpp | 15 + .../microsoft-abi-member-pointers.cpp | 126 +- test/CodeGenCXX/microsoft-abi-methods.cpp | 8 +- ...ft-abi-multiple-nonvirtual-inheritance.cpp | 48 +- test/CodeGenCXX/microsoft-abi-rtti.cpp | 476 +-- .../microsoft-abi-sret-and-byval.cpp | 18 +- .../microsoft-abi-static-initializers.cpp | 40 +- test/CodeGenCXX/microsoft-abi-structors.cpp | 78 +- .../microsoft-abi-thread-safe-statics.cpp | 93 + test/CodeGenCXX/microsoft-abi-throw.cpp | 115 + test/CodeGenCXX/microsoft-abi-thunks.cpp | 30 +- test/CodeGenCXX/microsoft-abi-try-throw.cpp | 34 +- test/CodeGenCXX/microsoft-abi-typeid.cpp | 10 +- test/CodeGenCXX/microsoft-abi-vbtables.cpp | 11 + test/CodeGenCXX/microsoft-abi-vftables.cpp | 24 +- ...soft-abi-virtual-inheritance-vtordisps.cpp | 38 +- .../microsoft-abi-virtual-inheritance.cpp | 136 +- .../microsoft-abi-virtual-member-pointers.cpp | 93 +- .../microsoft-abi-vmemptr-conflicts.cpp | 20 +- .../microsoft-abi-vmemptr-vbase.cpp | 12 + .../microsoft-abi-vtables-ambiguous.cpp | 44 + ...nonvirtual-inheritance-this-adjustment.cpp | 4 +- .../microsoft-abi-vtables-return-thunks.cpp | 73 + ...rosoft-abi-vtables-virtual-inheritance.cpp | 38 + test/CodeGenCXX/microsoft-interface.cpp | 10 +- test/CodeGenCXX/microsoft-no-rtti-data.cpp | 2 +- test/CodeGenCXX/microsoft-uuidof.cpp | 5 +- test/CodeGenCXX/mips-size_t-ptrdiff_t.cpp | 8 +- test/CodeGenCXX/ms-inline-asm-return.cpp | 6 +- ...s-integer-static-data-members-exported.cpp | 4 +- .../ms-integer-static-data-members.cpp | 63 +- test/CodeGenCXX/ms-novtable.cpp | 21 + test/CodeGenCXX/ms_struct.cpp | 33 + test/CodeGenCXX/ms_wide_predefined_expr.cpp | 2 +- test/CodeGenCXX/new-array-init.cpp | 4 +- test/CodeGenCXX/new-overflow.cpp | 6 +- test/CodeGenCXX/new.cpp | 65 +- test/CodeGenCXX/no-opt-volatile-memcpy.cpp | 10 +- test/CodeGenCXX/noexcept.cpp | 2 +- test/CodeGenCXX/nrvo.cpp | 15 +- test/CodeGenCXX/override-layout.cpp | 6 +- test/CodeGenCXX/partial-destruction.cpp | 44 +- test/CodeGenCXX/pod-member-memcpys.cpp | 105 +- test/CodeGenCXX/pointers-to-data-members.cpp | 14 +- test/CodeGenCXX/powerpc-byval.cpp | 12 + test/CodeGenCXX/pr12251.cpp | 32 +- test/CodeGenCXX/pr20897.cpp | 22 +- test/CodeGenCXX/pragma-init_seg.cpp | 20 +- test/CodeGenCXX/predefined-expr.cpp | 140 +- test/CodeGenCXX/reference-cast.cpp | 6 +- test/CodeGenCXX/references.cpp | 12 +- test/CodeGenCXX/rtti-linkage.cpp | 8 +- test/CodeGenCXX/rvalue-references.cpp | 4 +- test/CodeGenCXX/scoped-enums-debug-info.cpp | 11 +- test/CodeGenCXX/sections.cpp | 2 +- test/CodeGenCXX/sizeof-unwind-exception.cpp | 10 +- .../skip-vtable-pointer-initialization.cpp | 16 +- test/CodeGenCXX/split-stacks.cpp | 4 +- .../static-data-member-single-emission.cpp | 31 + test/CodeGenCXX/static-data-member.cpp | 6 +- test/CodeGenCXX/static-init-pnacl.cpp | 2 +- test/CodeGenCXX/static-init.cpp | 21 +- .../static-local-in-local-class.cpp | 20 +- test/CodeGenCXX/switch-case-folding-2.cpp | 2 +- test/CodeGenCXX/template-anonymous-types.cpp | 11 +- test/CodeGenCXX/temporaries.cpp | 44 +- test/CodeGenCXX/throw-expressions.cpp | 4 +- test/CodeGenCXX/thunks.cpp | 22 +- test/CodeGenCXX/uncopyable-args.cpp | 10 +- test/CodeGenCXX/unknown-anytype.cpp | 20 +- test/CodeGenCXX/value-init.cpp | 22 +- test/CodeGenCXX/vararg-non-pod-ms-compat.cpp | 8 +- test/CodeGenCXX/varargs.cpp | 6 +- test/CodeGenCXX/vector-splat-conversion.cpp | 19 + test/CodeGenCXX/virtual-base-cast.cpp | 44 +- .../virtual-base-destructor-call.cpp | 10 +- test/CodeGenCXX/visibility.cpp | 23 +- test/CodeGenCXX/vla-lambda-capturing.cpp | 126 +- test/CodeGenCXX/vla.cpp | 20 +- test/CodeGenCXX/volatile-1.cpp | 68 +- test/CodeGenCXX/volatile.cpp | 6 +- .../vtable-holder-self-reference.cpp | 3 +- test/CodeGenCXX/vtable-linkage.cpp | 44 +- .../vtable-pointer-initialization.cpp | 17 +- test/CodeGenCXX/vtt-layout.cpp | 8 +- .../CodeGenCXX/windows-itanium-exceptions.cpp | 2 +- test/CodeGenCXX/x86_64-arguments-avx.cpp | 15 + test/CodeGenObjC/2010-02-01-utf16-with-null.m | 2 +- test/CodeGenObjC/2010-02-09-DbgSelf.m | 2 +- test/CodeGenObjC/2010-02-15-Dbg-MethodStart.m | 2 +- test/CodeGenObjC/arc-blocks.m | 226 +- test/CodeGenObjC/arc-bridged-cast.m | 11 +- test/CodeGenObjC/arc-foreach.m | 42 +- test/CodeGenObjC/arc-ivar-layout.m | 8 +- test/CodeGenObjC/arc-linetable-autorelease.m | 4 +- test/CodeGenObjC/arc-linetable.m | 44 +- test/CodeGenObjC/arc-literals.m | 50 +- .../arc-loadweakretained-release.m | 8 +- test/CodeGenObjC/arc-no-arc-exceptions.m | 2 +- test/CodeGenObjC/arc-precise-lifetime.m | 84 +- test/CodeGenObjC/arc-property.m | 40 +- test/CodeGenObjC/arc-related-result-type.m | 2 +- test/CodeGenObjC/arc-ternary-op.m | 40 +- test/CodeGenObjC/arc-unopt.m | 6 +- test/CodeGenObjC/arc-unoptimized-byref-var.m | 6 +- test/CodeGenObjC/arc-weak-property.m | 20 +- test/CodeGenObjC/arc.m | 435 +-- test/CodeGenObjC/arm64-int32-ivar.m | 2 +- test/CodeGenObjC/atomic-aggregate-property.m | 2 +- test/CodeGenObjC/attr-exception.m | 8 +- test/CodeGenObjC/autorelease.m | 4 +- test/CodeGenObjC/bitfield-access.m | 4 +- test/CodeGenObjC/block-6.m | 8 +- test/CodeGenObjC/block-byref-debuginfo.m | 5 +- test/CodeGenObjC/blocks-2.m | 2 +- test/CodeGenObjC/blocks.m | 42 +- test/CodeGenObjC/boxing.m | 34 +- test/CodeGenObjC/catch-lexical-block.m | 8 +- test/CodeGenObjC/category-super-class-meth.m | 6 +- .../compound-literal-property-access.m | 21 + .../debug-info-block-captured-self.m | 12 +- test/CodeGenObjC/debug-info-block-helper.m | 2 +- test/CodeGenObjC/debug-info-block-type.m | 17 +- test/CodeGenObjC/debug-info-blocks.m | 14 +- test/CodeGenObjC/debug-info-fwddecl.m | 7 +- test/CodeGenObjC/debug-info-getter-name.m | 2 +- .../CodeGenObjC/debug-info-id-with-protocol.m | 11 +- test/CodeGenObjC/debug-info-impl.m | 3 +- test/CodeGenObjC/debug-info-instancetype.m | 13 +- test/CodeGenObjC/debug-info-ivars-extension.m | 22 +- test/CodeGenObjC/debug-info-ivars-indirect.m | 8 +- test/CodeGenObjC/debug-info-ivars-private.m | 15 +- test/CodeGenObjC/debug-info-ivars.m | 28 +- test/CodeGenObjC/debug-info-lifetime-crash.m | 8 +- .../debug-info-property-accessors.m | 3 +- test/CodeGenObjC/debug-info-property3.m | 4 +- test/CodeGenObjC/debug-info-pubtypes.m | 4 +- test/CodeGenObjC/debug-info-self.m | 16 +- test/CodeGenObjC/debug-info-static-var.m | 4 +- test/CodeGenObjC/debug-info-synthesis.m | 7 +- test/CodeGenObjC/debug-info-variadic-method.m | 4 +- test/CodeGenObjC/debug-property-synth.m | 8 +- test/CodeGenObjC/debuginfo-properties.m | 17 +- test/CodeGenObjC/encode-test-5.m | 17 +- test/CodeGenObjC/encode-test-6.m | 2 +- test/CodeGenObjC/encode-test.m | 2 +- test/CodeGenObjC/exceptions.m | 7 +- .../forward-protocol-metadata-symbols.m | 2 +- test/CodeGenObjC/gc.m | 2 +- test/CodeGenObjC/gnu-exceptions.m | 2 +- test/CodeGenObjC/id-isa-codegen.m | 4 +- .../CodeGenObjC/ivar-base-as-invariant-load.m | 6 +- test/CodeGenObjC/ivar-invariant.m | 8 +- test/CodeGenObjC/ivar-layout-array0-struct.m | 2 +- test/CodeGenObjC/ivar-layout-no-optimize.m | 2 +- test/CodeGenObjC/local-static-block.m | 2 +- test/CodeGenObjC/mangle-blocks.m | 4 +- test/CodeGenObjC/messages-2.m | 4 +- test/CodeGenObjC/metadata-symbols-64.m | 2 +- test/CodeGenObjC/no-sanitize.m | 8 + test/CodeGenObjC/ns-constant-strings.m | 4 +- test/CodeGenObjC/ns_consume_null_check.m | 22 +- test/CodeGenObjC/objc-asm-attribute-test.m | 2 +- .../objc-container-subscripting-1.m | 16 +- test/CodeGenObjC/objc-fixed-enum.m | 40 +- test/CodeGenObjC/objc2-protocol-metadata.m | 17 + test/CodeGenObjC/objfw.m | 2 +- test/CodeGenObjC/optimize-ivar-offset-load.m | 14 +- test/CodeGenObjC/property-array-type.m | 6 +- test/CodeGenObjC/property-type-mismatch.m | 2 +- test/CodeGenObjC/property.m | 28 +- test/CodeGenObjC/selector-ref-invariance.m | 2 +- test/CodeGenObjC/stret_lookup.m | 4 +- test/CodeGenObjC/super-message-fragileabi.m | 2 +- test/CodeGenObjC/synchronized.m | 4 +- test/CodeGenObjC/tentative-cfconstantstring.m | 8 +- test/CodeGenObjC/variadic-sends.m | 8 +- test/CodeGenObjCXX/arc-blocks.mm | 18 +- test/CodeGenObjCXX/arc-cxx11-member-init.mm | 6 +- test/CodeGenObjCXX/arc-exceptions.mm | 12 +- test/CodeGenObjCXX/arc-globals.mm | 2 +- test/CodeGenObjCXX/arc-move.mm | 28 +- test/CodeGenObjCXX/arc-new-delete.mm | 14 +- test/CodeGenObjCXX/arc-pseudo-destructors.mm | 8 +- test/CodeGenObjCXX/arc-references.mm | 10 +- .../arc-special-member-functions.mm | 84 +- test/CodeGenObjCXX/arc.mm | 51 +- test/CodeGenObjCXX/debug-info-cyclic.mm | 29 + test/CodeGenObjCXX/debug-info-line.mm | 4 +- test/CodeGenObjCXX/destroy.mm | 4 +- test/CodeGenObjCXX/exceptions-legacy.mm | 12 +- test/CodeGenObjCXX/gc.mm | 6 +- test/CodeGenObjCXX/lambda-expressions.mm | 11 +- test/CodeGenObjCXX/literals.mm | 18 +- test/CodeGenObjCXX/lvalue-reference-getter.mm | 4 +- test/CodeGenObjCXX/mangle-blocks.mm | 2 +- test/CodeGenObjCXX/message-reference.mm | 4 +- test/CodeGenObjCXX/message.mm | 2 +- test/CodeGenObjCXX/nested-ehlocation.mm | 24 + test/CodeGenObjCXX/property-lvalue-capture.mm | 8 +- .../property-object-conditional-exp.mm | 4 +- .../property-object-reference-1.mm | 2 +- .../property-object-reference-2.mm | 8 +- .../property-object-reference.mm | 4 +- test/CodeGenObjCXX/property-reference.mm | 12 +- .../address-space-constant-initializers.cl | 2 +- test/CodeGenOpenCL/cl-strict-aliasing.cl | 1 + test/CodeGenOpenCL/const-str-array-decay.cl | 2 +- test/CodeGenOpenCL/half.cl | 8 + test/CodeGenOpenCL/memcpy.cl | 8 + test/CodeGenOpenCL/opencl_types.cl | 2 +- test/CodeGenOpenCL/relaxed-fpmath.cl | 2 - test/CodeGenOpenCL/shifts.cl | 66 +- test/CodeGenOpenCL/spir-calling-conv.cl | 18 + test/CoverageMapping/Inputs/code.h | 2 + test/CoverageMapping/Inputs/ends_a_scope | 5 + test/CoverageMapping/Inputs/md.def | 5 + test/CoverageMapping/Inputs/starts_a_scope | 4 + .../block-storage-starts-region.m | 12 + test/CoverageMapping/break.c | 34 +- test/CoverageMapping/builtinmacro.c | 2 +- test/CoverageMapping/casts.c | 6 +- test/CoverageMapping/classtemplate.cpp | 10 +- test/CoverageMapping/comment-in-macro.c | 11 + test/CoverageMapping/continue.c | 30 +- test/CoverageMapping/header.cpp | 19 +- test/CoverageMapping/if.c | 24 +- test/CoverageMapping/includehell.cpp | 83 +- test/CoverageMapping/ir.c | 2 +- test/CoverageMapping/label.cpp | 72 +- test/CoverageMapping/lambda.cpp | 17 + test/CoverageMapping/logical.cpp | 10 +- test/CoverageMapping/loopmacro.c | 57 +- test/CoverageMapping/loops.cpp | 45 +- test/CoverageMapping/macro-expansion.c | 58 + test/CoverageMapping/macro-expressions.cpp | 90 + test/CoverageMapping/macroception.c | 58 +- test/CoverageMapping/macroparams.c | 15 +- test/CoverageMapping/macroparams2.c | 21 +- test/CoverageMapping/macros.c | 45 +- test/CoverageMapping/macroscopes.cpp | 105 + test/CoverageMapping/md.cpp | 33 + test/CoverageMapping/moremacros.c | 40 + test/CoverageMapping/nestedclass.cpp | 6 +- test/CoverageMapping/objc.m | 15 +- test/CoverageMapping/preprocessor.c | 13 +- test/CoverageMapping/return.c | 43 +- test/CoverageMapping/switch.c | 71 +- test/CoverageMapping/switchmacro.c | 28 + test/CoverageMapping/system_macro.c | 24 + test/CoverageMapping/test.c | 19 +- test/CoverageMapping/trycatch.cpp | 25 +- test/CoverageMapping/unreachable-macro.c | 15 + test/CoverageMapping/unused_names.c | 28 + test/CoverageMapping/while.c | 12 + .../linux/libclang_rt.msan_cxx-x86_64.a.syms} | 0 .../linux/libclang_rt.tsan_cxx-x86_64.a.syms} | 0 test/Driver/aarch64-cpus.c | 47 + test/Driver/arm-cortex-cpus.c | 101 +- test/Driver/arm-mfpu.c | 15 +- test/Driver/biarch.c | 2 +- test/Driver/cl-eh.cpp | 5 + test/Driver/cl-inputs.c | 5 + test/Driver/cl-options.c | 84 +- test/Driver/cl-zc.cpp | 6 + test/Driver/clang-exception-flags.cpp | 7 +- test/Driver/clang_f_opts.c | 19 +- test/Driver/cloudabi.c | 3 + test/Driver/cloudabi.cpp | 3 + test/Driver/coverage-ld.c | 9 + test/Driver/crash-report-modules.m | 7 +- test/Driver/crash-report.c | 4 +- test/Driver/cuda-simple.cu | 23 + test/Driver/darwin-debug-flags.c | 10 +- test/Driver/darwin-ld.c | 6 + test/Driver/darwin-sanitizer-ld.c | 10 +- test/Driver/darwin-version.c | 75 +- test/Driver/debug-comp-dir.S | 6 - test/Driver/debug.c | 6 - test/Driver/fast-math.c | 30 + test/Driver/frame-pointer-elim.c | 5 + test/Driver/fsanitize-blacklist.c | 27 +- test/Driver/fsanitize-coverage.c | 70 + test/Driver/fsanitize.c | 79 +- test/Driver/function-sections.c | 12 + test/Driver/fveclib.c | 17 + test/Driver/gfortran.f90 | 16 + test/Driver/gold-lto.c | 1 - test/Driver/hexagon-toolchain-elf.c | 7 - test/Driver/hexagon-toolchain.c | 9 +- test/Driver/{ms-inline-asm.c => inline-asm.c} | 9 + test/Driver/instrprof-ld.c | 33 + test/Driver/linux-as.c | 53 + test/Driver/linux-header-search.cpp | 36 +- test/Driver/linux-ld.c | 71 +- test/Driver/lit.local.cfg | 3 +- test/Driver/mg.c | 6 +- test/Driver/mglobal-merge.c | 40 + test/Driver/mips-as.c | 20 + test/Driver/mips-features.c | 4 +- test/Driver/mips-fsf.cpp | 110 + test/Driver/mips-integrated-as.s | 16 +- test/Driver/mno-global-merge.c | 20 - test/Driver/modules-cache-path.m | 5 + test/Driver/msc-version.c | 6 +- test/Driver/msvc-link.c | 12 + test/Driver/nacl-direct.c | 111 + test/Driver/nostdincxx.cpp | 1 + test/Driver/objc++-cpp-output.mm | 4 +- test/Driver/objc-sdk-migration-options.m | 9 + test/Driver/output-file-cleanup.c | 1 - test/Driver/pch-deps.c | 11 + test/Driver/pic.c | 4 + test/Driver/ppc-abi.c | 9 + test/Driver/ppc-features.cpp | 12 + test/Driver/preserve-uselistorder.c | 9 + test/Driver/ps4-cpu-defaults.cpp | 6 + test/Driver/rewrite-map-in-diagnostics.c | 2 + test/Driver/rtti-options.cpp | 62 + test/Driver/sanitizer-ld.c | 80 +- test/Driver/save-temps.c | 55 +- test/Driver/systemz-features.cpp | 26 + test/Driver/target-abi-cc1as.s | 6 + test/Driver/warning-options_pedantic.cpp | 14 +- test/Driver/x86_features.c | 2 +- test/Driver/xcore-opts.c | 4 +- test/FixIt/fixit-cxx0x.cpp | 19 + test/FixIt/fixit-eof-space.c | 9 + test/FixIt/fixit-objc-bridge-related.m | 10 +- test/FixIt/fixit-recursive-block.c | 2 +- test/FixIt/fixit.cpp | 10 +- test/Format/cursor.cpp | 2 +- test/Format/incomplete.cpp | 8 + test/Frontend/darwin-version.c | 34 +- test/Frontend/dependency-gen-escaping.c | 30 +- test/Frontend/dependency-gen.c | 1 - test/Frontend/dependency-generation-crash.c | 7 +- test/Frontend/gnu-inline.c | 15 + test/Frontend/plugin-delayed-template.cpp | 17 + test/Frontend/print-header-includes.c | 2 - test/Frontend/rewrite-includes-line-markers.c | 22 + test/Frontend/x86_64-nacl-types.cpp | 6 +- test/Headers/Inputs/include/stdlib.h | 2 + test/Headers/altivec-header.c | 14 +- test/Headers/altivec-intrin.c | 4 +- test/Headers/arm64-apple-ios-types.cpp | 83 + test/Headers/thumbv7-apple-ios-types.cpp | 83 + test/Headers/x86_64-apple-macosx-types.cpp | 83 + test/Headers/xmmintrin.c | 12 + test/Index/annotate-tokens.c | 17 +- test/Index/code-completion.cpp | 6 +- test/Index/complete-call.cpp | 805 ++++++ test/Index/complete-constructor-params.cpp | 140 + test/Index/complete-functor-call.cpp | 191 ++ test/Index/complete-macros.c | 2 +- test/Index/complete-optional-params.cpp | 75 + ...ete-pointer-and-reference-to-functions.cpp | 62 + .../complete-template-friends-defined.cpp | 33 + test/Index/complete-type-factors.m | 16 +- test/Index/get-cursor.c | 13 + test/Index/index-module.m | 15 +- test/Index/index-pch-with-module.m | 2 +- test/Index/load-stmts.cpp | 2 +- test/Index/print-type-size.cpp | 5 +- test/Index/print-type.cpp | 7 +- .../Layout/ms-x86-alias-avoidance-padding.cpp | 4 +- test/Layout/ms-x86-aligned-tail-padding.cpp | 4 +- test/Layout/ms-x86-basic-layout.cpp | 4 +- test/Layout/ms-x86-empty-layout.c | 4 +- test/Layout/ms-x86-empty-nonvirtual-bases.cpp | 4 +- test/Layout/ms-x86-empty-virtual-base.cpp | 4 +- .../ms-x86-lazy-empty-nonvirtual-base.cpp | 4 +- test/Layout/ms-x86-pack-and-align.cpp | 4 +- test/Layout/ms-x86-size-alignment-fail.cpp | 4 +- test/Layout/ms-x86-vfvb-alignment.cpp | 4 +- test/Layout/ms-x86-vfvb-sharing.cpp | 4 +- test/Lexer/cxx-features.cpp | 7 +- test/Lexer/eof-include.c | 8 + test/Lexer/eof-number.c | 9 + test/Lexer/has_extension_cxx.cpp | 5 + test/Lexer/has_feature_cxx0x.cpp | 128 +- test/Lexer/pragma-operators.cpp | 2 +- test/Misc/ast-dump-attr.cpp | 2 +- test/Misc/ast-dump-decl.cpp | 13 +- test/Misc/ast-dump-stmt.cpp | 27 + .../backend-optimization-failure-nodbg.cpp | 21 + test/Misc/backend-optimization-failure.cpp | 4 +- test/Misc/diag-template-diffing.cpp | 2 +- test/Misc/warning-flags.c | 5 +- .../DependsOnModule.framework/module.map | 6 + .../Inputs/Module.framework/Headers/Module.h | 9 + .../Both_F.framework/Headers/a.h | 1 + test/Modules/Inputs/PR21687/a.h | 1 + test/Modules/Inputs/PR21687/b.h | 2 + test/Modules/Inputs/PR21687/c.h | 4 + test/Modules/Inputs/PR21687/module.modulemap | 3 + test/Modules/Inputs/anon-namespace/a.h | 1 + test/Modules/Inputs/anon-namespace/b1.h | 2 + test/Modules/Inputs/anon-namespace/b2.h | 2 + test/Modules/Inputs/anon-namespace/c.h | 1 + .../Inputs/anon-namespace/module.modulemap | 3 + test/Modules/Inputs/cxx-decls-imported.h | 3 + test/Modules/Inputs/cxx-decls-merged.h | 3 + test/Modules/Inputs/cxx-dtor/a.h | 1 + test/Modules/Inputs/cxx-dtor/b.h | 3 + test/Modules/Inputs/cxx-dtor/module.modulemap | 2 + .../Inputs/cxx-lookup/module.modulemap | 2 + test/Modules/Inputs/cxx-lookup/na.h | 1 + test/Modules/Inputs/cxx-lookup/nb.h | 1 + test/Modules/Inputs/declare-use/module.map | 11 +- test/Modules/Inputs/declare-use/sub.h | 4 + test/Modules/Inputs/deferred-lookup/a.h | 1 + test/Modules/Inputs/deferred-lookup/b.h | 6 + .../Inputs/deferred-lookup/module.modulemap | 2 + test/Modules/Inputs/diagnostics-aux.modulemap | 1 + test/Modules/Inputs/empty.h | 0 test/Modules/Inputs/empty/empty.h | 1 + test/Modules/Inputs/explicit-build/d.h | 0 .../Inputs/explicit-build/module.modulemap | 1 + .../Inputs/header-in-multiple-maps/a.h | 1 + .../Inputs/header-in-multiple-maps/map1 | 3 + .../Inputs/header-in-multiple-maps/map2 | 3 + .../Inputs/header-in-multiple-maps/map3 | 3 + .../direct.h} | 0 .../Inputs/initializer_list/direct.modulemap | 1 + .../Inputs/initializer_list/indirect.h | 1 + .../initializer_list/indirect.modulemap | 1 + .../Modules/Inputs/invalidate-identifiers/a.h | 17 + .../Modules/Inputs/invalidate-identifiers/b.h | 2 + .../invalidate-identifiers/module.modulemap} | 0 .../Inputs/macro-ambiguity/a/quote/a_quote.h | 8 + .../macro-ambiguity/a/system/a_system.h | 15 + .../Inputs/macro-ambiguity/b/quote/b_quote.h | 8 + .../macro-ambiguity/b/system/b_system.h | 15 + .../Inputs/macro-ambiguity/c/quote/c_quote.h | 7 + .../macro-ambiguity/c/system/c_system.h | 14 + .../Inputs/macro-ambiguity/d/quote/d_quote.h | 7 + .../macro-ambiguity/d/system/d_system.h | 14 + .../Inputs/macro-ambiguity/e/quote/e_quote.h | 7 + .../macro-ambiguity/e/system/e_system.h | 7 + .../Inputs/macro-ambiguity/module.modulemap | 25 + test/Modules/Inputs/macro-masking/a.h | 2 + test/Modules/Inputs/macro-masking/b.h | 1 + .../Inputs/macro-masking/module.modulemap | 4 + test/Modules/{ => Inputs}/macro-reexport/a1.h | 0 test/Modules/Inputs/macro-reexport/a2.h | 0 test/Modules/Inputs/macro-reexport/b1.h | 0 test/Modules/{ => Inputs}/macro-reexport/b2.h | 0 test/Modules/{ => Inputs}/macro-reexport/c1.h | 0 test/Modules/{ => Inputs}/macro-reexport/d1.h | 0 test/Modules/{ => Inputs}/macro-reexport/d2.h | 0 test/Modules/{ => Inputs}/macro-reexport/e1.h | 0 test/Modules/{ => Inputs}/macro-reexport/e2.h | 0 test/Modules/{ => Inputs}/macro-reexport/f1.h | 0 .../macro-reexport/module.modulemap | 0 test/Modules/Inputs/macros-indirect.h | 1 + test/Modules/Inputs/macros.h | 1 + .../Modules/Inputs/merge-anon-in-template/a.h | 4 + .../Modules/Inputs/merge-anon-in-template/b.h | 2 + .../Modules/Inputs/merge-anon-in-template/c.h | 6 + .../merge-anon-in-template/module.modulemap | 3 + test/Modules/Inputs/merge-decl-context/a.h | 24 + test/Modules/Inputs/merge-decl-context/b.h | 6 + test/Modules/Inputs/merge-decl-context/c.h | 7 + test/Modules/Inputs/merge-decl-context/d.h | 7 + .../merge-decl-context.modulemap | 18 + test/Modules/Inputs/merge-decl-order/a.h | 2 + test/Modules/Inputs/merge-decl-order/b.h | 2 + .../Inputs/merge-decl-order/module.modulemap | 2 + .../Inputs/merge-dependent-friends/a.h | 2 + .../Inputs/merge-dependent-friends/b.h | 2 + .../Inputs/merge-dependent-friends/c.h | 6 + .../Inputs/merge-dependent-friends/d.h | 2 + .../merge-dependent-friends/module.modulemap | 4 + test/Modules/Inputs/merge-friends/decl.h | 1 + test/Modules/Inputs/merge-friends/friend.h | 2 + .../Inputs/merge-friends/module.modulemap | 2 + .../Inputs/merge-implicit-special-members/a.h | 1 + .../Inputs/merge-implicit-special-members/b.h | 1 + .../Inputs/merge-implicit-special-members/c.h | 3 + .../module.modulemap | 3 + .../Modules/Inputs/merge-name-for-linkage/a.h | 1 + .../Modules/Inputs/merge-name-for-linkage/b.h | 1 + .../merge-name-for-linkage/module.modulemap | 2 + .../Modules/Inputs/merge-nested-templates/a.h | 1 + .../Modules/Inputs/merge-nested-templates/b.h | 2 + .../Modules/Inputs/merge-nested-templates/c.h | 3 + .../merge-nested-templates/module.modulemap | 3 + .../Inputs/merge-nested-templates/string.ii | 14 + .../Inputs/merge-target-features/foo.h | 8 + .../merge-target-features/module.modulemap | 1 + .../Inputs/merge-template-friend/def.h | 3 + .../Inputs/merge-template-friend/friend.h | 4 + .../merge-template-friend/module.modulemap | 3 + .../Inputs/merge-template-members/a1.h | 9 + .../Inputs/merge-template-members/a2.h | 9 + .../Inputs/merge-template-members/b1.h | 6 + .../Inputs/merge-template-members/b2.h | 6 + .../Modules/Inputs/merge-template-members/c.h | 14 + .../Inputs/merge-template-members/def.h | 2 + .../Inputs/merge-template-members/merge.h | 2 + .../merge-template-members/module.modulemap | 9 + .../Inputs/merge-template-members/update.h | 2 + test/Modules/Inputs/merge-vtable-codegen/a.h | 8 + test/Modules/Inputs/merge-vtable-codegen/b.h | 17 + test/Modules/Inputs/merge-vtable-codegen/c.h | 6 + .../merge-vtable-codegen.modulemap | 11 + test/Modules/Inputs/module.map | 4 - test/Modules/Inputs/no-implicit-builds/b.h | 6 + .../Inputs/no-implicit-builds/b.modulemap | 3 + test/Modules/Inputs/preprocess/file.h | 3 + test/Modules/Inputs/preprocess/fwd.h | 1 + .../Inputs/preprocess/module.modulemap | 2 + .../Inputs/redecl-add-after-load-decls.h | 6 +- .../Inputs/redecl-found-building-chains/a.h | 1 + .../Inputs/redecl-found-building-chains/b.h | 2 + .../Inputs/redecl-found-building-chains/c.h | 1 + .../Inputs/redecl-found-building-chains/d.h | 6 + .../module.modulemap | 4 + test/Modules/Inputs/redecl-templates/a.h | 8 + .../Inputs/redecl-templates/module.modulemap | 1 + test/Modules/{ => Inputs}/redecls/a.h | 0 test/Modules/{ => Inputs}/redecls/b.h | 0 test/Modules/Inputs/redecls/module.map | 2 + .../af.framework/Headers/a1.h | 0 .../af.framework/Headers/a2.h | 0 .../af.framework/module.map | 0 .../self-import-header/depend_builtin/h1.h | 0 .../depend_builtin/module.map | 0 test/Modules/Inputs/stress1/common.h | 74 + test/Modules/Inputs/stress1/m00.h | 6 + test/Modules/Inputs/stress1/m01.h | 10 + test/Modules/Inputs/stress1/m02.h | 6 + test/Modules/Inputs/stress1/m03.h | 6 + test/Modules/Inputs/stress1/merge00.h | 30 + test/Modules/Inputs/stress1/module.modulemap | 6 + test/Modules/Inputs/submodule-visibility/a.h | 1 + test/Modules/Inputs/submodule-visibility/b.h | 1 + .../Inputs/submodule-visibility/cycle1.h | 8 + .../Inputs/submodule-visibility/cycle2.h | 8 + .../submodule-visibility/module.modulemap | 6 + .../Inputs/submodules-merge-defs/defs.h | 48 + .../Inputs/submodules-merge-defs/empty.h | 0 .../import-and-redefine.h | 5 + .../submodules-merge-defs/merged-defs.h | 1 + .../submodules-merge-defs/module.modulemap | 16 + .../Inputs/submodules-merge-defs/use-defs.h | 1 + test/Modules/Inputs/update-exception-spec/a.h | 2 + test/Modules/Inputs/update-exception-spec/b.h | 3 + test/Modules/Inputs/update-exception-spec/c.h | 3 + .../update-exception-spec/module.modulemap | 3 + test/Modules/anon-namespace.cpp | 6 + test/Modules/autolink.m | 4 +- test/Modules/crashes.m | 16 + test/Modules/cstd.m | 2 +- test/Modules/cxx-decls.cpp | 2 + test/Modules/cxx-dtor.cpp | 3 + test/Modules/cxx-irgen.cpp | 22 +- test/Modules/cxx-lookup.cpp | 5 + test/Modules/cxx-templates.cpp | 19 +- test/Modules/declare-use-compatible.cpp | 36 + test/Modules/declare-use1.cpp | 3 +- test/Modules/declare-use5.cpp | 9 + test/Modules/deferred-lookup.cpp | 6 + ...modulemap.cpp => dependency-gen.modulemap} | 8 +- test/Modules/diagnostics.modulemap | 14 + test/Modules/empty.modulemap | 15 + test/Modules/explicit-build-relpath.cpp | 2 - test/Modules/explicit-build.cpp | 30 +- test/Modules/exponential-paths.cpp | 209 ++ test/Modules/filename.cpp | 1 - test/Modules/header-in-multiple-maps.cpp | 9 + test/Modules/ignored_macros.m | 2 +- test/Modules/implementation-of-module.m | 2 +- test/Modules/include-relative.c | 1 - test/Modules/initializer_list.cpp | 18 +- test/Modules/invalidate-identifiers.c | 4 + test/Modules/linkage-merge.cpp | 6 +- test/Modules/macro-ambiguity.cpp | 136 + test/Modules/macro-masking.cpp | 16 + test/Modules/macro-reexport.cpp | 39 + .../Modules/macro-reexport/macro-reexport.cpp | 30 - test/Modules/macros.c | 30 +- test/Modules/macros2.c | 17 +- test/Modules/malformed.cpp | 4 +- test/Modules/merge-anon-in-template.cpp | 6 + test/Modules/merge-decl-context.cpp | 28 + test/Modules/merge-decl-order.cpp | 9 + test/Modules/merge-dependent-friends.cpp | 4 + test/Modules/merge-friends.cpp | 5 + .../merge-implicit-special-members.cpp | 5 + test/Modules/merge-name-for-linkage.cpp | 8 + test/Modules/merge-nested-templates.cpp | 4 + test/Modules/merge-target-features.cpp | 66 + test/Modules/merge-template-friend.cpp | 22 + test/Modules/merge-template-members.cpp | 27 + test/Modules/merge-vtable-codegen.cpp | 24 + test/Modules/modular_maps.cpp | 3 - test/Modules/modulemap-locations.m | 2 +- test/Modules/no-implicit-builds.cpp | 33 + test/Modules/odr.cpp | 8 +- test/Modules/pr21687.cpp | 3 + test/Modules/preprocess.m | 12 +- test/Modules/private.cpp | 1 + test/Modules/public-private.modulemap | 11 + test/Modules/redecl-add-after-load.cpp | 17 +- test/Modules/redecl-found-building-chains.cpp | 6 + test/Modules/redecl-templates.cpp | 32 + test/Modules/{redecls/main.m => redecls.m} | 8 +- test/Modules/relative-dep-gen.cpp | 14 +- test/Modules/requires.m | 4 +- test/Modules/self-import-header.m | 9 + test/Modules/self-import-header/test.m | 8 - test/Modules/stress1.cpp | 114 + test/Modules/submodule-visibility-cycles.cpp | 10 + test/Modules/submodule-visibility.cpp | 22 + test/Modules/submodules-merge-defs.cpp | 56 + test/Modules/templates-2.mm | 12 +- test/Modules/templates.mm | 8 +- test/Modules/update-exception-spec.cpp | 6 + test/Modules/warn-unused-local-typedef.cpp | 1 + test/OpenMP/atomic_ast_print.cpp | 6 +- test/OpenMP/atomic_capture_codegen.cpp | 1018 +++++++ test/OpenMP/atomic_codegen.cpp | 114 + test/OpenMP/atomic_messages.c | 271 +- test/OpenMP/atomic_messages.cpp | 517 +++- test/OpenMP/atomic_read_codegen.c | 333 +++ test/OpenMP/atomic_update_codegen.cpp | 941 ++++++ test/OpenMP/atomic_write_codegen.c | 509 ++++ test/OpenMP/barrier_ast_print.cpp | 6 +- test/OpenMP/barrier_codegen.cpp | 10 +- test/OpenMP/barrier_messages.cpp | 2 +- test/OpenMP/critical_ast_print.cpp | 6 +- test/OpenMP/critical_codegen.cpp | 30 +- test/OpenMP/critical_messages.cpp | 2 +- test/OpenMP/flush_ast_print.cpp | 6 +- test/OpenMP/flush_codegen.cpp | 14 +- test/OpenMP/flush_messages.cpp | 2 +- test/OpenMP/for_ast_print.cpp | 6 +- test/OpenMP/for_codegen.cpp | 359 ++- test/OpenMP/for_collapse_messages.cpp | 2 +- test/OpenMP/for_firstprivate_codegen.cpp | 280 ++ test/OpenMP/for_firstprivate_messages.cpp | 29 +- test/OpenMP/for_lastprivate_codegen.cpp | 468 +++ test/OpenMP/for_lastprivate_messages.cpp | 53 +- test/OpenMP/for_loop_messages.cpp | 24 +- test/OpenMP/for_misc_messages.c | 2 +- test/OpenMP/for_private_codegen.cpp | 188 ++ test/OpenMP/for_private_messages.cpp | 20 +- test/OpenMP/for_reduction_codegen.cpp | 702 +++++ test/OpenMP/for_reduction_messages.cpp | 62 +- test/OpenMP/for_schedule_messages.cpp | 2 +- test/OpenMP/for_simd_aligned_messages.cpp | 2 +- test/OpenMP/for_simd_ast_print.cpp | 6 +- test/OpenMP/for_simd_collapse_messages.cpp | 2 +- .../OpenMP/for_simd_firstprivate_messages.cpp | 14 +- test/OpenMP/for_simd_lastprivate_messages.cpp | 44 +- test/OpenMP/for_simd_linear_messages.cpp | 12 +- test/OpenMP/for_simd_loop_messages.cpp | 7 +- test/OpenMP/for_simd_misc_messages.c | 2 +- test/OpenMP/for_simd_private_messages.cpp | 12 +- test/OpenMP/for_simd_reduction_messages.cpp | 60 +- test/OpenMP/for_simd_safelen_messages.cpp | 2 +- test/OpenMP/for_simd_schedule_messages.cpp | 2 +- test/OpenMP/linking.c | 38 +- test/OpenMP/master_ast_print.cpp | 6 +- test/OpenMP/master_codegen.cpp | 31 +- test/OpenMP/master_messages.cpp | 2 +- test/OpenMP/nesting_of_regions.cpp | 128 +- test/OpenMP/openmp_common.c | 2 +- test/OpenMP/ordered_ast_print.cpp | 6 +- test/OpenMP/ordered_codegen.cpp | 217 ++ test/OpenMP/ordered_messages.cpp | 2 +- test/OpenMP/parallel_ast_print.cpp | 6 +- test/OpenMP/parallel_codegen.cpp | 99 +- test/OpenMP/parallel_copyin_codegen.cpp | 296 ++ test/OpenMP/parallel_copyin_messages.cpp | 26 +- test/OpenMP/parallel_default_messages.cpp | 2 +- test/OpenMP/parallel_firstprivate_codegen.cpp | 166 +- .../OpenMP/parallel_firstprivate_messages.cpp | 12 +- test/OpenMP/parallel_for_ast_print.cpp | 6 +- test/OpenMP/parallel_for_codegen.cpp | 400 +++ .../OpenMP/parallel_for_collapse_messages.cpp | 2 +- test/OpenMP/parallel_for_copyin_messages.cpp | 28 +- test/OpenMP/parallel_for_default_messages.cpp | 2 +- .../parallel_for_firstprivate_messages.cpp | 12 +- test/OpenMP/parallel_for_if_messages.cpp | 2 +- .../parallel_for_lastprivate_messages.cpp | 48 +- test/OpenMP/parallel_for_loop_messages.cpp | 7 +- test/OpenMP/parallel_for_messages.cpp | 2 +- test/OpenMP/parallel_for_misc_messages.c | 2 +- .../parallel_for_num_threads_messages.cpp | 2 +- test/OpenMP/parallel_for_private_messages.cpp | 12 +- .../parallel_for_proc_bind_messages.cpp | 2 +- .../parallel_for_reduction_messages.cpp | 66 +- .../OpenMP/parallel_for_schedule_messages.cpp | 2 +- .../parallel_for_simd_aligned_messages.cpp | 2 +- test/OpenMP/parallel_for_simd_ast_print.cpp | 6 +- .../parallel_for_simd_collapse_messages.cpp | 2 +- .../parallel_for_simd_copyin_messages.cpp | 28 +- .../parallel_for_simd_default_messages.cpp | 2 +- ...arallel_for_simd_firstprivate_messages.cpp | 12 +- test/OpenMP/parallel_for_simd_if_messages.cpp | 2 +- ...parallel_for_simd_lastprivate_messages.cpp | 47 +- .../parallel_for_simd_linear_messages.cpp | 12 +- .../parallel_for_simd_loop_messages.cpp | 7 +- test/OpenMP/parallel_for_simd_messages.cpp | 2 +- test/OpenMP/parallel_for_simd_misc_messages.c | 2 +- ...parallel_for_simd_num_threads_messages.cpp | 2 +- .../parallel_for_simd_private_messages.cpp | 12 +- .../parallel_for_simd_proc_bind_messages.cpp | 2 +- .../parallel_for_simd_reduction_messages.cpp | 66 +- .../parallel_for_simd_safelen_messages.cpp | 2 +- .../parallel_for_simd_schedule_messages.cpp | 2 +- test/OpenMP/parallel_if_codegen.cpp | 14 +- test/OpenMP/parallel_if_messages.cpp | 2 +- test/OpenMP/parallel_messages.cpp | 2 +- test/OpenMP/parallel_num_threads_codegen.cpp | 22 +- test/OpenMP/parallel_num_threads_messages.cpp | 6 +- test/OpenMP/parallel_private_codegen.cpp | 47 +- test/OpenMP/parallel_private_messages.cpp | 16 +- test/OpenMP/parallel_proc_bind_messages.cpp | 2 +- test/OpenMP/parallel_reduction_codegen.cpp | 683 +++++ test/OpenMP/parallel_reduction_messages.cpp | 66 +- test/OpenMP/parallel_sections_ast_print.cpp | 6 +- test/OpenMP/parallel_sections_codegen.cpp | 98 + .../parallel_sections_copyin_messages.cpp | 28 +- .../parallel_sections_default_messages.cpp | 2 +- ...arallel_sections_firstprivate_messages.cpp | 12 +- test/OpenMP/parallel_sections_if_messages.cpp | 2 +- ...parallel_sections_lastprivate_messages.cpp | 47 +- test/OpenMP/parallel_sections_messages.cpp | 2 +- test/OpenMP/parallel_sections_misc_messages.c | 2 +- ...parallel_sections_num_threads_messages.cpp | 2 +- .../parallel_sections_private_messages.cpp | 12 +- .../parallel_sections_proc_bind_messages.cpp | 2 +- .../parallel_sections_reduction_messages.cpp | 66 +- .../parallel_sections_shared_messages.cpp | 12 +- test/OpenMP/parallel_shared_messages.cpp | 12 +- test/OpenMP/predefined_macro.c | 22 +- test/OpenMP/sections_ast_print.cpp | 6 +- test/OpenMP/sections_codegen.cpp | 105 + test/OpenMP/sections_firstprivate_codegen.cpp | 277 ++ .../OpenMP/sections_firstprivate_messages.cpp | 12 +- test/OpenMP/sections_lastprivate_codegen.cpp | 332 +++ test/OpenMP/sections_lastprivate_messages.cpp | 43 +- test/OpenMP/sections_misc_messages.c | 2 +- test/OpenMP/sections_private_codegen.cpp | 192 ++ test/OpenMP/sections_private_messages.cpp | 12 +- test/OpenMP/sections_reduction_codegen.cpp | 470 +++ test/OpenMP/sections_reduction_messages.cpp | 60 +- test/OpenMP/simd_aligned_messages.cpp | 2 +- test/OpenMP/simd_ast_print.cpp | 6 +- test/OpenMP/simd_codegen.cpp | 227 +- test/OpenMP/simd_collapse_messages.cpp | 2 +- test/OpenMP/simd_lastprivate_messages.cpp | 35 +- test/OpenMP/simd_linear_messages.cpp | 14 +- test/OpenMP/simd_loop_messages.cpp | 7 +- test/OpenMP/simd_metadata.c | 20 +- test/OpenMP/simd_misc_messages.c | 2 +- test/OpenMP/simd_private_messages.cpp | 12 +- test/OpenMP/simd_reduction_messages.cpp | 60 +- test/OpenMP/simd_safelen_messages.cpp | 2 +- test/OpenMP/single_ast_print.cpp | 26 +- test/OpenMP/single_codegen.cpp | 189 ++ test/OpenMP/single_copyprivate_messages.cpp | 49 +- test/OpenMP/single_firstprivate_codegen.cpp | 251 ++ test/OpenMP/single_firstprivate_messages.cpp | 12 +- test/OpenMP/single_misc_messages.c | 2 +- test/OpenMP/single_private_codegen.cpp | 182 ++ test/OpenMP/single_private_messages.cpp | 12 +- test/OpenMP/target_ast_print.cpp | 6 +- test/OpenMP/target_if_messages.cpp | 2 +- test/OpenMP/target_messages.cpp | 2 +- test/OpenMP/task_ast_print.cpp | 6 +- test/OpenMP/task_codegen.cpp | 102 + test/OpenMP/task_default_messages.cpp | 2 +- test/OpenMP/task_final_messages.cpp | 2 +- test/OpenMP/task_firstprivate_codegen.cpp | 433 +++ test/OpenMP/task_firstprivate_messages.cpp | 17 +- test/OpenMP/task_if_codegen.cpp | 133 + test/OpenMP/task_if_messages.cpp | 2 +- test/OpenMP/task_messages.cpp | 2 +- test/OpenMP/task_private_codegen.cpp | 388 +++ test/OpenMP/task_private_messages.cpp | 21 +- test/OpenMP/task_shared_messages.cpp | 12 +- test/OpenMP/taskwait_ast_print.cpp | 6 +- test/OpenMP/taskwait_codegen.cpp | 31 + test/OpenMP/taskwait_messages.cpp | 2 +- test/OpenMP/taskyield_ast_print.cpp | 6 +- test/OpenMP/taskyield_codegen.cpp | 39 + test/OpenMP/taskyield_messages.cpp | 2 +- test/OpenMP/teams_ast_print.cpp | 6 +- test/OpenMP/teams_default_messages.cpp | 2 +- test/OpenMP/teams_firstprivate_messages.cpp | 12 +- test/OpenMP/teams_messages.cpp | 2 +- test/OpenMP/teams_private_messages.cpp | 16 +- test/OpenMP/teams_reduction_messages.cpp | 66 +- test/OpenMP/teams_shared_messages.cpp | 12 +- test/OpenMP/threadprivate_ast_print.cpp | 8 +- test/OpenMP/threadprivate_codegen.cpp | 405 +-- test/OpenMP/threadprivate_messages.cpp | 29 +- test/PCH/Inputs/modules/Foo.h | 1 + test/PCH/Inputs/modules/module.modulemap | 3 + test/PCH/chain-openmp-threadprivate.cpp | 4 +- test/PCH/chain-typo-corrections.cpp | 12 + test/PCH/check-deserializations.cpp | 9 +- test/PCH/cxx-templates.cpp | 2 +- test/PCH/cxx11-lambdas.mm | 2 +- test/PCH/cxx1y-lambdas.mm | 116 +- test/PCH/debug-info-limited-struct.c | 4 +- test/PCH/emit-pth.c | 7 + test/PCH/headersearch.cpp | 14 +- test/PCH/module-hash-difference.m | 8 + test/Parser/DelayedTemplateParsing.cpp | 4 +- test/Parser/MicrosoftExtensions.c | 9 +- test/Parser/MicrosoftExtensions.cpp | 29 +- test/Parser/altivec.c | 12 +- .../Parser/annotation-token-in-lexed-body.cpp | 5 + test/Parser/atomic.c | 2 + test/Parser/brackets.c | 8 +- test/Parser/brackets.cpp | 32 +- test/Parser/crash-report.c | 4 + test/Parser/cxx-altivec.cpp | 24 +- test/Parser/cxx-ambig-init-templ.cpp | 1 - test/Parser/cxx-class.cpp | 39 +- test/Parser/cxx0x-ambig.cpp | 4 +- test/Parser/cxx0x-attributes.cpp | 14 +- .../cxx0x-override-control-keywords.cpp | 6 +- test/Parser/extra-semi.cpp | 14 + test/Parser/ms-inline-asm.c | 2 + test/Parser/ms-seh.c | 24 + test/Parser/no-gnu-inline-asm.c | 15 + test/Parser/objcxx0x-lambda-expressions.mm | 13 + test/Parser/opencl-atomics-cl20.cl | 56 + test/Parser/recovery.cpp | 30 +- test/Preprocessor/_Pragma-location.c | 12 +- test/Preprocessor/aarch64-target-features.c | 10 + test/Preprocessor/annotate_in_macro_arg.c | 8 + test/Preprocessor/arm-target-features.c | 36 + test/Preprocessor/has_attribute.c | 5 +- test/Preprocessor/has_include.c | 12 + test/Preprocessor/init.c | 821 +++++- test/Preprocessor/macro_paste_msextensions.c | 7 + test/Preprocessor/pr19649-signed-wchar_t.c | 6 + test/Preprocessor/pr19649-unsigned-wchar_t.c | 6 + test/Preprocessor/pragma_microsoft.c | 46 +- test/Preprocessor/pragma_ps4.c | 27 + test/Preprocessor/predefined-arch-macros.c | 79 + test/Preprocessor/stdint.c | 20 +- test/Preprocessor/x86_target_features.c | 4 + test/Profile/Inputs/c-captured.proftext | 2 +- test/Profile/Inputs/cxx-rangefor.proftext | 13 + test/Profile/Inputs/cxx-throws.proftext | 12 +- test/Profile/c-captured.c | 8 +- test/Profile/c-general.c | 37 +- test/Profile/c-generate.c | 10 + test/Profile/c-linkage-available_externally.c | 2 +- test/Profile/c-linkage.c | 26 +- test/Profile/c-unreachable-after-switch.c | 2 +- test/Profile/cxx-lambda.cpp | 10 +- test/Profile/cxx-linkage.cpp | 24 +- test/Profile/cxx-rangefor.cpp | 44 + test/Profile/cxx-throws.cpp | 32 +- test/Profile/cxx-virtual-destructor-calls.cpp | 30 + test/Profile/objc-general.m | 6 +- test/Profile/profile-does-not-exist.c | 4 + test/Rewriter/missing-dllimport.c | 2 +- test/Rewriter/objc-modern-boxing.mm | 18 +- test/Rewriter/objc-modern-numeric-literal.mm | 22 +- test/Rewriter/properties.m | 4 +- test/Rewriter/rewrite-captured-nested-bvar.c | 2 +- test/Rewriter/rewrite-modern-array-literal.mm | 2 +- .../rewrite-modern-captured-nested-bvar.mm | 2 +- .../rewrite-modern-container-literal.mm | 2 +- .../rewrite-nested-property-in-blocks.mm | 8 +- test/Sema/MicrosoftCompatibility-x64.c | 13 +- test/Sema/MicrosoftCompatibility.c | 2 + test/Sema/__try.c | 116 +- test/Sema/alias-redefinition.c | 23 +- test/Sema/align-systemz.c | 17 + test/Sema/align-x86.c | 2 + test/Sema/anonymous-struct-union.c | 7 +- test/Sema/assign.c | 5 +- test/Sema/atomic-compare.c | 5 + test/Sema/attr-availability-android.c | 31 + test/Sema/attr-availability-app-extensions.c | 18 + test/Sema/attr-availability.c | 106 + test/Sema/attr-capabilities.c | 4 +- test/Sema/attr-flag-enum.c | 73 + test/Sema/attr-format.c | 7 + test/Sema/attr-malloc.c | 10 +- test/Sema/attr-naked.cpp | 15 + test/Sema/bitfield.c | 4 + test/Sema/block-misc.c | 4 +- test/Sema/builtin-assume.c | 14 +- test/Sema/builtins-ppc.c | 51 + test/Sema/builtins-x86.c | 47 + test/Sema/builtins.cl | 8 + test/Sema/callingconv.c | 2 - test/Sema/complex-int.c | 2 + test/Sema/crash-invalid-builtin.c | 4 + test/Sema/dllexport.c | 8 +- test/Sema/dllimport.c | 8 +- test/Sema/format-strings-freebsd.c | 40 + test/Sema/function.c | 6 + test/Sema/i386-linux-android.c | 6 + test/Sema/inline-asm-validate-aarch64.c | 16 + test/Sema/integer-overflow.c | 147 + ...nvalid-assignment-constant-address-space.c | 8 + test/Sema/member-reference.c | 2 +- test/Sema/ms-inline-asm.c | 2 +- test/Sema/parentheses.c | 10 +- test/Sema/pointer-addition.c | 6 +- test/{SemaCXX => Sema}/pr9812.c | 2 +- test/Sema/pragma-ms_struct.c | 2 +- test/Sema/pragma-section-invalid.c | 7 + test/Sema/statements.c | 15 +- test/Sema/struct-packed-align.c | 7 +- test/Sema/typo-correction.c | 12 + test/Sema/vla.c | 3 + test/Sema/warn-documentation-fixits.cpp | 7 +- .../warn-documentation-unknown-command.cpp | 11 + test/Sema/warn-documentation.cpp | 6 + test/Sema/warn-main.c | 2 + test/Sema/warn-shift-negative.c | 6 + test/Sema/warn-string-conversion.c | 25 +- test/Sema/warn-tautological-compare.c | 9 + test/Sema/wchar.c | 2 +- test/Sema/x86-builtin-palignr.c | 7 - test/Sema/x86_64-linux-android.c | 10 + test/SemaCUDA/asm-constraints-device.cu | 24 + test/SemaCUDA/asm-constraints-mixed.cu | 15 + test/SemaCUDA/cuda-builtin-vars.cu | 57 + .../function-target-disabled-check.cu | 26 + test/SemaCUDA/function-target-hd.cu | 71 + test/SemaCUDA/function-target.cu | 38 - test/SemaCUDA/launch_bounds.cu | 50 +- test/SemaCUDA/qualifiers.cu | 32 +- test/SemaCXX/MicrosoftCompatibility.cpp | 14 +- test/SemaCXX/MicrosoftExtensions.cpp | 12 + test/SemaCXX/MicrosoftSuper.cpp | 9 + test/SemaCXX/PR21679.cpp | 13 + test/SemaCXX/PR23334.cpp | 10 + test/SemaCXX/PR9461.cpp | 4 +- test/SemaCXX/__try.cpp | 2 +- test/SemaCXX/accessible-base.cpp | 23 + test/SemaCXX/addr-of-overloaded-function.cpp | 8 +- test/SemaCXX/alignof.cpp | 20 + test/SemaCXX/anonymous-union.cpp | 11 +- test/SemaCXX/ast-print.cpp | 8 +- test/SemaCXX/atomic-type.cpp | 11 +- test/SemaCXX/attr-flag-enum-reject.cpp | 4 + test/SemaCXX/attr-no-sanitize.cpp | 29 + test/SemaCXX/attr-selectany.cpp | 16 +- test/SemaCXX/builtins-arm.cpp | 2 +- test/SemaCXX/captured-statements.cpp | 4 +- test/SemaCXX/class-layout.cpp | 4 +- test/SemaCXX/class.cpp | 6 +- test/SemaCXX/constant-expression-cxx11.cpp | 12 +- test/SemaCXX/constexpr-value-init.cpp | 6 +- test/SemaCXX/constructor-initializer.cpp | 7 +- test/SemaCXX/crashes.cpp | 13 +- test/SemaCXX/cxx0x-constexpr-const.cpp | 4 +- test/SemaCXX/cxx0x-cursory-default-delete.cpp | 24 +- test/SemaCXX/cxx0x-defaulted-functions.cpp | 2 +- .../SemaCXX/cxx0x-initializer-constructor.cpp | 6 +- test/SemaCXX/cxx0x-initializer-references.cpp | 11 +- test/SemaCXX/cxx0x-initializer-scalars.cpp | 10 +- .../cxx0x-initializer-stdinitializerlist.cpp | 15 + test/SemaCXX/cxx0x-return-init-list.cpp | 2 +- test/SemaCXX/cxx11-ast-print.cpp | 5 + .../cxx11-call-to-deleted-constructor.cpp | 40 + test/SemaCXX/cxx11-crashes.cpp | 17 + test/SemaCXX/cxx11-gnu-attrs.cpp | 3 + test/SemaCXX/cxx1y-constexpr-not-const.cpp | 2 - test/SemaCXX/cxx1y-deduced-return-type.cpp | 4 +- test/SemaCXX/cxx1y-generic-lambdas.cpp | 6 +- test/SemaCXX/cxx1y-init-captures.cpp | 25 +- test/SemaCXX/cxx1y-sized-deallocation.cpp | 2 + .../cxx1y-variable-templates_in_class.cpp | 4 +- test/SemaCXX/cxx98-compat.cpp | 4 +- test/SemaCXX/decl-microsoft-call-conv.cpp | 22 +- test/SemaCXX/declspec-thread.cpp | 17 +- test/SemaCXX/default-assignment-operator.cpp | 2 +- test/SemaCXX/delete-mismatch.h | 15 + test/SemaCXX/delete.cpp | 131 +- test/SemaCXX/deleted-function.cpp | 28 + test/SemaCXX/derived-to-base-ambig.cpp | 4 +- test/SemaCXX/destructor.cpp | 17 + test/SemaCXX/devirtualize-vtable-marking.cpp | 15 +- test/SemaCXX/dllexport-pr22591.cpp | 25 + test/SemaCXX/dllexport.cpp | 23 +- test/SemaCXX/dllimport.cpp | 8 +- test/SemaCXX/empty-class-layout.cpp | 2 +- test/SemaCXX/enum-bitfield.cpp | 8 + .../err_reference_bind_drops_quals.cpp | 43 + test/SemaCXX/err_typecheck_assign_const.cpp | 124 + .../err_typecheck_assign_const_filecheck.cpp | 252 ++ test/SemaCXX/exceptions-seh.cpp | 115 + test/SemaCXX/exceptions.cpp | 108 + test/SemaCXX/explicit.cpp | 14 +- test/SemaCXX/for-range-examples.cpp | 4 +- test/SemaCXX/format-strings-0x-nopedantic.cpp | 10 + test/SemaCXX/format-strings-0x.cpp | 3 + test/SemaCXX/format-strings.cpp | 15 + test/SemaCXX/friend.cpp | 14 + test/SemaCXX/function-type-qual.cpp | 4 +- test/SemaCXX/functional-cast.cpp | 5 +- test/SemaCXX/generalized-deprecated.cpp | 14 + test/SemaCXX/increment-decrement.cpp | 4 +- test/SemaCXX/integer-overflow.cpp | 166 ++ test/SemaCXX/linkage.cpp | 4 +- test/SemaCXX/member-expr.cpp | 8 +- test/SemaCXX/member-pointer-ms.cpp | 14 +- test/SemaCXX/member-pointer.cpp | 4 +- test/SemaCXX/microsoft-dtor-lookup.cpp | 3 +- test/SemaCXX/microsoft-new-delete.cpp | 2 +- test/SemaCXX/ms-novtable.cpp | 7 + test/SemaCXX/ms_integer_suffix.cpp | 5 + test/SemaCXX/ms_mutable_reference_member.cpp | 13 + test/SemaCXX/nested-name-spec.cpp | 37 +- test/SemaCXX/new-array-size-conv.cpp | 3 +- test/SemaCXX/new-delete.cpp | 8 + test/SemaCXX/overload-decl.cpp | 6 +- test/SemaCXX/pseudo-destructors.cpp | 8 +- test/SemaCXX/references.cpp | 4 +- test/SemaCXX/reinterpret-cast.cpp | 10 +- test/SemaCXX/scope-check.cpp | 191 +- test/SemaCXX/static-cast.cpp | 10 +- test/SemaCXX/type-traits.cpp | 3 + test/SemaCXX/typo-correction-cxx11.cpp | 34 + test/SemaCXX/typo-correction-delayed.cpp | 26 + test/SemaCXX/typo-correction.cpp | 6 + test/SemaCXX/uninitialized.cpp | 54 +- test/SemaCXX/unreachable-catch-clauses.cpp | 7 +- test/SemaCXX/virtual-override.cpp | 2 +- test/SemaCXX/vla.cpp | 3 + test/SemaCXX/warn-bad-memaccess.cpp | 6 +- test/SemaCXX/warn-consumed-analysis.cpp | 12 + test/SemaCXX/warn-empty-body.cpp | 7 + test/SemaCXX/warn-memset-bad-sizeof.cpp | 2 + test/SemaCXX/warn-missing-prototypes.cpp | 4 +- test/SemaCXX/warn-pessmizing-move.cpp | 203 ++ test/SemaCXX/warn-range-loop-analysis.cpp | 299 ++ test/SemaCXX/warn-redundant-move.cpp | 92 + test/SemaCXX/warn-reinterpret-base-class.cpp | 2 +- test/SemaCXX/warn-thread-safety-analysis.cpp | 307 +- .../warn-unused-local-typedef-serialize.cpp | 1 + test/SemaCXX/warn-unused-result.cpp | 23 +- test/SemaCXX/warn-weak-vtables.cpp | 26 +- test/SemaObjC/arc-bridged-cast.m | 27 + test/SemaObjC/arc-decls.m | 35 +- test/SemaObjC/arc-dict-bridged-cast.m | 13 +- test/SemaObjC/arc-unbridged-cast.m | 7 + test/SemaObjC/arc.m | 4 +- test/SemaObjC/attr-availability.m | 119 + test/SemaObjC/attr-deprecated.m | 11 + test/SemaObjC/attr-designated-init.m | 8 + test/SemaObjC/attr-malloc.m | 10 +- test/SemaObjC/circular-container.m | 146 + test/SemaObjC/class-unavail-warning.m | 31 + test/SemaObjC/debugger-support.m | 4 +- test/SemaObjC/format-ostrace-warning.m | 54 + test/SemaObjC/iboutlet.m | 1 + test/SemaObjC/multiple-method-names.m | 19 + .../multiple-property-deprecated-decl.m | 19 + test/SemaObjC/nonnull.m | 2 + test/SemaObjC/objc-array-literal.m | 12 + test/SemaObjC/objc-dictionary-literal.m | 14 + .../objc-independent-class-attribute.m | 36 + test/SemaObjC/objc-literal-nsnumber.m | 18 + test/SemaObjC/objcbridge-attribute-arc.m | 21 +- test/SemaObjC/objcbridge-attribute.m | 35 +- test/SemaObjC/objcbridgemutable-attribute.m | 3 +- test/SemaObjC/property-9.m | 15 + test/SemaObjC/property-deprecated-warning.m | 66 +- test/SemaObjC/selector-3.m | 21 + test/SemaObjC/super-property-notation.m | 6 + test/SemaObjC/undef-arg-super-method-call.m | 23 + test/SemaObjC/unused.m | 30 +- test/SemaObjC/warn-strict-selector-match.m | 37 +- test/SemaObjC/weak-receiver-warn.m | 100 - test/SemaObjCXX/arc-bridged-cast.mm | 18 + test/SemaObjCXX/objcbridge-attribute-arc.mm | 4 +- test/SemaObjCXX/objcbridge-attribute.mm | 5 +- test/SemaObjCXX/objcbridge-static-cast.mm | 3 +- test/SemaObjCXX/propert-dot-error.mm | 4 +- test/SemaOpenCL/cond.cl | 132 +- test/SemaOpenCL/extension-fp64-cl1.1.cl | 19 + test/SemaOpenCL/optional-core-fp64-cl1.2.cl | 20 + test/SemaOpenCL/optional-core-fp64-cl2.0.cl | 20 + test/SemaOpenCL/shifts.cl | 76 +- test/SemaTemplate/anonymous-union.cpp | 4 +- test/SemaTemplate/class-template-decl.cpp | 6 + test/SemaTemplate/deduction.cpp | 5 + test/SemaTemplate/dependent-names.cpp | 5 + test/SemaTemplate/dependent-type-identity.cpp | 4 +- test/SemaTemplate/destructor-template.cpp | 10 +- .../explicit-specialization-member.cpp | 2 +- test/SemaTemplate/ext_ms_template_spec.cpp | 33 + test/SemaTemplate/friend.cpp | 16 + test/SemaTemplate/instantiate-local-class.cpp | 200 ++ .../instantiate-non-dependent-types.cpp | 2 +- test/SemaTemplate/instantiate-static-var.cpp | 12 + .../ms-lookup-template-base-classes.cpp | 69 +- .../SemaTemplate/virtual-member-functions.cpp | 4 +- .../UsesFoo.framework/Headers/UsesFoo.h | 1 + .../Modules/module.modulemap | 4 + test/VFS/external-names.c | 4 +- test/VFS/umbrella-mismatch.m | 2 +- test/lit.cfg | 10 +- test/lit.site.cfg.in | 1 + tools/CMakeLists.txt | 1 + tools/c-index-test/c-index-test.c | 59 +- tools/clang-format-vs/CMakeLists.txt | 4 +- .../ClangFormat/ClangFormat.csproj | 6 +- .../ClangFormat/Resources.Designer.cs | 3 +- tools/clang-format/CMakeLists.txt | 10 +- tools/clang-format/ClangFormat.cpp | 28 +- tools/clang-format/clang-format-diff.py | 2 +- tools/clang-format/clang-format.el | 42 +- tools/clang-format/clang-format.py | 5 + tools/clang-format/fuzzer/CMakeLists.txt | 11 + .../clang-format/fuzzer/ClangFormatFuzzer.cpp | 25 + tools/clang-fuzzer/CMakeLists.txt | 20 + tools/clang-fuzzer/ClangFuzzer.cpp | 43 + tools/driver/CMakeLists.txt | 2 +- tools/driver/cc1as_main.cpp | 51 +- tools/libclang/CIndex.cpp | 125 +- tools/libclang/CIndexCodeCompletion.cpp | 9 +- tools/libclang/CIndexDiagnostic.cpp | 6 +- tools/libclang/CIndexDiagnostic.h | 6 +- tools/libclang/CIndexer.h | 39 +- tools/libclang/CMakeLists.txt | 5 + tools/libclang/CXCursor.cpp | 32 +- tools/libclang/CXCursor.h | 21 +- tools/libclang/CXLoadedDiagnostic.cpp | 3 +- tools/libclang/CXLoadedDiagnostic.h | 4 +- tools/libclang/CXString.h | 2 +- tools/libclang/CXType.cpp | 81 +- tools/libclang/Indexing.cpp | 11 +- tools/libclang/IndexingContext.h | 4 +- tools/libclang/libclang.exports | 3 + tools/scan-build/ccc-analyzer | 8 +- unittests/AST/DeclPrinterTest.cpp | 2 +- unittests/AST/ExternalASTSourceTest.cpp | 10 +- unittests/AST/MatchVerifier.h | 12 +- unittests/AST/NamedDeclPrinterTest.cpp | 2 +- unittests/AST/SourceLocationTest.cpp | 50 +- unittests/AST/StmtPrinterTest.cpp | 2 +- unittests/ASTMatchers/ASTMatchersTest.cpp | 127 +- unittests/ASTMatchers/ASTMatchersTest.h | 30 +- unittests/ASTMatchers/Dynamic/CMakeLists.txt | 1 + unittests/ASTMatchers/Dynamic/ParserTest.cpp | 7 +- unittests/Basic/FileManagerTest.cpp | 1 + unittests/Basic/SourceManagerTest.cpp | 13 +- unittests/Basic/VirtualFileSystemTest.cpp | 4 +- unittests/CMakeLists.txt | 2 + unittests/CodeGen/BufferSourceTest.cpp | 1 - unittests/Driver/MultilibTest.cpp | 10 +- unittests/Format/FormatTest.cpp | 1644 ++++++++--- unittests/Format/FormatTestJS.cpp | 294 +- unittests/Format/FormatTestJava.cpp | 15 +- unittests/Format/FormatTestProto.cpp | 13 + unittests/Frontend/FrontendActionTest.cpp | 9 +- unittests/Lex/LexerTest.cpp | 3 +- unittests/Lex/PPCallbacksTest.cpp | 24 +- .../Lex/PPConditionalDirectiveRecordTest.cpp | 3 +- unittests/Makefile | 4 +- unittests/Rewrite/CMakeLists.txt | 10 + unittests/Rewrite/Makefile | 16 + unittests/Rewrite/RewriteBufferTest.cpp | 51 + unittests/Sema/ExternalSemaSourceTest.cpp | 31 +- .../StaticAnalyzer/AnalyzerOptionsTest.cpp | 74 + unittests/StaticAnalyzer/CMakeLists.txt | 13 + unittests/StaticAnalyzer/Makefile | 15 + unittests/Tooling/CommentHandlerTest.cpp | 12 +- unittests/Tooling/CompilationDatabaseTest.cpp | 4 +- unittests/Tooling/RefactoringTest.cpp | 8 +- unittests/Tooling/TestVisitor.h | 8 +- unittests/Tooling/ToolingTest.cpp | 26 +- unittests/libclang/LibclangTest.cpp | 4 +- utils/TableGen/ClangAttrEmitter.cpp | 129 +- utils/TableGen/ClangDiagnosticsEmitter.cpp | 2 +- utils/TableGen/NeonEmitter.cpp | 42 +- utils/check_cfc/check_cfc.cfg | 3 + utils/check_cfc/check_cfc.py | 388 +++ utils/check_cfc/obj_diff.py | 79 + utils/check_cfc/setup.py | 21 + utils/check_cfc/test_check_cfc.py | 158 + www/analyzer/checker_dev_manual.html | 2 +- www/analyzer/potential_checkers.html | 2 +- www/cxx_dr_status.html | 190 +- www/cxx_status.html | 40 +- www/get_started.html | 31 +- www/menu.css | 2 +- www/menu.html.incl | 1 + 2272 files changed, 97506 insertions(+), 30880 deletions(-) create mode 100644 docs/ControlFlowIntegrity.rst create mode 100644 docs/ControlFlowIntegrityDesign.rst create mode 100644 docs/SanitizerCoverage.rst delete mode 100644 docs/doxygen.css delete mode 100644 docs/doxygen.footer delete mode 100644 docs/doxygen.header create mode 100644 include/clang/Basic/BuiltinsSystemZ.def create mode 100644 include/clang/Rewrite/Core/RewriteBuffer.h create mode 100644 lib/Headers/avx512dqintrin.h create mode 100644 lib/Headers/avx512vldqintrin.h create mode 100644 lib/Headers/cuda_builtin_vars.h create mode 100644 lib/Headers/htmintrin.h create mode 100644 lib/Headers/htmxlintrin.h create mode 100644 lib/Headers/s390intrin.h create mode 100644 test/ASTMerge/Inputs/body1.c create mode 100644 test/ASTMerge/Inputs/body2.c create mode 100644 test/ASTMerge/codegen-body.c create mode 100644 test/ASTMerge/codegen-exprs.c create mode 100644 test/CXX/drs/dr1748.cpp create mode 100644 test/CXX/drs/dr17xx.cpp create mode 100644 test/CXX/drs/dr19xx.cpp create mode 100644 test/CXX/drs/dr7xx.cpp delete mode 100644 test/CodeGen/2005-12-04-DeclarationLineNumbers.c create mode 100644 test/CodeGen/align-systemz.c create mode 100644 test/CodeGen/arm-bitfield-alignment.c delete mode 100644 test/CodeGen/arm-pnaclcall.c create mode 100644 test/CodeGen/arm-target-features.c create mode 100644 test/CodeGen/avx512dq-builtins.c create mode 100644 test/CodeGen/avx512er-builtins.c create mode 100644 test/CodeGen/avx512vldq-builtins.c create mode 100644 test/CodeGen/builtin-nan-legacy.c create mode 100644 test/CodeGen/builtins-ppc-crypto-disabled.c create mode 100644 test/CodeGen/builtins-ppc-crypto.c create mode 100644 test/CodeGen/builtins-ppc-htm.c create mode 100644 test/CodeGen/builtins-ppc-p7-disabled.c create mode 100644 test/CodeGen/builtins-ppc-p7.c create mode 100644 test/CodeGen/builtins-ppc-p8vector.c create mode 100644 test/CodeGen/builtins-ppc-quadword.c create mode 100644 test/CodeGen/builtins-systemz-error.c create mode 100644 test/CodeGen/builtins-systemz-vector-error.c create mode 100644 test/CodeGen/builtins-systemz-vector.c create mode 100644 test/CodeGen/builtins-systemz.c create mode 100644 test/CodeGen/cleanup-destslot-simple.c create mode 100644 test/CodeGen/debug-info-257-args.c create mode 100644 test/CodeGen/debug-info-file-change.c create mode 100644 test/CodeGen/debug-info-same-line.c delete mode 100644 test/CodeGen/debug-info-var-location.c create mode 100644 test/CodeGen/exceptions-seh-finally.c create mode 100644 test/CodeGen/exceptions-seh-leave.c create mode 100644 test/CodeGen/function-target-features.c create mode 100644 test/CodeGen/funique-sections.c create mode 100644 test/CodeGen/inline-asm-matching-constraint.c create mode 100644 test/CodeGen/lifetime-debuginfo-1.c create mode 100644 test/CodeGen/lifetime-debuginfo-2.c create mode 100644 test/CodeGen/mips-inline-asm.c create mode 100644 test/CodeGen/mips-unsigned-ext-var.c create mode 100644 test/CodeGen/mips-unsigned-extend.c create mode 100644 test/CodeGen/mips-unsupported-nan.c create mode 100644 test/CodeGen/ms-declspecs.cpp create mode 100644 test/CodeGen/ms-setjmp.c create mode 100644 test/CodeGen/ms-volatile.c create mode 100644 test/CodeGen/ppc64-qpx-vector.c create mode 100644 test/CodeGen/sse.c create mode 100644 test/CodeGen/systemz-abi-vector.c create mode 100644 test/CodeGen/systemz-abi.c create mode 100644 test/CodeGen/systemz-abi.cpp create mode 100644 test/CodeGen/windows-on-arm-stack-probe-size.c create mode 100644 test/CodeGenCUDA/cuda-builtin-vars.cu create mode 100644 test/CodeGenCUDA/host-device-calls-host.cu create mode 100644 test/CodeGenCXX/aarch64-aapcs-zerolength-bitfield.cpp rename test/CodeGenCXX/{apple-kext-indirect-call-2.C => apple-kext-indirect-call-2.cpp} (57%) delete mode 100644 test/CodeGenCXX/apple-kext-indirect-call.C create mode 100644 test/CodeGenCXX/apple-kext-indirect-call.cpp rename test/CodeGenCXX/{apple-kext-linkage.C => apple-kext-linkage.cpp} (100%) rename test/CodeGenCXX/{apple-kext-no-staticinit-section.C => apple-kext-no-staticinit-section.cpp} (100%) create mode 100644 test/CodeGenCXX/auto-variable-template.cpp create mode 100644 test/CodeGenCXX/cfi-cast.cpp create mode 100644 test/CodeGenCXX/cfi-nvcall.cpp create mode 100644 test/CodeGenCXX/cfi-vcall.cpp create mode 100644 test/CodeGenCXX/cxx1y-generic-lambdas.cpp delete mode 100644 test/CodeGenCXX/debug-info-same-line.cpp create mode 100644 test/CodeGenCXX/exceptions-seh-filter-captures.cpp create mode 100644 test/CodeGenCXX/exceptions-seh.cpp create mode 100644 test/CodeGenCXX/implicit-record-visibility.cpp create mode 100644 test/CodeGenCXX/inline-dllexport-member.cpp create mode 100644 test/CodeGenCXX/linetable-virtual-variadic.cpp create mode 100644 test/CodeGenCXX/mangle-fail.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-eh-catch.cpp rename test/CodeGenCXX/{microsoft-abi-exceptions.cpp => microsoft-abi-eh-cleanups.cpp} (83%) create mode 100644 test/CodeGenCXX/microsoft-abi-eh-terminate.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-thread-safe-statics.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-throw.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-vmemptr-vbase.cpp create mode 100644 test/CodeGenCXX/microsoft-abi-vtables-ambiguous.cpp create mode 100644 test/CodeGenCXX/ms-novtable.cpp create mode 100644 test/CodeGenCXX/ms_struct.cpp create mode 100644 test/CodeGenCXX/powerpc-byval.cpp create mode 100644 test/CodeGenCXX/static-data-member-single-emission.cpp create mode 100644 test/CodeGenCXX/vector-splat-conversion.cpp create mode 100644 test/CodeGenCXX/x86_64-arguments-avx.cpp create mode 100644 test/CodeGenObjC/compound-literal-property-access.m create mode 100644 test/CodeGenObjC/no-sanitize.m create mode 100644 test/CodeGenObjC/objc2-protocol-metadata.m create mode 100644 test/CodeGenObjCXX/debug-info-cyclic.mm create mode 100644 test/CodeGenObjCXX/nested-ehlocation.mm create mode 100644 test/CodeGenOpenCL/cl-strict-aliasing.cl create mode 100644 test/CodeGenOpenCL/memcpy.cl create mode 100644 test/CodeGenOpenCL/spir-calling-conv.cl create mode 100644 test/CoverageMapping/Inputs/ends_a_scope create mode 100644 test/CoverageMapping/Inputs/md.def create mode 100644 test/CoverageMapping/Inputs/starts_a_scope create mode 100644 test/CoverageMapping/block-storage-starts-region.m create mode 100644 test/CoverageMapping/comment-in-macro.c create mode 100644 test/CoverageMapping/lambda.cpp create mode 100644 test/CoverageMapping/macro-expansion.c create mode 100644 test/CoverageMapping/macro-expressions.cpp create mode 100644 test/CoverageMapping/macroscopes.cpp create mode 100644 test/CoverageMapping/md.cpp create mode 100644 test/CoverageMapping/moremacros.c create mode 100644 test/CoverageMapping/switchmacro.c create mode 100644 test/CoverageMapping/system_macro.c create mode 100644 test/CoverageMapping/unreachable-macro.c create mode 100644 test/CoverageMapping/unused_names.c create mode 100644 test/CoverageMapping/while.c rename test/{Modules/macro-reexport/a2.h => Driver/Inputs/resource_dir/lib/linux/libclang_rt.msan_cxx-x86_64.a.syms} (100%) rename test/{Modules/macro-reexport/b1.h => Driver/Inputs/resource_dir/lib/linux/libclang_rt.tsan_cxx-x86_64.a.syms} (100%) create mode 100644 test/Driver/cloudabi.c create mode 100644 test/Driver/cloudabi.cpp create mode 100644 test/Driver/cuda-simple.cu create mode 100644 test/Driver/fsanitize-coverage.c create mode 100644 test/Driver/fveclib.c rename test/Driver/{ms-inline-asm.c => inline-asm.c} (58%) create mode 100644 test/Driver/mglobal-merge.c delete mode 100644 test/Driver/mno-global-merge.c create mode 100644 test/Driver/modules-cache-path.m create mode 100644 test/Driver/msvc-link.c create mode 100644 test/Driver/nacl-direct.c create mode 100644 test/Driver/objc-sdk-migration-options.m create mode 100644 test/Driver/preserve-uselistorder.c create mode 100644 test/Driver/ps4-cpu-defaults.cpp create mode 100644 test/Driver/rtti-options.cpp create mode 100644 test/Driver/systemz-features.cpp create mode 100644 test/Driver/target-abi-cc1as.s create mode 100644 test/FixIt/fixit-eof-space.c create mode 100644 test/Format/incomplete.cpp create mode 100644 test/Frontend/gnu-inline.c create mode 100644 test/Frontend/plugin-delayed-template.cpp create mode 100644 test/Frontend/rewrite-includes-line-markers.c create mode 100644 test/Headers/Inputs/include/stdlib.h create mode 100644 test/Headers/arm64-apple-ios-types.cpp create mode 100644 test/Headers/thumbv7-apple-ios-types.cpp create mode 100644 test/Headers/x86_64-apple-macosx-types.cpp create mode 100644 test/Index/complete-call.cpp create mode 100644 test/Index/complete-constructor-params.cpp create mode 100644 test/Index/complete-functor-call.cpp create mode 100644 test/Index/complete-optional-params.cpp create mode 100644 test/Index/complete-pointer-and-reference-to-functions.cpp create mode 100644 test/Index/complete-template-friends-defined.cpp create mode 100644 test/Lexer/eof-include.c create mode 100644 test/Lexer/eof-number.c create mode 100644 test/Misc/backend-optimization-failure-nodbg.cpp create mode 100644 test/Modules/Inputs/PR21687/a.h create mode 100644 test/Modules/Inputs/PR21687/b.h create mode 100644 test/Modules/Inputs/PR21687/c.h create mode 100644 test/Modules/Inputs/PR21687/module.modulemap create mode 100644 test/Modules/Inputs/anon-namespace/a.h create mode 100644 test/Modules/Inputs/anon-namespace/b1.h create mode 100644 test/Modules/Inputs/anon-namespace/b2.h create mode 100644 test/Modules/Inputs/anon-namespace/c.h create mode 100644 test/Modules/Inputs/anon-namespace/module.modulemap create mode 100644 test/Modules/Inputs/cxx-dtor/a.h create mode 100644 test/Modules/Inputs/cxx-dtor/b.h create mode 100644 test/Modules/Inputs/cxx-dtor/module.modulemap create mode 100644 test/Modules/Inputs/cxx-lookup/na.h create mode 100644 test/Modules/Inputs/cxx-lookup/nb.h create mode 100644 test/Modules/Inputs/declare-use/sub.h create mode 100644 test/Modules/Inputs/deferred-lookup/a.h create mode 100644 test/Modules/Inputs/deferred-lookup/b.h create mode 100644 test/Modules/Inputs/deferred-lookup/module.modulemap create mode 100644 test/Modules/Inputs/diagnostics-aux.modulemap create mode 100644 test/Modules/Inputs/empty.h create mode 100644 test/Modules/Inputs/empty/empty.h create mode 100644 test/Modules/Inputs/explicit-build/d.h create mode 100644 test/Modules/Inputs/header-in-multiple-maps/a.h create mode 100644 test/Modules/Inputs/header-in-multiple-maps/map1 create mode 100644 test/Modules/Inputs/header-in-multiple-maps/map2 create mode 100644 test/Modules/Inputs/header-in-multiple-maps/map3 rename test/Modules/Inputs/{initializer_list => initializer_list/direct.h} (100%) create mode 100644 test/Modules/Inputs/initializer_list/direct.modulemap create mode 100644 test/Modules/Inputs/initializer_list/indirect.h create mode 100644 test/Modules/Inputs/initializer_list/indirect.modulemap create mode 100644 test/Modules/Inputs/invalidate-identifiers/a.h create mode 100644 test/Modules/Inputs/invalidate-identifiers/b.h rename test/Modules/{redecls/module.map => Inputs/invalidate-identifiers/module.modulemap} (100%) create mode 100644 test/Modules/Inputs/macro-ambiguity/a/quote/a_quote.h create mode 100644 test/Modules/Inputs/macro-ambiguity/a/system/a_system.h create mode 100644 test/Modules/Inputs/macro-ambiguity/b/quote/b_quote.h create mode 100644 test/Modules/Inputs/macro-ambiguity/b/system/b_system.h create mode 100644 test/Modules/Inputs/macro-ambiguity/c/quote/c_quote.h create mode 100644 test/Modules/Inputs/macro-ambiguity/c/system/c_system.h create mode 100644 test/Modules/Inputs/macro-ambiguity/d/quote/d_quote.h create mode 100644 test/Modules/Inputs/macro-ambiguity/d/system/d_system.h create mode 100644 test/Modules/Inputs/macro-ambiguity/e/quote/e_quote.h create mode 100644 test/Modules/Inputs/macro-ambiguity/e/system/e_system.h create mode 100644 test/Modules/Inputs/macro-ambiguity/module.modulemap create mode 100644 test/Modules/Inputs/macro-masking/a.h create mode 100644 test/Modules/Inputs/macro-masking/b.h create mode 100644 test/Modules/Inputs/macro-masking/module.modulemap rename test/Modules/{ => Inputs}/macro-reexport/a1.h (100%) create mode 100644 test/Modules/Inputs/macro-reexport/a2.h create mode 100644 test/Modules/Inputs/macro-reexport/b1.h rename test/Modules/{ => Inputs}/macro-reexport/b2.h (100%) rename test/Modules/{ => Inputs}/macro-reexport/c1.h (100%) rename test/Modules/{ => Inputs}/macro-reexport/d1.h (100%) rename test/Modules/{ => Inputs}/macro-reexport/d2.h (100%) rename test/Modules/{ => Inputs}/macro-reexport/e1.h (100%) rename test/Modules/{ => Inputs}/macro-reexport/e2.h (100%) rename test/Modules/{ => Inputs}/macro-reexport/f1.h (100%) rename test/Modules/{ => Inputs}/macro-reexport/module.modulemap (100%) create mode 100644 test/Modules/Inputs/macros-indirect.h create mode 100644 test/Modules/Inputs/merge-anon-in-template/a.h create mode 100644 test/Modules/Inputs/merge-anon-in-template/b.h create mode 100644 test/Modules/Inputs/merge-anon-in-template/c.h create mode 100644 test/Modules/Inputs/merge-anon-in-template/module.modulemap create mode 100644 test/Modules/Inputs/merge-decl-context/a.h create mode 100644 test/Modules/Inputs/merge-decl-context/b.h create mode 100644 test/Modules/Inputs/merge-decl-context/c.h create mode 100644 test/Modules/Inputs/merge-decl-context/d.h create mode 100644 test/Modules/Inputs/merge-decl-context/merge-decl-context.modulemap create mode 100644 test/Modules/Inputs/merge-decl-order/a.h create mode 100644 test/Modules/Inputs/merge-decl-order/b.h create mode 100644 test/Modules/Inputs/merge-decl-order/module.modulemap create mode 100644 test/Modules/Inputs/merge-dependent-friends/a.h create mode 100644 test/Modules/Inputs/merge-dependent-friends/b.h create mode 100644 test/Modules/Inputs/merge-dependent-friends/c.h create mode 100644 test/Modules/Inputs/merge-dependent-friends/d.h create mode 100644 test/Modules/Inputs/merge-dependent-friends/module.modulemap create mode 100644 test/Modules/Inputs/merge-friends/decl.h create mode 100644 test/Modules/Inputs/merge-friends/friend.h create mode 100644 test/Modules/Inputs/merge-friends/module.modulemap create mode 100644 test/Modules/Inputs/merge-implicit-special-members/a.h create mode 100644 test/Modules/Inputs/merge-implicit-special-members/b.h create mode 100644 test/Modules/Inputs/merge-implicit-special-members/c.h create mode 100644 test/Modules/Inputs/merge-implicit-special-members/module.modulemap create mode 100644 test/Modules/Inputs/merge-name-for-linkage/a.h create mode 100644 test/Modules/Inputs/merge-name-for-linkage/b.h create mode 100644 test/Modules/Inputs/merge-name-for-linkage/module.modulemap create mode 100644 test/Modules/Inputs/merge-nested-templates/a.h create mode 100644 test/Modules/Inputs/merge-nested-templates/b.h create mode 100644 test/Modules/Inputs/merge-nested-templates/c.h create mode 100644 test/Modules/Inputs/merge-nested-templates/module.modulemap create mode 100644 test/Modules/Inputs/merge-nested-templates/string.ii create mode 100644 test/Modules/Inputs/merge-target-features/foo.h create mode 100644 test/Modules/Inputs/merge-target-features/module.modulemap create mode 100644 test/Modules/Inputs/merge-template-friend/def.h create mode 100644 test/Modules/Inputs/merge-template-friend/friend.h create mode 100644 test/Modules/Inputs/merge-template-friend/module.modulemap create mode 100644 test/Modules/Inputs/merge-template-members/a1.h create mode 100644 test/Modules/Inputs/merge-template-members/a2.h create mode 100644 test/Modules/Inputs/merge-template-members/b1.h create mode 100644 test/Modules/Inputs/merge-template-members/b2.h create mode 100644 test/Modules/Inputs/merge-template-members/c.h create mode 100644 test/Modules/Inputs/merge-template-members/def.h create mode 100644 test/Modules/Inputs/merge-template-members/merge.h create mode 100644 test/Modules/Inputs/merge-template-members/module.modulemap create mode 100644 test/Modules/Inputs/merge-template-members/update.h create mode 100644 test/Modules/Inputs/merge-vtable-codegen/a.h create mode 100644 test/Modules/Inputs/merge-vtable-codegen/b.h create mode 100644 test/Modules/Inputs/merge-vtable-codegen/c.h create mode 100644 test/Modules/Inputs/merge-vtable-codegen/merge-vtable-codegen.modulemap create mode 100644 test/Modules/Inputs/no-implicit-builds/b.h create mode 100644 test/Modules/Inputs/no-implicit-builds/b.modulemap create mode 100644 test/Modules/Inputs/preprocess/file.h create mode 100644 test/Modules/Inputs/preprocess/fwd.h create mode 100644 test/Modules/Inputs/preprocess/module.modulemap create mode 100644 test/Modules/Inputs/redecl-found-building-chains/a.h create mode 100644 test/Modules/Inputs/redecl-found-building-chains/b.h create mode 100644 test/Modules/Inputs/redecl-found-building-chains/c.h create mode 100644 test/Modules/Inputs/redecl-found-building-chains/d.h create mode 100644 test/Modules/Inputs/redecl-found-building-chains/module.modulemap create mode 100644 test/Modules/Inputs/redecl-templates/a.h create mode 100644 test/Modules/Inputs/redecl-templates/module.modulemap rename test/Modules/{ => Inputs}/redecls/a.h (100%) rename test/Modules/{ => Inputs}/redecls/b.h (100%) create mode 100644 test/Modules/Inputs/redecls/module.map rename test/Modules/{ => Inputs}/self-import-header/af.framework/Headers/a1.h (100%) rename test/Modules/{ => Inputs}/self-import-header/af.framework/Headers/a2.h (100%) rename test/Modules/{ => Inputs}/self-import-header/af.framework/module.map (100%) rename test/Modules/{ => Inputs}/self-import-header/depend_builtin/h1.h (100%) rename test/Modules/{ => Inputs}/self-import-header/depend_builtin/module.map (100%) create mode 100644 test/Modules/Inputs/stress1/common.h create mode 100644 test/Modules/Inputs/stress1/m00.h create mode 100644 test/Modules/Inputs/stress1/m01.h create mode 100644 test/Modules/Inputs/stress1/m02.h create mode 100644 test/Modules/Inputs/stress1/m03.h create mode 100644 test/Modules/Inputs/stress1/merge00.h create mode 100644 test/Modules/Inputs/stress1/module.modulemap create mode 100644 test/Modules/Inputs/submodule-visibility/a.h create mode 100644 test/Modules/Inputs/submodule-visibility/b.h create mode 100644 test/Modules/Inputs/submodule-visibility/cycle1.h create mode 100644 test/Modules/Inputs/submodule-visibility/cycle2.h create mode 100644 test/Modules/Inputs/submodule-visibility/module.modulemap create mode 100644 test/Modules/Inputs/submodules-merge-defs/defs.h create mode 100644 test/Modules/Inputs/submodules-merge-defs/empty.h create mode 100644 test/Modules/Inputs/submodules-merge-defs/import-and-redefine.h create mode 100644 test/Modules/Inputs/submodules-merge-defs/merged-defs.h create mode 100644 test/Modules/Inputs/submodules-merge-defs/module.modulemap create mode 100644 test/Modules/Inputs/submodules-merge-defs/use-defs.h create mode 100644 test/Modules/Inputs/update-exception-spec/a.h create mode 100644 test/Modules/Inputs/update-exception-spec/b.h create mode 100644 test/Modules/Inputs/update-exception-spec/c.h create mode 100644 test/Modules/Inputs/update-exception-spec/module.modulemap create mode 100644 test/Modules/anon-namespace.cpp create mode 100644 test/Modules/crashes.m create mode 100644 test/Modules/cxx-dtor.cpp create mode 100644 test/Modules/declare-use-compatible.cpp create mode 100644 test/Modules/declare-use5.cpp create mode 100644 test/Modules/deferred-lookup.cpp rename test/Modules/{dependency-gen.modulemap.cpp => dependency-gen.modulemap} (72%) create mode 100644 test/Modules/diagnostics.modulemap create mode 100644 test/Modules/empty.modulemap create mode 100644 test/Modules/exponential-paths.cpp create mode 100644 test/Modules/header-in-multiple-maps.cpp create mode 100644 test/Modules/invalidate-identifiers.c create mode 100644 test/Modules/macro-ambiguity.cpp create mode 100644 test/Modules/macro-masking.cpp create mode 100644 test/Modules/macro-reexport.cpp delete mode 100644 test/Modules/macro-reexport/macro-reexport.cpp create mode 100644 test/Modules/merge-anon-in-template.cpp create mode 100644 test/Modules/merge-decl-context.cpp create mode 100644 test/Modules/merge-decl-order.cpp create mode 100644 test/Modules/merge-dependent-friends.cpp create mode 100644 test/Modules/merge-friends.cpp create mode 100644 test/Modules/merge-implicit-special-members.cpp create mode 100644 test/Modules/merge-name-for-linkage.cpp create mode 100644 test/Modules/merge-nested-templates.cpp create mode 100644 test/Modules/merge-target-features.cpp create mode 100644 test/Modules/merge-template-friend.cpp create mode 100644 test/Modules/merge-template-members.cpp create mode 100644 test/Modules/merge-vtable-codegen.cpp create mode 100644 test/Modules/no-implicit-builds.cpp create mode 100644 test/Modules/pr21687.cpp create mode 100644 test/Modules/public-private.modulemap create mode 100644 test/Modules/redecl-found-building-chains.cpp create mode 100644 test/Modules/redecl-templates.cpp rename test/Modules/{redecls/main.m => redecls.m} (56%) create mode 100644 test/Modules/self-import-header.m delete mode 100644 test/Modules/self-import-header/test.m create mode 100644 test/Modules/stress1.cpp create mode 100644 test/Modules/submodule-visibility-cycles.cpp create mode 100644 test/Modules/submodule-visibility.cpp create mode 100644 test/Modules/submodules-merge-defs.cpp create mode 100644 test/Modules/update-exception-spec.cpp create mode 100644 test/OpenMP/atomic_capture_codegen.cpp create mode 100644 test/OpenMP/atomic_codegen.cpp create mode 100644 test/OpenMP/atomic_read_codegen.c create mode 100644 test/OpenMP/atomic_update_codegen.cpp create mode 100644 test/OpenMP/atomic_write_codegen.c create mode 100644 test/OpenMP/for_firstprivate_codegen.cpp create mode 100644 test/OpenMP/for_lastprivate_codegen.cpp create mode 100644 test/OpenMP/for_private_codegen.cpp create mode 100644 test/OpenMP/for_reduction_codegen.cpp create mode 100644 test/OpenMP/ordered_codegen.cpp create mode 100644 test/OpenMP/parallel_copyin_codegen.cpp create mode 100644 test/OpenMP/parallel_for_codegen.cpp create mode 100644 test/OpenMP/parallel_reduction_codegen.cpp create mode 100644 test/OpenMP/parallel_sections_codegen.cpp create mode 100644 test/OpenMP/sections_codegen.cpp create mode 100644 test/OpenMP/sections_firstprivate_codegen.cpp create mode 100644 test/OpenMP/sections_lastprivate_codegen.cpp create mode 100644 test/OpenMP/sections_private_codegen.cpp create mode 100644 test/OpenMP/sections_reduction_codegen.cpp create mode 100644 test/OpenMP/single_codegen.cpp create mode 100644 test/OpenMP/single_firstprivate_codegen.cpp create mode 100644 test/OpenMP/single_private_codegen.cpp create mode 100644 test/OpenMP/task_codegen.cpp create mode 100644 test/OpenMP/task_firstprivate_codegen.cpp create mode 100644 test/OpenMP/task_if_codegen.cpp create mode 100644 test/OpenMP/task_private_codegen.cpp create mode 100644 test/OpenMP/taskwait_codegen.cpp create mode 100644 test/OpenMP/taskyield_codegen.cpp create mode 100644 test/PCH/Inputs/modules/Foo.h create mode 100644 test/PCH/Inputs/modules/module.modulemap create mode 100644 test/PCH/chain-typo-corrections.cpp create mode 100644 test/PCH/emit-pth.c create mode 100644 test/PCH/module-hash-difference.m create mode 100644 test/Parser/annotation-token-in-lexed-body.cpp create mode 100644 test/Parser/extra-semi.cpp create mode 100644 test/Parser/ms-seh.c create mode 100644 test/Parser/no-gnu-inline-asm.c create mode 100644 test/Parser/opencl-atomics-cl20.cl create mode 100644 test/Preprocessor/annotate_in_macro_arg.c create mode 100644 test/Preprocessor/pr19649-signed-wchar_t.c create mode 100644 test/Preprocessor/pr19649-unsigned-wchar_t.c create mode 100644 test/Preprocessor/pragma_ps4.c create mode 100644 test/Profile/Inputs/cxx-rangefor.proftext create mode 100644 test/Profile/c-generate.c create mode 100644 test/Profile/cxx-rangefor.cpp create mode 100644 test/Profile/cxx-virtual-destructor-calls.cpp create mode 100644 test/Profile/profile-does-not-exist.c create mode 100644 test/Sema/align-systemz.c create mode 100644 test/Sema/attr-availability-android.c create mode 100644 test/Sema/attr-availability-app-extensions.c create mode 100644 test/Sema/attr-flag-enum.c create mode 100644 test/Sema/attr-naked.cpp create mode 100644 test/Sema/builtins-ppc.c create mode 100644 test/Sema/builtins.cl create mode 100644 test/Sema/crash-invalid-builtin.c create mode 100644 test/Sema/format-strings-freebsd.c create mode 100644 test/Sema/i386-linux-android.c create mode 100644 test/Sema/integer-overflow.c create mode 100644 test/Sema/invalid-assignment-constant-address-space.c rename test/{SemaCXX => Sema}/pr9812.c (94%) create mode 100644 test/Sema/pragma-section-invalid.c create mode 100644 test/Sema/warn-documentation-unknown-command.cpp create mode 100644 test/Sema/warn-shift-negative.c create mode 100644 test/Sema/x86_64-linux-android.c create mode 100644 test/SemaCUDA/asm-constraints-device.cu create mode 100644 test/SemaCUDA/asm-constraints-mixed.cu create mode 100644 test/SemaCUDA/cuda-builtin-vars.cu create mode 100644 test/SemaCUDA/function-target-disabled-check.cu create mode 100644 test/SemaCUDA/function-target-hd.cu create mode 100644 test/SemaCXX/PR21679.cpp create mode 100644 test/SemaCXX/PR23334.cpp create mode 100644 test/SemaCXX/accessible-base.cpp create mode 100644 test/SemaCXX/attr-flag-enum-reject.cpp create mode 100644 test/SemaCXX/attr-no-sanitize.cpp create mode 100644 test/SemaCXX/cxx11-call-to-deleted-constructor.cpp create mode 100644 test/SemaCXX/delete-mismatch.h create mode 100644 test/SemaCXX/dllexport-pr22591.cpp create mode 100644 test/SemaCXX/err_reference_bind_drops_quals.cpp create mode 100644 test/SemaCXX/err_typecheck_assign_const.cpp create mode 100644 test/SemaCXX/err_typecheck_assign_const_filecheck.cpp create mode 100644 test/SemaCXX/exceptions-seh.cpp create mode 100644 test/SemaCXX/format-strings-0x-nopedantic.cpp create mode 100644 test/SemaCXX/generalized-deprecated.cpp create mode 100644 test/SemaCXX/integer-overflow.cpp create mode 100644 test/SemaCXX/ms-novtable.cpp create mode 100644 test/SemaCXX/ms_mutable_reference_member.cpp create mode 100644 test/SemaCXX/typo-correction-cxx11.cpp create mode 100644 test/SemaCXX/warn-pessmizing-move.cpp create mode 100644 test/SemaCXX/warn-range-loop-analysis.cpp create mode 100644 test/SemaCXX/warn-redundant-move.cpp create mode 100644 test/SemaObjC/circular-container.m create mode 100644 test/SemaObjC/format-ostrace-warning.m create mode 100644 test/SemaObjC/multiple-method-names.m create mode 100644 test/SemaObjC/multiple-property-deprecated-decl.m create mode 100644 test/SemaObjC/objc-independent-class-attribute.m create mode 100644 test/SemaObjC/undef-arg-super-method-call.m delete mode 100644 test/SemaObjC/weak-receiver-warn.m create mode 100644 test/SemaOpenCL/extension-fp64-cl1.1.cl create mode 100644 test/SemaOpenCL/optional-core-fp64-cl1.2.cl create mode 100644 test/SemaOpenCL/optional-core-fp64-cl2.0.cl create mode 100644 test/SemaTemplate/ext_ms_template_spec.cpp create mode 100644 test/VFS/Inputs/UsesFoo.framework/Headers/UsesFoo.h create mode 100644 test/VFS/Inputs/UsesFoo.framework/Modules/module.modulemap create mode 100644 tools/clang-format/fuzzer/CMakeLists.txt create mode 100644 tools/clang-format/fuzzer/ClangFormatFuzzer.cpp create mode 100644 tools/clang-fuzzer/CMakeLists.txt create mode 100644 tools/clang-fuzzer/ClangFuzzer.cpp create mode 100644 unittests/Rewrite/CMakeLists.txt create mode 100644 unittests/Rewrite/Makefile create mode 100644 unittests/Rewrite/RewriteBufferTest.cpp create mode 100644 unittests/StaticAnalyzer/AnalyzerOptionsTest.cpp create mode 100644 unittests/StaticAnalyzer/CMakeLists.txt create mode 100644 unittests/StaticAnalyzer/Makefile create mode 100644 utils/check_cfc/check_cfc.cfg create mode 100755 utils/check_cfc/check_cfc.py create mode 100755 utils/check_cfc/obj_diff.py create mode 100644 utils/check_cfc/setup.py create mode 100755 utils/check_cfc/test_check_cfc.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 75b80757038..4a8d3339df7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -402,6 +402,7 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) FILES_MATCHING PATTERN "CMakeFiles" EXCLUDE PATTERN "*.inc" + PATTERN "*.h" ) endif() @@ -440,6 +441,11 @@ if(CLANG_ENABLE_STATIC_ANALYZER) add_definitions(-DCLANG_ENABLE_STATIC_ANALYZER) endif() +set(OPENMP_DEFAULT_LIB "" CACHE STRING "OpenMP library used by default for -fopenmp.") +if(OPENMP_DEFAULT_LIB) + add_definitions(-DOPENMP_DEFAULT_LIB=${OPENMP_DEFAULT_LIB}) +endif() + # Clang version information set(CLANG_EXECUTABLE_VERSION "${CLANG_VERSION_MAJOR}.${CLANG_VERSION_MINOR}" CACHE STRING diff --git a/CODE_OWNERS.TXT b/CODE_OWNERS.TXT index b58014fee1a..905303fe11c 100644 --- a/CODE_OWNERS.TXT +++ b/CODE_OWNERS.TXT @@ -12,6 +12,10 @@ N: Aaron Ballman E: aaron@aaronballman.com D: Clang attributes +N: Alexey Bataev +E: a.bataev@hotmail.com +D: OpenMP support + N: Chandler Carruth E: chandlerc@gmail.com E: chandlerc@google.com @@ -23,7 +27,11 @@ D: Debug Information, autotools/configure/make build, inline assembly N: Doug Gregor E: dgregor@apple.com -D: All parts of Clang not covered by someone else +D: Emeritus owner + +N: Reid Kleckner +E: rnk@google.com +D: Microsoft C++ ABI compatibility and general Windows support N: Anton Korobeynikov E: anton@korobeynikov.info @@ -43,4 +51,4 @@ D: Compiler driver N: Richard Smith E: richard@metafoo.co.uk -D: Clang Semantic Analysis (tools/clang/lib/Sema/* tools/clang/include/clang/Sema/*) +D: All parts of Clang not covered by someone else diff --git a/LICENSE.TXT b/LICENSE.TXT index 3b1153db44e..fc4afae584b 100644 --- a/LICENSE.TXT +++ b/LICENSE.TXT @@ -4,7 +4,7 @@ LLVM Release License University of Illinois/NCSA Open Source License -Copyright (c) 2007-2014 University of Illinois at Urbana-Champaign. +Copyright (c) 2007-2015 University of Illinois at Urbana-Champaign. All rights reserved. Developed by: diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py index 5792effea59..f5caca8572c 100644 --- a/bindings/python/clang/cindex.py +++ b/bindings/python/clang/cindex.py @@ -1476,6 +1476,18 @@ def get_tokens(self): """ return TokenGroup.get_tokens(self._tu, self.extent) + def get_field_offsetof(self): + """Returns the offsetof the FIELD_DECL pointed by this Cursor.""" + return conf.lib.clang_Cursor_getOffsetOfField(self) + + def is_anonymous(self): + """ + Check if the record is anonymous. + """ + if self.kind == CursorKind.FIELD_DECL: + return self.type.get_declaration().is_anonymous() + return conf.lib.clang_Cursor_isAnonymous(self) + def is_bitfield(self): """ Check if the field is a bitfield. @@ -1884,6 +1896,21 @@ def get_ref_qualifier(self): return RefQualifierKind.from_id( conf.lib.clang_Type_getCXXRefQualifier(self)) + def get_fields(self): + """Return an iterator for accessing the fields of this type.""" + + def visitor(field, children): + assert field != conf.lib.clang_getNullCursor() + + # Create reference to TU so it isn't GC'd before Cursor. + field._tu = self._tu + fields.append(field) + return 1 # continue + fields = [] + conf.lib.clang_Type_visitFields(self, + callbacks['fields_visit'](visitor), fields) + return iter(fields) + @property def spelling(self): """Retrieve the spelling of this Type.""" @@ -2780,6 +2807,7 @@ def cursor(self): callbacks['translation_unit_includes'] = CFUNCTYPE(None, c_object_p, POINTER(SourceLocation), c_uint, py_object) callbacks['cursor_visit'] = CFUNCTYPE(c_int, Cursor, Cursor, py_object) +callbacks['fields_visit'] = CFUNCTYPE(c_int, Cursor, py_object) # Functions strictly alphabetical order. functionList = [ @@ -3367,6 +3395,10 @@ def cursor(self): [Cursor, c_uint], c_ulonglong), + ("clang_Cursor_isAnonymous", + [Cursor], + bool), + ("clang_Cursor_isBitField", [Cursor], bool), @@ -3381,6 +3413,10 @@ def cursor(self): _CXString, _CXString.from_result), + ("clang_Cursor_getOffsetOfField", + [Cursor], + c_longlong), + ("clang_Type_getAlignOf", [Type], c_longlong), @@ -3401,6 +3437,10 @@ def cursor(self): ("clang_Type_getCXXRefQualifier", [Type], c_uint), + + ("clang_Type_visitFields", + [Type, callbacks['fields_visit'], py_object], + c_uint), ] class LibclangError(Exception): diff --git a/bindings/python/tests/cindex/test_type.py b/bindings/python/tests/cindex/test_type.py index a02c06fe5a1..f3dadf999bd 100644 --- a/bindings/python/tests/cindex/test_type.py +++ b/bindings/python/tests/cindex/test_type.py @@ -363,6 +363,7 @@ def test_offset(): """Ensure Cursor.get_record_field_offset works in anonymous records""" source=""" struct Test { + struct {int a;} typeanon; struct { int bariton; union { @@ -371,15 +372,23 @@ def test_offset(): }; int bar; };""" - tries=[(['-target','i386-linux-gnu'],(4,16,0,32,64)), - (['-target','nvptx64-unknown-unknown'],(8,24,0,32,64)), - (['-target','i386-pc-win32'],(8,16,0,32,64)), - (['-target','msp430-none-none'],(2,14,0,32,64))] + tries=[(['-target','i386-linux-gnu'],(4,16,0,32,64,96)), + (['-target','nvptx64-unknown-unknown'],(8,24,0,32,64,96)), + (['-target','i386-pc-win32'],(8,16,0,32,64,96)), + (['-target','msp430-none-none'],(2,14,0,32,64,96))] for flags, values in tries: - align,total,bariton,foo,bar = values + align,total,f1,bariton,foo,bar = values tu = get_tu(source) teststruct = get_cursor(tu, 'Test') - fields = list(teststruct.get_children()) + children = list(teststruct.get_children()) + fields = list(teststruct.type.get_fields()) + assert children[0].kind == CursorKind.STRUCT_DECL + assert children[0].spelling != "typeanon" + assert children[1].spelling == "typeanon" + assert fields[0].kind == CursorKind.FIELD_DECL + assert fields[1].kind == CursorKind.FIELD_DECL + assert fields[1].is_anonymous() + assert teststruct.type.get_offset("typeanon") == f1 assert teststruct.type.get_offset("bariton") == bariton assert teststruct.type.get_offset("foo") == foo assert teststruct.type.get_offset("bar") == bar diff --git a/docs/AddressSanitizer.rst b/docs/AddressSanitizer.rst index cbdd7c65e84..617543334d0 100644 --- a/docs/AddressSanitizer.rst +++ b/docs/AddressSanitizer.rst @@ -23,8 +23,7 @@ Typical slowdown introduced by AddressSanitizer is **2x**. How to build ============ -Follow the `clang build instructions <../get_started.html>`_. CMake build is -supported. +Build LLVM/Clang with `CMake `_. Usage ===== diff --git a/docs/AutomaticReferenceCounting.rst b/docs/AutomaticReferenceCounting.rst index 1457b6082d1..2faed237916 100644 --- a/docs/AutomaticReferenceCounting.rst +++ b/docs/AutomaticReferenceCounting.rst @@ -594,7 +594,9 @@ retainable pointer type ` and it is: * a message send, and the declared method either has the ``cf_returns_not_retained`` attribute or it has neither the ``cf_returns_retained`` attribute nor a :ref:`selector family - ` that implies a retained result. + ` that implies a retained result, or +* :when-revised:`[beginning LLVM 3.6]` :revision:`a load from a` ``const`` + :revision:`non-system global variable.` An expression is :arc-term:`known retained` if it is an rvalue of :ref:`C retainable pointer type ` and it is: @@ -631,6 +633,12 @@ retain-agnostic, the conversion is treated as a ``__bridge`` cast. to an ObjC-typed local, and then calling ``CFRelease`` when done --- are a bit too likely to be accidentally accepted, leading to mysterious behavior. + For loads from ``const`` global variables of :ref:`C retainable pointer type + `, it is reasonable to assume that global system + constants were initialitzed with true constants (e.g. string literals), but + user constants might have been initialized with something dynamically + allocated, using a global initializer. + .. _arc.objects.restrictions.conversion-exception-contextual: Conversion from retainable object pointer type in certain contexts diff --git a/docs/ClangFormatStyleOptions.rst b/docs/ClangFormatStyleOptions.rst index ce6fae19c09..c06a8c76ecd 100644 --- a/docs/ClangFormatStyleOptions.rst +++ b/docs/ClangFormatStyleOptions.rst @@ -155,10 +155,23 @@ the configuration (without a prefix: ``Auto``). This applies to round brackets (parentheses), angle brackets and square brackets. This will result in formattings like - \code - someLongFunction(argument1, - argument2); - \endcode + + .. code-block:: c++ + + someLongFunction(argument1, + argument2); + +**AlignConsecutiveAssignments** (``bool``) + If ``true``, aligns consecutive assignments. + + This will align the assignment operators of consecutive lines. This + will result in formattings like + + .. code-block:: c++ + + int aaaa = 12; + int b = 23; + int ccc = 23; **AlignEscapedNewlinesLeft** (``bool``) If ``true``, aligns escaped newlines as far left as possible. @@ -330,10 +343,11 @@ the configuration (without a prefix: ``Auto``). instead of as function calls. These are expected to be macros of the form: - \code - FOREACH(, ...) - - \endcode + + .. code-block:: c++ + + FOREACH(, ...) + For example: BOOST_FOREACH. diff --git a/docs/ControlFlowIntegrity.rst b/docs/ControlFlowIntegrity.rst new file mode 100644 index 00000000000..915385b7b19 --- /dev/null +++ b/docs/ControlFlowIntegrity.rst @@ -0,0 +1,145 @@ +====================== +Control Flow Integrity +====================== + +.. toctree:: + :hidden: + + ControlFlowIntegrityDesign + +.. contents:: + :local: + +Introduction +============ + +Clang includes an implementation of a number of control flow integrity (CFI) +schemes, which are designed to abort the program upon detecting certain forms +of undefined behavior that can potentially allow attackers to subvert the +program's control flow. These schemes have been optimized for performance, +allowing developers to enable them in release builds. + +To enable Clang's available CFI schemes, use the flag ``-fsanitize=cfi``. +As currently implemented, CFI relies on link-time optimization (LTO); the CFI +schemes imply ``-flto``, and the linker used must support LTO, for example +via the `gold plugin`_. To allow the checks to be implemented efficiently, +the program must be structured such that certain object files are compiled +with CFI enabled, and are statically linked into the program. This may +preclude the use of shared libraries in some cases. + +Clang currently implements forward-edge CFI for member function calls and +bad cast checking. More schemes are under development. + +.. _gold plugin: http://llvm.org/docs/GoldPlugin.html + +Forward-Edge CFI for Virtual Calls +---------------------------------- + +This scheme checks that virtual calls take place using a vptr of the correct +dynamic type; that is, the dynamic type of the called object must be a +derived class of the static type of the object used to make the call. +This CFI scheme can be enabled on its own using ``-fsanitize=cfi-vcall``. + +For this scheme to work, all translation units containing the definition +of a virtual member function (whether inline or not) must be compiled +with ``-fsanitize=cfi-vcall`` enabled and be statically linked into the +program. Classes in the C++ standard library (under namespace ``std``) are +exempted from checking, and therefore programs may be linked against a +pre-built standard library, but this may change in the future. + +Performance +~~~~~~~~~~~ + +A performance overhead of less than 1% has been measured by running the +Dromaeo benchmark suite against an instrumented version of the Chromium +web browser. Another good performance benchmark for this mechanism is the +virtual-call-heavy SPEC 2006 xalancbmk. + +Note that this scheme has not yet been optimized for binary size; an increase +of up to 15% has been observed for Chromium. + +Bad Cast Checking +----------------- + +This scheme checks that pointer casts are made to an object of the correct +dynamic type; that is, the dynamic type of the object must be a derived class +of the pointee type of the cast. The checks are currently only introduced +where the class being casted to is a polymorphic class. + +Bad casts are not in themselves control flow integrity violations, but they +can also create security vulnerabilities, and the implementation uses many +of the same mechanisms. + +There are two types of bad cast that may be forbidden: bad casts +from a base class to a derived class (which can be checked with +``-fsanitize=cfi-derived-cast``), and bad casts from a pointer of +type ``void*`` or another unrelated type (which can be checked with +``-fsanitize=cfi-unrelated-cast``). + +The difference between these two types of casts is that the first is defined +by the C++ standard to produce an undefined value, while the second is not +in itself undefined behavior (it is well defined to cast the pointer back +to its original type). + +If a program as a matter of policy forbids the second type of cast, that +restriction can normally be enforced. However it may in some cases be necessary +for a function to perform a forbidden cast to conform with an external API +(e.g. the ``allocate`` member function of a standard library allocator). Such +functions may be blacklisted using a :doc:`SanitizerSpecialCaseList`. + +For this scheme to work, all translation units containing the definition +of a virtual member function (whether inline or not) must be compiled with +``-fsanitize=cfi-derived-cast`` or ``-fsanitize=cfi-unrelated-cast`` enabled +and be statically linked into the program. Classes in the C++ standard library +(under namespace ``std``) are exempted from checking, and therefore programs +may be linked against a pre-built standard library, but this may change in +the future. + +Non-Virtual Member Function Call Checking +----------------------------------------- + +This scheme checks that non-virtual calls take place using an object of +the correct dynamic type; that is, the dynamic type of the called object +must be a derived class of the static type of the object used to make the +call. The checks are currently only introduced where the object is of a +polymorphic class type. This CFI scheme can be enabled on its own using +``-fsanitize=cfi-nvcall``. + +For this scheme to work, all translation units containing the definition +of a virtual member function (whether inline or not) must be compiled +with ``-fsanitize=cfi-nvcall`` enabled and be statically linked into the +program. Classes in the C++ standard library (under namespace ``std``) are +exempted from checking, and therefore programs may be linked against a +pre-built standard library, but this may change in the future. + +.. _cfi-strictness: + +Strictness +~~~~~~~~~~ + +If a class has a single non-virtual base and does not introduce or override +virtual member functions or fields other than an implicitly defined virtual +destructor, it will have the same layout and virtual function semantics as +its base. By default, casts to such classes are checked as if they were made +to the least derived such class. + +Casting an instance of a base class to such a derived class is technically +undefined behavior, but it is a relatively common hack for introducing +member functions on class instances with specific properties that works under +most compilers and should not have security implications, so we allow it by +default. It can be disabled with ``-fsanitize=cfi-cast-strict``. + +Design +------ + +Please refer to the :doc:`design document`. + +Publications +------------ + +`Control-Flow Integrity: Principles, Implementations, and Applications `_. +Martin Abadi, Mihai Budiu, Úlfar Erlingsson, Jay Ligatti. + +`Enforcing Forward-Edge Control-Flow Integrity in GCC & LLVM `_. +Caroline Tice, Tom Roeder, Peter Collingbourne, Stephen Checkoway, +Úlfar Erlingsson, Luis Lozano, Geoff Pike. diff --git a/docs/ControlFlowIntegrityDesign.rst b/docs/ControlFlowIntegrityDesign.rst new file mode 100644 index 00000000000..89aa038d003 --- /dev/null +++ b/docs/ControlFlowIntegrityDesign.rst @@ -0,0 +1,275 @@ +=========================================== +Control Flow Integrity Design Documentation +=========================================== + +This page documents the design of the :doc:`ControlFlowIntegrity` schemes +supported by Clang. + +Forward-Edge CFI for Virtual Calls +================================== + +This scheme works by allocating, for each static type used to make a virtual +call, a region of read-only storage in the object file holding a bit vector +that maps onto to the region of storage used for those virtual tables. Each +set bit in the bit vector corresponds to the `address point`_ for a virtual +table compatible with the static type for which the bit vector is being built. + +For example, consider the following three C++ classes: + +.. code-block:: c++ + + struct A { + virtual void f1(); + virtual void f2(); + virtual void f3(); + }; + + struct B : A { + virtual void f1(); + virtual void f2(); + virtual void f3(); + }; + + struct C : A { + virtual void f1(); + virtual void f2(); + virtual void f3(); + }; + +The scheme will cause the virtual tables for A, B and C to be laid out +consecutively: + +.. csv-table:: Virtual Table Layout for A, B, C + :header: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 + + A::offset-to-top, &A::rtti, &A::f1, &A::f2, &A::f3, B::offset-to-top, &B::rtti, &B::f1, &B::f2, &B::f3, C::offset-to-top, &C::rtti, &C::f1, &C::f2, &C::f3 + +The bit vector for static types A, B and C will look like this: + +.. csv-table:: Bit Vectors for A, B, C + :header: Class, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 + + A, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0 + B, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 + C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 + +Bit vectors are represented in the object file as byte arrays. By loading +from indexed offsets into the byte array and applying a mask, a program can +test bits from the bit set with a relatively short instruction sequence. Bit +vectors may overlap so long as they use different bits. For the full details, +see the `ByteArrayBuilder`_ class. + +In this case, assuming A is laid out at offset 0 in bit 0, B at offset 0 in +bit 1 and C at offset 0 in bit 2, the byte array would look like this: + +.. code-block:: c++ + + char bits[] = { 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 5, 0, 0 }; + +To emit a virtual call, the compiler will assemble code that checks that +the object's virtual table pointer is in-bounds and aligned and that the +relevant bit is set in the bit vector. + +For example on x86 a typical virtual call may look like this: + +.. code-block:: none + + ca7fbb: 48 8b 0f mov (%rdi),%rcx + ca7fbe: 48 8d 15 c3 42 fb 07 lea 0x7fb42c3(%rip),%rdx + ca7fc5: 48 89 c8 mov %rcx,%rax + ca7fc8: 48 29 d0 sub %rdx,%rax + ca7fcb: 48 c1 c0 3d rol $0x3d,%rax + ca7fcf: 48 3d 7f 01 00 00 cmp $0x17f,%rax + ca7fd5: 0f 87 36 05 00 00 ja ca8511 + ca7fdb: 48 8d 15 c0 0b f7 06 lea 0x6f70bc0(%rip),%rdx + ca7fe2: f6 04 10 10 testb $0x10,(%rax,%rdx,1) + ca7fe6: 0f 84 25 05 00 00 je ca8511 + ca7fec: ff 91 98 00 00 00 callq *0x98(%rcx) + [...] + ca8511: 0f 0b ud2 + +The compiler relies on co-operation from the linker in order to assemble +the bit vectors for the whole program. It currently does this using LLVM's +`bit sets`_ mechanism together with link-time optimization. + +.. _address point: https://mentorembedded.github.io/cxx-abi/abi.html#vtable-general +.. _bit sets: http://llvm.org/docs/BitSets.html +.. _ByteArrayBuilder: http://llvm.org/docs/doxygen/html/structllvm_1_1ByteArrayBuilder.html + +Optimizations +------------- + +The scheme as described above is the fully general variant of the scheme. +Most of the time we are able to apply one or more of the following +optimizations to improve binary size or performance. + +In fact, if you try the above example with the current version of the +compiler, you will probably find that it will not use the described virtual +table layout or machine instructions. Some of the optimizations we are about +to introduce cause the compiler to use a different layout or a different +sequence of machine instructions. + +Stripping Leading/Trailing Zeros in Bit Vectors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If a bit vector contains leading or trailing zeros, we can strip them from +the vector. The compiler will emit code to check if the pointer is in range +of the region covered by ones, and perform the bit vector check using a +truncated version of the bit vector. For example, the bit vectors for our +example class hierarchy will be emitted like this: + +.. csv-table:: Bit Vectors for A, B, C + :header: Class, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 + + A, , , 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, , + B, , , , , , , , 1, , , , , , , + C, , , , , , , , , , , , , 1, , + +Short Inline Bit Vectors +~~~~~~~~~~~~~~~~~~~~~~~~ + +If the vector is sufficiently short, we can represent it as an inline constant +on x86. This saves us a few instructions when reading the correct element +of the bit vector. + +If the bit vector fits in 32 bits, the code looks like this: + +.. code-block:: none + + dc2: 48 8b 03 mov (%rbx),%rax + dc5: 48 8d 15 14 1e 00 00 lea 0x1e14(%rip),%rdx + dcc: 48 89 c1 mov %rax,%rcx + dcf: 48 29 d1 sub %rdx,%rcx + dd2: 48 c1 c1 3d rol $0x3d,%rcx + dd6: 48 83 f9 03 cmp $0x3,%rcx + dda: 77 2f ja e0b + ddc: ba 09 00 00 00 mov $0x9,%edx + de1: 0f a3 ca bt %ecx,%edx + de4: 73 25 jae e0b + de6: 48 89 df mov %rbx,%rdi + de9: ff 10 callq *(%rax) + [...] + e0b: 0f 0b ud2 + +Or if the bit vector fits in 64 bits: + +.. code-block:: none + + 11a6: 48 8b 03 mov (%rbx),%rax + 11a9: 48 8d 15 d0 28 00 00 lea 0x28d0(%rip),%rdx + 11b0: 48 89 c1 mov %rax,%rcx + 11b3: 48 29 d1 sub %rdx,%rcx + 11b6: 48 c1 c1 3d rol $0x3d,%rcx + 11ba: 48 83 f9 2a cmp $0x2a,%rcx + 11be: 77 35 ja 11f5 + 11c0: 48 ba 09 00 00 00 00 movabs $0x40000000009,%rdx + 11c7: 04 00 00 + 11ca: 48 0f a3 ca bt %rcx,%rdx + 11ce: 73 25 jae 11f5 + 11d0: 48 89 df mov %rbx,%rdi + 11d3: ff 10 callq *(%rax) + [...] + 11f5: 0f 0b ud2 + +If the bit vector consists of a single bit, there is only one possible +virtual table, and the check can consist of a single equality comparison: + +.. code-block:: none + + 9a2: 48 8b 03 mov (%rbx),%rax + 9a5: 48 8d 0d a4 13 00 00 lea 0x13a4(%rip),%rcx + 9ac: 48 39 c8 cmp %rcx,%rax + 9af: 75 25 jne 9d6 + 9b1: 48 89 df mov %rbx,%rdi + 9b4: ff 10 callq *(%rax) + [...] + 9d6: 0f 0b ud2 + +Virtual Table Layout +~~~~~~~~~~~~~~~~~~~~ + +The compiler lays out classes of disjoint hierarchies in separate regions +of the object file. At worst, bit vectors in disjoint hierarchies only +need to cover their disjoint hierarchy. But the closer that classes in +sub-hierarchies are laid out to each other, the smaller the bit vectors for +those sub-hierarchies need to be (see "Stripping Leading/Trailing Zeros in Bit +Vectors" above). The `GlobalLayoutBuilder`_ class is responsible for laying +out the globals efficiently to minimize the sizes of the underlying bitsets. + +.. _GlobalLayoutBuilder: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO/LowerBitSets.h?view=markup + +Alignment +~~~~~~~~~ + +If all gaps between address points in a particular bit vector are multiples +of powers of 2, the compiler can compress the bit vector by strengthening +the alignment requirements of the virtual table pointer. For example, given +this class hierarchy: + +.. code-block:: c++ + + struct A { + virtual void f1(); + virtual void f2(); + }; + + struct B : A { + virtual void f1(); + virtual void f2(); + virtual void f3(); + virtual void f4(); + virtual void f5(); + virtual void f6(); + }; + + struct C : A { + virtual void f1(); + virtual void f2(); + }; + +The virtual tables will be laid out like this: + +.. csv-table:: Virtual Table Layout for A, B, C + :header: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + + A::offset-to-top, &A::rtti, &A::f1, &A::f2, B::offset-to-top, &B::rtti, &B::f1, &B::f2, &B::f3, &B::f4, &B::f5, &B::f6, C::offset-to-top, &C::rtti, &C::f1, &C::f2 + +Notice that each address point for A is separated by 4 words. This lets us +emit a compressed bit vector for A that looks like this: + +.. csv-table:: + :header: 2, 6, 10, 14 + + 1, 1, 0, 1 + +At call sites, the compiler will strengthen the alignment requirements by +using a different rotate count. For example, on a 64-bit machine where the +address points are 4-word aligned (as in A from our example), the ``rol`` +instruction may look like this: + +.. code-block:: none + + dd2: 48 c1 c1 3b rol $0x3b,%rcx + +Padding to Powers of 2 +~~~~~~~~~~~~~~~~~~~~~~ + +Of course, this alignment scheme works best if the address points are +in fact aligned correctly. To make this more likely to happen, we insert +padding between virtual tables that in many cases aligns address points to +a power of 2. Specifically, our padding aligns virtual tables to the next +highest power of 2 bytes; because address points for specific base classes +normally appear at fixed offsets within the virtual table, this normally +has the effect of aligning the address points as well. + +This scheme introduces tradeoffs between decreased space overhead for +instructions and bit vectors and increased overhead in the form of padding. We +therefore limit the amount of padding so that we align to no more than 128 +bytes. This number was found experimentally to provide a good tradeoff. + +Eliminating Bit Vector Checks for All-Ones Bit Vectors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If the bit vector is all ones, the bit vector check is redundant; we simply +need to check that the address is in range and well aligned. This is more +likely to occur if the virtual tables are padded. diff --git a/docs/InternalsManual.rst b/docs/InternalsManual.rst index 502cae44b33..7f2a8fafccc 100644 --- a/docs/InternalsManual.rst +++ b/docs/InternalsManual.rst @@ -1323,11 +1323,13 @@ range of iterators over declarations of "``f``". ``DeclContext`` manages multiply-defined declaration contexts internally. The function ``DeclContext::getPrimaryContext`` retrieves the "primary" context for a given ``DeclContext`` instance, which is the ``DeclContext`` responsible for -maintaining the lookup table used for the semantics-centric view. Given the -primary context, one can follow the chain of ``DeclContext`` nodes that define -additional declarations via ``DeclContext::getNextContext``. Note that these -functions are used internally within the lookup and insertion methods of the -``DeclContext``, so the vast majority of clients can ignore them. +maintaining the lookup table used for the semantics-centric view. Given a +DeclContext, one can obtain the set of declaration contexts that are semanticaly +connected to this declaration context, in source order, including this context +(which will be the only result, for non-namespace contexts) via +``DeclContext::collectAllContexts``. Note that these functions are used +internally within the lookup and insertion methods of the ``DeclContext``, so +the vast majority of clients can ignore them. .. _CFG: @@ -1619,192 +1621,304 @@ How to change Clang How to add an attribute ----------------------- +Attributes are a form of metadata that can be attached to a program construct, +allowing the programmer to pass semantic information along to the compiler for +various uses. For example, attributes may be used to alter the code generation +for a program construct, or to provide extra semantic information for static +analysis. This document explains how to add a custom attribute to Clang. +Documentation on existing attributes can be found `here +`_. Attribute Basics ^^^^^^^^^^^^^^^^ - -Attributes in clang come in two forms: parsed form, and semantic form. Both -forms are represented via a tablegen definition of the attribute, specified in -Attr.td. +Attributes in Clang are handled in three stages: parsing into a parsed attribute +representation, conversion from a parsed attribute into a semantic attribute, +and then the semantic handling of the attribute. + +Parsing of the attribute is determined by the various syntactic forms attributes +can take, such as GNU, C++11, and Microsoft style attributes, as well as other +information provided by the table definition of the attribute. Ultimately, the +parsed representation of an attribute object is an ``AttributeList`` object. +These parsed attributes chain together as a list of parsed attributes attached +to a declarator or declaration specifier. The parsing of attributes is handled +automatically by Clang, except for attributes spelled as keywords. When +implementing a keyword attribute, the parsing of the keyword and creation of the +``AttributeList`` object must be done manually. + +Eventually, ``Sema::ProcessDeclAttributeList()`` is called with a ``Decl`` and +an ``AttributeList``, at which point the parsed attribute can be transformed +into a semantic attribute. The process by which a parsed attribute is converted +into a semantic attribute depends on the attribute definition and semantic +requirements of the attribute. The end result, however, is that the semantic +attribute object is attached to the ``Decl`` object, and can be obtained by a +call to ``Decl::getAttr()``. + +The structure of the semantic attribute is also governed by the attribute +definition given in Attr.td. This definition is used to automatically generate +functionality used for the implementation of the attribute, such as a class +derived from ``clang::Attr``, information for the parser to use, automated +semantic checking for some attributes, etc. ``include/clang/Basic/Attr.td`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The first step to adding a new attribute to Clang is to add its definition to +`include/clang/Basic/Attr.td +`_. +This tablegen definition must derive from the ``Attr`` (tablegen, not +semantic) type, or one of its derivatives. Most attributes will derive from the +``InheritableAttr`` type, which specifies that the attribute can be inherited by +later redeclarations of the ``Decl`` it is associated with. +``InheritableParamAttr`` is similar to ``InheritableAttr``, except that the +attribute is written on a parameter instead of a declaration. If the attribute +is intended to apply to a type instead of a declaration, such an attribute +should derive from ``TypeAttr``, and will generally not be given an AST +representation. (Note that this document does not cover the creation of type +attributes.) An attribute that inherits from ``IgnoredAttr`` is parsed, but will +generate an ignored attribute diagnostic when used, which may be useful when an +attribute is supported by another vendor but not supported by clang. + +The definition will specify several key pieces of information, such as the +semantic name of the attribute, the spellings the attribute supports, the +arguments the attribute expects, and more. Most members of the ``Attr`` tablegen +type do not require definitions in the derived definition as the default +suffice. However, every attribute must specify at least a spelling list, a +subject list, and a documentation list. + +Spellings +~~~~~~~~~ +All attributes are required to specify a spelling list that denotes the ways in +which the attribute can be spelled. For instance, a single semantic attribute +may have a keyword spelling, as well as a C++11 spelling and a GNU spelling. An +empty spelling list is also permissible and may be useful for attributes which +are created implicitly. The following spellings are accepted: + + ============ ================================================================ + Spelling Description + ============ ================================================================ + ``GNU`` Spelled with a GNU-style ``__attribute__((attr))`` syntax and + placement. + ``CXX11`` Spelled with a C++-style ``[[attr]]`` syntax. If the attribute + is meant to be used by Clang, it should set the namespace to + ``"clang"``. + ``Declspec`` Spelled with a Microsoft-style ``__declspec(attr)`` syntax. + ``Keyword`` The attribute is spelled as a keyword, and required custom + parsing. + ``GCC`` Specifies two spellings: the first is a GNU-style spelling, and + the second is a C++-style spelling with the ``gnu`` namespace. + Attributes should only specify this spelling for attributes + supported by GCC. + ``Pragma`` The attribute is spelled as a ``#pragma``, and requires custom + processing within the preprocessor. If the attribute is meant to + be used by Clang, it should set the namespace to ``"clang"``. + Note that this spelling is not used for declaration attributes. + ============ ================================================================ + +Subjects +~~~~~~~~ +Attributes appertain to one or more ``Decl`` subjects. If the attribute attempts +to attach to a subject that is not in the subject list, a diagnostic is issued +automatically. Whether the diagnostic is a warning or an error depends on how +the attribute's ``SubjectList`` is defined, but the default behavior is to warn. +The diagnostics displayed to the user are automatically determined based on the +subjects in the list, but a custom diagnostic parameter can also be specified in +the ``SubjectList``. The diagnostics generated for subject list violations are +either ``diag::warn_attribute_wrong_decl_type`` or +``diag::err_attribute_wrong_decl_type``, and the parameter enumeration is found +in `include/clang/Sema/AttributeList.h +`_ +If a previously unused Decl node is added to the ``SubjectList``, the logic used +to automatically determine the diagnostic parameter in `utils/TableGen/ClangAttrEmitter.cpp +`_ +may need to be updated. + +By default, all subjects in the SubjectList must either be a Decl node defined +in ``DeclNodes.td``, or a statement node defined in ``StmtNodes.td``. However, +more complex subjects can be created by creating a ``SubsetSubject`` object. +Each such object has a base subject which it appertains to (which must be a +Decl or Stmt node, and not a SubsetSubject node), and some custom code which is +called when determining whether an attribute appertains to the subject. For +instance, a ``NonBitField`` SubsetSubject appertains to a ``FieldDecl``, and +tests whether the given FieldDecl is a bit field. When a SubsetSubject is +specified in a SubjectList, a custom diagnostic parameter must also be provided. -First, add your attribute to the `include/clang/Basic/Attr.td -`_ -file. - -Each attribute gets a ``def`` inheriting from ``Attr`` or one of its -subclasses. ``InheritableAttr`` means that the attribute also applies to -subsequent declarations of the same name. ``InheritableParamAttr`` is similar -to ``InheritableAttr``, except that the attribute is written on a parameter -instead of a declaration, type or statement. Attributes inheriting from -``TypeAttr`` are pure type attributes which generally are not given a -representation in the AST. Attributes inheriting from ``TargetSpecificAttr`` -are attributes specific to one or more target architectures. An attribute that -inherits from ``IgnoredAttr`` is parsed, but will generate an ignored attribute -diagnostic when used. The attribute type may be useful when an attribute is -supported by another vendor, but not supported by clang. - -``Spellings`` lists the strings that can appear in ``__attribute__((here))`` or -``[[here]]``. All such strings will be synonymous. Possible ``Spellings`` -are: ``GNU`` (for use with GNU-style __attribute__ spellings), ``Declspec`` -(for use with Microsoft Visual Studio-style __declspec spellings), ``CXX11` -(for use with C++11-style [[foo]] and [[foo::bar]] spellings), and ``Keyword`` -(for use with attributes that are implemented as keywords, like C++11's -``override`` or ``final``). If you want to allow the ``[[]]`` C++11 syntax, you -have to define a list of ``Namespaces``, which will let users write -``[[namespace::spelling]]``. Using the empty string for a namespace will allow -users to write just the spelling with no "``::``". Attributes which g++-4.8 -or later accepts should also have a ``CXX11<"gnu", "spelling">`` spelling. - -``Subjects`` restricts what kinds of AST node to which this attribute can -appertain (roughly, attach). The subjects are specified via a ``SubjectList``, -which specify the list of subjects. Additionally, subject-related diagnostics -can be specified to be warnings or errors, with the default being a warning. -The diagnostics displayed to the user are automatically determined based on -the subjects in the list, but a custom diagnostic parameter can also be -specified in the ``SubjectList``. The diagnostics generated for subject list -violations are either ``diag::warn_attribute_wrong_decl_type`` or -``diag::err_attribute_wrong_decl_type``, and the parameter enumeration is -found in `include/clang/Sema/AttributeList.h -`_ -If you add new Decl nodes to the ``SubjectList``, you may need to update the -logic used to automatically determine the diagnostic parameter in `utils/TableGen/ClangAttrEmitter.cpp -`_. - -Diagnostic checking for attribute subject lists is automated except when +Diagnostic checking for attribute subject lists is automated except when ``HasCustomParsing`` is set to ``1``. -By default, all subjects in the SubjectList must either be a Decl node defined -in ``DeclNodes.td``, or a statement node defined in ``StmtNodes.td``. However, -more complex subjects can be created by creating a ``SubsetSubject`` object. -Each such object has a base subject which it appertains to (which must be a -Decl or Stmt node, and not a SubsetSubject node), and some custom code which is -called when determining whether an attribute appertains to the subject. For -instance, a ``NonBitField`` SubsetSubject appertains to a ``FieldDecl``, and -tests whether the given FieldDecl is a bit field. When a SubsetSubject is -specified in a SubjectList, a custom diagnostic parameter must also be provided. - -``Args`` names the arguments the attribute takes, in order. If ``Args`` is +Documentation +~~~~~~~~~~~~~ +All attributes must have some form of documentation associated with them. +Documentation is table generated on the public web server by a server-side +process that runs daily. Generally, the documentation for an attribute is a +stand-alone definition in `include/clang/Basic/AttrDocs.td +`_ +that is named after the attribute being documented. + +If the attribute is not for public consumption, or is an implicitly-created +attribute that has no visible spelling, the documentation list can specify the +``Undocumented`` object. Otherwise, the attribute should have its documentation +added to AttrDocs.td. + +Documentation derives from the ``Documentation`` tablegen type. All derived +types must specify a documentation category and the actual documentation itself. +Additionally, it can specify a custom heading for the attribute, though a +default heading will be chosen when possible. + +There are four predefined documentation categories: ``DocCatFunction`` for +attributes that appertain to function-like subjects, ``DocCatVariable`` for +attributes that appertain to variable-like subjects, ``DocCatType`` for type +attributes, and ``DocCatStmt`` for statement attributes. A custom documentation +category should be used for groups of attributes with similar functionality. +Custom categories are good for providing overview information for the attributes +grouped under it. For instance, the consumed annotation attributes define a +custom category, ``DocCatConsumed``, that explains what consumed annotations are +at a high level. + +Documentation content (whether it is for an attribute or a category) is written +using reStructuredText (RST) syntax. + +After writing the documentation for the attribute, it should be locally tested +to ensure that there are no issues generating the documentation on the server. +Local testing requires a fresh build of clang-tblgen. To generate the attribute +documentation, execute the following command:: + + clang-tblgen -gen-attr-docs -I /path/to/clang/include /path/to/clang/include/clang/Basic/Attr.td -o /path/to/clang/docs/AttributeReference.rst + +When testing locally, *do not* commit changes to ``AttributeReference.rst``. +This file is generated by the server automatically, and any changes made to this +file will be overwritten. + +Arguments +~~~~~~~~~ +Attributes may optionally specify a list of arguments that can be passed to the +attribute. Attribute arguments specify both the parsed form and the semantic +form of the attribute. For example, if ``Args`` is ``[StringArgument<"Arg1">, IntArgument<"Arg2">]`` then -``__attribute__((myattribute("Hello", 3)))`` will be a valid use. Attribute -arguments specify both the parsed form and the semantic form of the attribute. -The previous example shows an attribute which requires two attributes while -parsing, and the Attr subclass' constructor for the attribute will require a -string and integer argument. - -Diagnostic checking for argument counts is automated except when -``HasCustomParsing`` is set to ``1``, or when the attribute uses an optional or -variadic argument. Diagnostic checking for argument semantics is not automated. - -If the parsed form of the attribute is more complex, or differs from the -semantic form, the ``HasCustomParsing`` bit can be set to ``1`` for the class, -and the parsing code in `Parser::ParseGNUAttributeArgs -`_ -can be updated for the special case. Note that this only applies to arguments -with a GNU spelling -- attributes with a __declspec spelling currently ignore +``__attribute__((myattribute("Hello", 3)))`` will be a valid use; it requires +two arguments while parsing, and the Attr subclass' constructor for the +semantic attribute will require a string and integer argument. + +All arguments have a name and a flag that specifies whether the argument is +optional. The associated C++ type of the argument is determined by the argument +definition type. If the existing argument types are insufficient, new types can +be created, but it requires modifying `utils/TableGen/ClangAttrEmitter.cpp +`_ +to properly support the type. + +Other Properties +~~~~~~~~~~~~~~~~ +The ``Attr`` definition has other members which control the behavior of the +attribute. Many of them are special-purpose and beyond the scope of this +document, however a few deserve mention. + +If the parsed form of the attribute is more complex, or differs from the +semantic form, the ``HasCustomParsing`` bit can be set to ``1`` for the class, +and the parsing code in `Parser::ParseGNUAttributeArgs() +`_ +can be updated for the special case. Note that this only applies to arguments +with a GNU spelling -- attributes with a __declspec spelling currently ignore this flag and are handled by ``Parser::ParseMicrosoftDeclSpec``. -Custom accessors can be generated for an attribute based on the spelling list -for that attribute. For instance, if an attribute has two different spellings: -'Foo' and 'Bar', accessors can be created: -``[Accessor<"isFoo", [GNU<"Foo">]>, Accessor<"isBar", [GNU<"Bar">]>]`` -These accessors will be generated on the semantic form of the attribute, -accepting no arguments and returning a Boolean. +Note that setting this member to 1 will opt out of common attribute semantic +handling, requiring extra implementation efforts to ensure the attribute +appertains to the appropriate subject, etc. -Attributes which do not require an AST node should set the ``ASTNode`` field to -``0`` to avoid polluting the AST. Note that anything inheriting from -``TypeAttr`` or ``IgnoredAttr`` automatically do not generate an AST node. All -other attributes generate an AST node by default. The AST node is the semantic +If the attribute should not be propagated from from a template declaration to an +instantiation of the template, set the ``Clone`` member to 0. By default, all +attributes will be cloned to template instantiations. + +Attributes that do not require an AST node should set the ``ASTNode`` field to +``0`` to avoid polluting the AST. Note that anything inheriting from +``TypeAttr`` or ``IgnoredAttr`` automatically do not generate an AST node. All +other attributes generate an AST node by default. The AST node is the semantic representation of the attribute. -Attributes which do not require custom semantic handling should set the -``SemaHandler`` field to ``0``. Note that anything inheriting from -``IgnoredAttr`` automatically do not get a semantic handler. All other -attributes are assumed to use a semantic handler by default. Attributes -without a semantic handler are not given a parsed attribute Kind enumeration. - -The ``LangOpts`` field can be used to specify a list of language options -required by the attribute. For instance, all of the CUDA-specific attributes -specify ``[CUDA]`` for the ``LangOpts`` field, and when the CUDA language -option is not enabled, an "attribute ignored" warning diagnostic is emitted. -Since language options are not table generated nodes, new language options must -be created manually and should specify the spelling used by ``LangOptions`` class. - -Target-specific attribute sometimes share a spelling with other attributes in -different targets. For instance, the ARM and MSP430 targets both have an -attribute spelled ``GNU<"interrupt">``, but with different parsing and semantic -requirements. To support this feature, an attribute inheriting from -``TargetSpecificAttribute`` make specify a ``ParseKind`` field. This field -should be the same value between all arguments sharing a spelling, and -corresponds to the parsed attribute's Kind enumeration. This allows attributes -to share a parsed attribute kind, but have distinct semantic attribute classes. -For instance, ``AttributeList::AT_Interrupt`` is the shared parsed attribute -kind, but ARMInterruptAttr and MSP430InterruptAttr are the semantic attributes -generated. - -By default, when declarations are merging attributes, an attribute will not be -duplicated. However, if an attribute can be duplicated during this merging -stage, set ``DuplicatesAllowedWhileMerging`` to ``1``, and the attribute will +The ``LangOpts`` field specifies a list of language options required by the +attribute. For instance, all of the CUDA-specific attributes specify ``[CUDA]`` +for the ``LangOpts`` field, and when the CUDA language option is not enabled, an +"attribute ignored" warning diagnostic is emitted. Since language options are +not table generated nodes, new language options must be created manually and +should specify the spelling used by ``LangOptions`` class. + +Custom accessors can be generated for an attribute based on the spelling list +for that attribute. For instance, if an attribute has two different spellings: +'Foo' and 'Bar', accessors can be created: +``[Accessor<"isFoo", [GNU<"Foo">]>, Accessor<"isBar", [GNU<"Bar">]>]`` +These accessors will be generated on the semantic form of the attribute, +accepting no arguments and returning a ``bool``. + +Attributes that do not require custom semantic handling should set the +``SemaHandler`` field to ``0``. Note that anything inheriting from +``IgnoredAttr`` automatically do not get a semantic handler. All other +attributes are assumed to use a semantic handler by default. Attributes +without a semantic handler are not given a parsed attribute ``Kind`` enumerator. + +Target-specific attributes may share a spelling with other attributes in +different targets. For instance, the ARM and MSP430 targets both have an +attribute spelled ``GNU<"interrupt">``, but with different parsing and semantic +requirements. To support this feature, an attribute inheriting from +``TargetSpecificAttribute`` may specify a ``ParseKind`` field. This field +should be the same value between all arguments sharing a spelling, and +corresponds to the parsed attribute's ``Kind`` enumerator. This allows +attributes to share a parsed attribute kind, but have distinct semantic +attribute classes. For instance, ``AttributeList::AT_Interrupt`` is the shared +parsed attribute kind, but ARMInterruptAttr and MSP430InterruptAttr are the +semantic attributes generated. + +By default, when declarations are merging attributes, an attribute will not be +duplicated. However, if an attribute can be duplicated during this merging +stage, set ``DuplicatesAllowedWhileMerging`` to ``1``, and the attribute will be merged. -By default, attribute arguments are parsed in an evaluated context. If the -arguments for an attribute should be parsed in an unevaluated context (akin to -the way the argument to a ``sizeof`` expression is parsed), you can set +By default, attribute arguments are parsed in an evaluated context. If the +arguments for an attribute should be parsed in an unevaluated context (akin to +the way the argument to a ``sizeof`` expression is parsed), set ``ParseArgumentsAsUnevaluated`` to ``1``. -If additional functionality is desired for the semantic form of the attribute, -the ``AdditionalMembers`` field specifies code to be copied verbatim into the -semantic attribute class object. - -All attributes must have one or more form of documentation, which is provided -in the ``Documentation`` list. Generally, the documentation for an attribute -is a stand-alone definition in `include/clang/Basic/AttrDocs.td -`_ -that is named after the attribute being documented. Each documentation element -is given a ``Category`` (variable, function, or type) and ``Content``. A single -attribute may contain multiple documentation elements for distinct categories. -For instance, an attribute which can appertain to both function and types (such -as a calling convention attribute), should contain two documentation elements. -The ``Content`` for an attribute uses reStructuredText (RST) syntax. - -If an attribute is used internally by the compiler, but is not written by users -(such as attributes with an empty spelling list), it can use the -``Undocumented`` documentation element. +If additional functionality is desired for the semantic form of the attribute, +the ``AdditionalMembers`` field specifies code to be copied verbatim into the +semantic attribute class object, with ``public`` access. Boilerplate ^^^^^^^^^^^ - All semantic processing of declaration attributes happens in `lib/Sema/SemaDeclAttr.cpp -`_, -and generally starts in the ``ProcessDeclAttribute`` function. If your -attribute is a "simple" attribute -- meaning that it requires no custom -semantic processing aside from what is automatically provided for you, you can -add a call to ``handleSimpleAttribute(S, D, Attr);`` to the switch -statement. Otherwise, write a new ``handleYourAttr()`` function, and add that -to the switch statement. - -If your attribute causes extra warnings to fire, define a ``DiagGroup`` in +`_, +and generally starts in the ``ProcessDeclAttribute()`` function. If the +attribute is a "simple" attribute -- meaning that it requires no custom semantic +processing aside from what is automatically provided, add a call to +``handleSimpleAttribute(S, D, Attr);`` to the switch statement. +Otherwise, write a new ``handleYourAttr()`` function, and add that to the switch +statement. Please do not implement handling logic directly in the ``case`` for +the attribute. + +Unless otherwise specified by the attribute definition, common semantic checking +of the parsed attribute is handled automatically. This includes diagnosing +parsed attributes that do not appertain to the given ``Decl``, ensuring the +correct minimum number of arguments are passed, etc. + +If the attribute adds additional warnings, define a ``DiagGroup`` in `include/clang/Basic/DiagnosticGroups.td `_ -named after the attribute's ``Spelling`` with "_"s replaced by "-"s. If you're -only defining one diagnostic, you can skip ``DiagnosticGroups.td`` and use -``InGroup>`` directly in `DiagnosticSemaKinds.td +named after the attribute's ``Spelling`` with "_"s replaced by "-"s. If there +is only a single diagnostic, it is permissible to use ``InGroup>`` +directly in `DiagnosticSemaKinds.td `_ All semantic diagnostics generated for your attribute, including automatically- -generated ones (such as subjects and argument counts), should have a +generated ones (such as subjects and argument counts), should have a corresponding test case. -The meat of your attribute -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Find an appropriate place in Clang to do whatever your attribute needs to do. -Check for the attribute's presence using ``Decl::getAttr()``. - -Update the :doc:`LanguageExtensions` document to describe your new attribute. +Semantic handling +^^^^^^^^^^^^^^^^^ +Most attributes are implemented to have some effect on the compiler. For +instance, to modify the way code is generated, or to add extra semantic checks +for an analysis pass, etc. Having added the attribute definition and conversion +to the semantic representation for the attribute, what remains is to implement +the custom logic requiring use of the attribute. + +The ``clang::Decl`` object can be queried for the presence or absence of an +attribute using ``hasAttr()``. To obtain a pointer to the semantic +representation of the attribute, ``getAttr`` may be used. How to add an expression or statement ------------------------------------- diff --git a/docs/LanguageExtensions.rst b/docs/LanguageExtensions.rst index 035b50d1082..bd5992e3d6e 100644 --- a/docs/LanguageExtensions.rst +++ b/docs/LanguageExtensions.rst @@ -935,6 +935,14 @@ C11 ``_Thread_local`` Use ``__has_feature(c_thread_local)`` or ``__has_extension(c_thread_local)`` to determine if support for ``_Thread_local`` variables is enabled. +Modules +------- + +Use ``__has_feature(modules)`` to determine if Modules have been enabled. +For example, compiling code with ``-fmodules`` enables the use of Modules. + +More information could be found `here `_. + Checks for Type Trait Primitives ================================ diff --git a/docs/LibASTMatchersReference.html b/docs/LibASTMatchersReference.html index e70d1ec3fac..74bbf9e4733 100644 --- a/docs/LibASTMatchersReference.html +++ b/docs/LibASTMatchersReference.html @@ -307,6 +307,19 @@ Example matches X, Z +Matcher<Decl>translationUnitDeclMatcher<TranslationUnitDecl>... +
Matches the top declaration context.
+
+Given
+  int X;
+  namespace NS {
+  int Y;
+  }  namespace NS
+decl(hasDeclContext(translationUnitDecl()))
+  matches "int X", but not "int Y".
+
+ + Matcher<Decl>typedefDeclMatcher<TypedefDecl>...
Matches typedef declarations.
 
@@ -1525,7 +1538,7 @@ Usable as: Matcher<CXXRecordDecl>isDerivedFromStringRef BaseName
+Matcher<CXXRecordDecl>isDerivedFromstd::string BaseName
 
Overloaded method as shortcut for isDerivedFrom(hasName(...)).
 
@@ -1544,7 +1557,7 @@ Usable as: Matcher<CXXRecordDecl>isSameOrDerivedFromStringRef BaseName +Matcher<CXXRecordDecl>isSameOrDerivedFromstd::string BaseName
Overloaded method as shortcut for
 isSameOrDerivedFrom(hasName(...)).
 
@@ -1721,19 +1734,6 @@ by the compiler (eg. implicit defaultcopy constructors).
-Matcher<Decl>isInstantiated -
Matches declarations that are template instantiations or are inside
-template instantiations.
-
-Given
-  template<typename T> void A(T t) { T i; }
-  A(0);
-  A(0U);
-functionDecl(isInstantiated())
-  matches 'A(int) {...};' and 'A(unsigned) {...}'.
-
- - Matcher<Decl>isPrivate
Matches private C++ declarations.
 
@@ -2093,22 +2093,6 @@ Usable as: Matcher<Stmt>isInTemplateInstantiation
-
Matches statements inside of a template instantiation.
-
-Given
-  int j;
-  template<typename T> void A(T t) { T i; j += 42;}
-  A(0);
-  A(0U);
-declStmt(isInTemplateInstantiation())
-  matches 'int i;' and 'unsigned i'.
-unless(stmt(isInTemplateInstantiation()))
-  will NOT match j += 42; as it's shared between the template definition and
-  instantiation.
-
- - Matcher<TagDecl>isDefinition
Matches if a declaration has a body attached.
 
@@ -2229,6 +2213,16 @@ and reference to that variable declaration within a compound statement.
 
+Matcher<Type>voidType +
Matches type void.
+
+Given
+ struct S { void func(); };
+functionDecl(returns(voidType()))
+  matches "void func();"
+
+ + Matcher<UnaryExprOrTypeTraitExpr>ofKindUnaryExprOrTypeTrait Kind
Matches unary expressions of a certain kind.
 
@@ -2323,6 +2317,35 @@ recordDecl(hasName("::X"), isTemplateInstantiation())
 Usable as: Matcher<FunctionDecl>, Matcher<VarDecl>, Matcher<CXXRecordDecl>
 
+ +Matcher<internal::Matcher<Decl>>isInstantiated +
Matches declarations that are template instantiations or are inside
+template instantiations.
+
+Given
+  template<typename T> void A(T t) { T i; }
+  A(0);
+  A(0U);
+functionDecl(isInstantiated())
+  matches 'A(int) {...};' and 'A(unsigned) {...}'.
+
+ + +Matcher<internal::Matcher<Stmt>>isInTemplateInstantiation +
Matches statements inside of a template instantiation.
+
+Given
+  int j;
+  template<typename T> void A(T t) { T i; j += 42;}
+  A(0);
+  A(0U);
+declStmt(isInTemplateInstantiation())
+  matches 'int i;' and 'unsigned i'.
+unless(stmt(isInTemplateInstantiation()))
+  will NOT match j += 42; as it's shared between the template definition and
+  instantiation.
+
+ diff --git a/docs/MSVCCompatibility.rst b/docs/MSVCCompatibility.rst index 73f01fc2b08..3794813db81 100644 --- a/docs/MSVCCompatibility.rst +++ b/docs/MSVCCompatibility.rst @@ -84,14 +84,23 @@ The status of major ABI-impacting C++ features: * RTTI: :good:`Complete`. Generation of RTTI data structures has been finished, along with support for the ``/GR`` flag. -* Exceptions and SEH: :partial:`Minimal`. Clang can parse both constructs, but - does not know how to emit compatible handlers. Clang cannot throw exceptions - but it can rethrow them. - -* Thread-safe initialization of local statics: :none:`Unstarted`. We are ABI - compatible with MSVC 2013, which does not support thread-safe local statics. - MSVC "14" changed the ABI to make initialization of local statics thread safe, - and we have not yet implemented this. +* Exceptions and SEH: :partial:`Partial`. + C++ exceptions (``try`` / ``catch`` / ``throw``) and + structured exceptions (``__try`` / ``__except`` / ``__finally``) mostly + work on x64. 32-bit exception handling support is being worked on. LLVM does + not model asynchronous exceptions, so it is currently impossible to catch an + asynchronous exception generated in the same frame as the catching ``__try``. + C++ exception specifications are ignored, but this is `consistent with Visual + C++`_. + +.. _consistent with Visual C++: + https://msdn.microsoft.com/en-us/library/wfa0edys.aspx + +* Thread-safe initialization of local statics: :good:`Complete`. MSVC 2015 + added support for thread-safe initialization of such variables by taking an + ABI break. + We are ABI compatible with both the MSVC 2013 and 2015 ABI for static local + variables. * Lambdas: :good:`Mostly complete`. Clang is compatible with Microsoft's implementation of lambdas except for providing overloads for conversion to @@ -112,7 +121,7 @@ time. By default on Windows, Clang attempts to follow suit. This behavior is controlled by the ``-fdelayed-template-parsing`` flag. While Clang delays parsing of method bodies, it still parses the bodies *before* template argument substitution, which is not what MSVC does. The following compatibility tweaks -are necessary to parse the the template in those cases. +are necessary to parse the template in those cases. MSVC allows some name lookup into dependent base classes. Even on other platforms, this has been a `frequently asked question`_ for Clang users. A diff --git a/docs/Makefile b/docs/Makefile index a76ce024e73..96978d893ef 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -16,15 +16,22 @@ DOXYGEN = doxygen $(PROJ_OBJ_DIR)/doxygen.cfg: doxygen.cfg.in cat $< | sed \ - -e 's/@abs_srcdir@/./g' \ -e 's/@DOT@/dot/g' \ -e 's/@PACKAGE_VERSION@/mainline/' \ -e 's/@abs_builddir@/./g' \ + -e 's/@abs_srcdir@/./g' \ + -e 's/@clang_doxygen_generate_qhp@/NO/g' \ + -e 's/@clang_doxygen_qch_filename@//g' \ + -e 's/@clang_doxygen_qhelpgenerator_path@//g' \ + -e 's/@clang_doxygen_qhp_cust_filter_attrs@//g' \ + -e 's/@clang_doxygen_qhp_cust_filter_name@//g' \ + -e 's/@clang_doxygen_qhp_namespace@//g' \ + -e 's/@enable_external_search@/NO/g' \ -e 's/@enable_searchengine@/NO/g' \ - -e 's/@searchengine_url@//g' \ -e 's/@enable_server_based_search@/NO/g' \ - -e 's/@enable_external_search@/NO/g' \ - -e 's/@extra_search_mappings@//g' > $@ + -e 's/@extra_search_mappings@//g' \ + -e 's/@searchengine_url@//g' \ + > $@ endif include $(CLANG_LEVEL)/Makefile @@ -32,9 +39,7 @@ include $(CLANG_LEVEL)/Makefile HTML := $(wildcard $(PROJ_SRC_DIR)/*.html) \ $(wildcard $(PROJ_SRC_DIR)/*.css) #IMAGES := $(wildcard $(PROJ_SRC_DIR)/img/*.*) -DOXYFILES := doxygen.cfg.in doxygen.css doxygen.footer doxygen.header \ - doxygen.intro -EXTRA_DIST := $(HTML) $(DOXYFILES) llvm.css CommandGuide img +DOXYFILES := doxygen.cfg.in doxygen.intro .PHONY: install-html install-doxygen doxygen generated @@ -68,11 +73,14 @@ $(PROJ_OBJ_DIR)/html.tar.gz: $(HTML) install-doxygen: doxygen $(Echo) Installing doxygen documentation - $(Verb) $(MKDIR) $(DESTDIR)$(PROJ_docsdir)/html/doxygen $(Verb) $(DataInstall) $(PROJ_OBJ_DIR)/doxygen.tar.gz $(DESTDIR)$(PROJ_docsdir) - $(Verb) cd $(PROJ_OBJ_DIR)/doxygen && \ - $(FIND) . -type f -exec \ - $(DataInstall) {} $(DESTDIR)$(PROJ_docsdir)/html/doxygen \; + $(Verb) cd $(PROJ_OBJ_DIR)/doxygen/html && \ + for DIR in $$($(FIND) . -type d); do \ + DESTSUB="$(DESTDIR)$(PROJ_docsdir)/html/doxygen/$$(echo $$DIR | cut -c 3-)"; \ + $(MKDIR) $$DESTSUB && \ + $(FIND) $$DIR -maxdepth 1 -type f -exec $(DataInstall) {} $$DESTSUB \; ; \ + if [ $$? != 0 ]; then exit 1; fi \ + done doxygen: regendoc $(PROJ_OBJ_DIR)/doxygen.tar.gz diff --git a/docs/MemorySanitizer.rst b/docs/MemorySanitizer.rst index 9d6c22d8af0..007e0866dec 100644 --- a/docs/MemorySanitizer.rst +++ b/docs/MemorySanitizer.rst @@ -16,8 +16,7 @@ Typical slowdown introduced by MemorySanitizer is **3x**. How to build ============ -Follow the `clang build instructions <../get_started.html>`_. CMake -build is supported. +Build LLVM/Clang with `CMake `_. Usage ===== @@ -111,30 +110,10 @@ Origin Tracking MemorySanitizer can track origins of unitialized values, similar to Valgrind's --track-origins option. This feature is enabled by -``-fsanitize-memory-track-origins`` Clang option. With the code from +``-fsanitize-memory-track-origins=2`` (or simply +``-fsanitize-memory-track-origins``) Clang option. With the code from the example above, -.. code-block:: console - - % clang -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g -O2 umr.cc - % ./a.out - WARNING: MemorySanitizer: use-of-uninitialized-value - #0 0x7f7893912f0b in main umr2.cc:6 - #1 0x7f789249b76c in __libc_start_main libc-start.c:226 - - Uninitialized value was created by a heap allocation - #0 0x7f7893901cbd in operator new[](unsigned long) msan_new_delete.cc:44 - #1 0x7f7893912e06 in main umr2.cc:4 - -Origin tracking has proved to be very useful for debugging MemorySanitizer -reports. It slows down program execution by a factor of 1.5x-2x on top -of the usual MemorySanitizer slowdown. - -MemorySanitizer can provide even more information with -``-fsanitize-memory-track-origins=2`` flag. In this mode reports -include information about intermediate stores the uninitialized value went -through. - .. code-block:: console % cat umr2.cc @@ -163,6 +142,15 @@ through. #0 0x7f7893901cbd in operator new[](unsigned long) msan_new_delete.cc:44 #1 0x7f7893912e06 in main umr2.cc:4 +By default, MemorySanitizer collects both allocation points and all +intermediate stores the uninitialized value went through. Origin +tracking has proved to be very useful for debugging MemorySanitizer +reports. It slows down program execution by a factor of 1.5x-2x on top +of the usual MemorySanitizer slowdown. + +Clang option ``-fsanitize-memory-track-origins=1`` enabled a slightly +faster mode when MemorySanitizer collects only allocation points but +not intermediate stores. Handling external code ============================ @@ -177,15 +165,7 @@ interceptors for the most common libc functions. They make it possible to run MemorySanitizer-instrumented programs linked with uninstrumented libc. For example, the authors were able to bootstrap MemorySanitizer-instrumented Clang compiler by linking it with -self-built instrumented libcxx (as a replacement for libstdc++). - -In the case when rebuilding all program dependencies with -MemorySanitizer is problematic, an experimental MSanDR tool can be -used. It is a DynamoRio-based tool that uses dynamic instrumentation -to avoid false positives due to uninstrumented code. The tool simply -marks memory from instrumented libraries as fully initialized. See -`http://code.google.com/p/memory-sanitizer/wiki/Running#Running_with_the_dynamic_tool` -for more information. +self-built instrumented libc++ (as a replacement for libstdc++). Supported Platforms =================== diff --git a/docs/Modules.rst b/docs/Modules.rst index 1575ce6964c..9999106914f 100644 --- a/docs/Modules.rst +++ b/docs/Modules.rst @@ -210,6 +210,12 @@ Command-line parameters ``-fno-modules-implicit-maps`` Suppresses the implicit search for files called ``module.modulemap`` and similar. Instead, module files need to be explicitly specified via ``-fmodule-map-file`` or transitively used. +``-fno-implicit-modules`` + All modules used by the build must be specified with ``-fmodule-file``. + +``-fmodule-file=`` + Load the given precompiled module file. + Module Semantics ================ @@ -423,7 +429,7 @@ tls A specific target feature (e.g., ``sse4``, ``avx``, ``neon``) is available. -**Example**: The ``std`` module can be extended to also include C++ and C++11 headers using a *requires-declaration*: +**Example:** The ``std`` module can be extended to also include C++ and C++11 headers using a *requires-declaration*: .. parsed-literal:: @@ -464,11 +470,16 @@ A header with the ``umbrella`` specifier is called an umbrella header. An umbrel A header with the ``private`` specifier may not be included from outside the module itself. -A header with the ``textual`` specifier will not be included when the module is built, and will be textually included if it is named by a ``#include`` directive. However, it is considered to be part of the module for the purpose of checking *use-declaration*\s. +A header with the ``textual`` specifier will not be compiled when the module is +built, and will be textually included if it is named by a ``#include`` +directive. However, it is considered to be part of the module for the purpose +of checking *use-declaration*\s, and must still be a lexically-valid header +file. In the future, we intend to pre-tokenize such headers and include the +token sequence within the prebuilt module representation. A header with the ``exclude`` specifier is excluded from the module. It will not be included when the module is built, nor will it be considered to be part of the module, even if an ``umbrella`` header or directory would otherwise make it part of the module. -**Example**: The C header ``assert.h`` is an excellent candidate for a textual header, because it is meant to be included multiple times (possibly with different ``NDEBUG`` settings). However, declarations within it should typically be split into a separate modular header. +**Example:** The C header ``assert.h`` is an excellent candidate for a textual header, because it is meant to be included multiple times (possibly with different ``NDEBUG`` settings). However, declarations within it should typically be split into a separate modular header. .. parsed-literal:: @@ -530,7 +541,7 @@ For each header included by the umbrella header or in the umbrella directory tha * Contain a single *header-declaration* naming that header * Contain a single *export-declaration* ``export *``, if the \ *inferred-submodule-declaration* contains the \ *inferred-submodule-member* ``export *`` -**Example**: If the subdirectory "MyLib" contains the headers ``A.h`` and ``B.h``, then the following module map: +**Example:** If the subdirectory "MyLib" contains the headers ``A.h`` and ``B.h``, then the following module map: .. parsed-literal:: @@ -573,7 +584,7 @@ An *export-declaration* specifies which imported modules will automatically be r The *export-declaration* names a module or a set of modules that will be re-exported to any translation unit that imports the enclosing module. Each imported module that matches the *wildcard-module-id* up to, but not including, the first ``*`` will be re-exported. -**Example**:: In the following example, importing ``MyLib.Derived`` also provides the API for ``MyLib.Base``: +**Example:** In the following example, importing ``MyLib.Derived`` also provides the API for ``MyLib.Base``: .. parsed-literal:: @@ -617,14 +628,16 @@ Note that, if ``Derived.h`` includes ``Base.h``, one can simply use a wildcard e Use declaration ~~~~~~~~~~~~~~~ -A *use-declaration* specifies one of the other modules that the module is allowed to use. An import or include not matching one of these is rejected when the option *-fmodules-decluse*. +A *use-declaration* specifies another module that the current top-level module +intends to use. When the option *-fmodules-decluse* is specified, a module can +only use other modules that are explicitly specified in this way. .. parsed-literal:: *use-declaration*: ``use`` *module-id* -**Example**:: In the following example, use of A from C is not declared, so will trigger a warning. +**Example:** In the following example, use of A from C is not declared, so will trigger a warning. .. parsed-literal:: @@ -641,7 +654,9 @@ A *use-declaration* specifies one of the other modules that the module is allowe use B } -When compiling a source file that implements a module, use the option ``-fmodule-name=module-id`` to indicate that the source file is logically part of that module. +When compiling a source file that implements a module, use the option +``-fmodule-name=module-id`` to indicate that the source file is logically part +of that module. The compiler at present only applies restrictions to the module directly being built. diff --git a/docs/ReleaseNotes.rst b/docs/ReleaseNotes.rst index b11960f7df3..c6dc6aa8ba7 100644 --- a/docs/ReleaseNotes.rst +++ b/docs/ReleaseNotes.rst @@ -1,6 +1,6 @@ -======================= -Clang 3.6 Release Notes -======================= +===================================== +Clang 3.7 (In-Progress) Release Notes +===================================== .. contents:: :local: @@ -8,16 +8,22 @@ Clang 3.6 Release Notes Written by the `LLVM Team `_ +.. warning:: + + These are in-progress notes for the upcoming Clang 3.7 release. You may + prefer the `Clang 3.6 Release Notes + `_. + Introduction ============ This document contains the release notes for the Clang C/C++/Objective-C -frontend, part of the LLVM Compiler Infrastructure, release 3.6. Here we +frontend, part of the LLVM Compiler Infrastructure, release 3.7. Here we describe the status of Clang in some detail, including major improvements from the previous release and new feature work. For the general LLVM release notes, see `the LLVM -documentation `_. -All LLVM releases may be downloaded from the `LLVM releases web +documentation `_. All LLVM +releases may be downloaded from the `LLVM releases web site `_. For more information about Clang or LLVM, including information about @@ -25,7 +31,12 @@ the latest release, please check out the main please see the `Clang Web Site `_ or the `LLVM Web Site `_. -What's New in Clang 3.6? +Note that if you are reading this file from a Subversion checkout or the +main Clang web page, this document applies to the *next* release, not +the current one. To see the release notes for a specific release, please +see the `releases page `_. + +What's New in Clang 3.7? ======================== Some of the major new features and improvements to Clang are listed @@ -36,171 +47,116 @@ sections with improvements to Clang's support for those languages. Major New Features ------------------ -- The __has_attribute built-in macro no longer queries for attributes across - multiple attribute syntaxes (GNU, C++11, __declspec, etc). Instead, it only - queries GNU-style attributes. With the addition of __has_cpp_attribute and - __has_declspec_attribute, this allows for more precise coverage of attribute - syntax querying. - -- clang-format now supports formatting Java code. - +- Use of the ``__declspec`` language extension for declaration attributes now + requires passing the -fms-extensions or -fborland compiler flag. This language + extension is also enabled when compiling CUDA code, but its use should be + viewed as an implementation detail that is subject to change. Improvements to Clang's diagnostics ------------------------------------ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Clang's diagnostics are constantly being improved to catch more issues, explain them more clearly, and provide more accurate source information about them. The improvements since the 3.5 release include: -- Smarter typo correction. Clang now tries a bit harder to give a usable - suggestion in more cases, and can now successfully recover in more - situations where the suggestion changes how an expression is parsed. - +- ... New Compiler Flags ------------------ -The ``-fpic`` option now uses small pic on PowerPC. +The sized deallocation feature of C++14 is now controlled by the +``-fsized-deallocation`` flag. This feature relies on library support that +isn't yet widely deployed, so the user must supply an extra flag to get the +extra functionality. - -The __EXCEPTIONS macro ----------------------- -``__EXCEPTIONS`` is now defined when landing pads are emitted, not when -C++ exceptions are enabled. The two can be different in Objective-C files: -If C++ exceptions are disabled but Objective-C exceptions are enabled, -landing pads will be emitted. Clang 3.6 is switching the behavior of -``__EXCEPTIONS``. Clang 3.5 confusingly changed the behavior of -``has_feature(cxx_exceptions)``, which used to be set if landing pads were -emitted, but is now set if C++ exceptions are enabled. So there are 3 cases: - -Clang before 3.5: - ``__EXCEPTIONS`` is set if C++ exceptions are enabled, ``cxx_exceptions`` - enabled if C++ or ObjC exceptions are enabled - -Clang 3.5: - ``__EXCEPTIONS`` is set if C++ exceptions are enabled, ``cxx_exceptions`` - enabled if C++ exceptions are enabled - -Clang 3.6: - ``__EXCEPTIONS`` is set if C++ or ObjC exceptions are enabled, - ``cxx_exceptions`` enabled if C++ exceptions are enabled - -To reliably test if C++ exceptions are enabled, use -``__EXCEPTIONS && __has_feature(cxx_exceptions)``, else things won't work in -all versions of Clang in Objective-C++ files. +The option .... New Pragmas in Clang ----------------------- -Clang now supports the `#pragma unroll` and `#pragma nounroll` directives to -specify loop unrolling optimization hints. Placed just prior to the desired -loop, `#pragma unroll` directs the loop unroller to attempt to fully unroll the -loop. The pragma may also be specified with a positive integer parameter -indicating the desired unroll count: `#pragma unroll _value_`. The unroll count -parameter can be optionally enclosed in parentheses. The directive `#pragma -nounroll` indicates that the loop should not be unrolled. These unrolling hints -may also be expressed using the `#pragma clang loop` directive. See the Clang -`language extensions -`_ -for details. +Clang now supports the ... Windows Support --------------- -- Many, many bug fixes. - -- Clang can now self-host using the ``msvc`` environment on x86 and x64 - Windows. This means that Microsoft C++ ABI is more or less feature-complete, - minus exception support. - -- Added more MSVC compatibility hacks, such as allowing more lookup into - dependent bases of class templates when there is a known template pattern. - As a result, applications using Active Template Library (ATL) or Windows - Runtime Library (WRL) headers should compile correctly. - -- Added support for the Visual C++ ``__super`` keyword. - -- Added support for MSVC's ``__vectorcall`` calling convention, which is used - in the upcoming Visual Studio 2015 STL. - -- Added basic support for DWARF debug information in COFF files. +Clang's support for building native Windows programs ... C Language Changes in Clang --------------------------- -- The default language mode for C compilations with Clang has been changed from - C99 with GNU extensions to C11 with GNU extensions. C11 is largely - backwards-compatible with C99, but if you want to restore the former behavior - you can do so with the `-std=gnu99` flag. +... C11 Feature Support ^^^^^^^^^^^^^^^^^^^ -- Clang now provides an implementation of the standard C11 header ``. +... C++ Language Changes in Clang ----------------------------- -- An `upcoming change to C++ _` - changes the semantics of certain deductions of `auto` from a braced initializer - list. Following the intent of the C++ committee, this change will be applied to - our C++11 and C++14 modes as well as our experimental C++17 mode. Clang 3.6 - does not yet implement this change, but to provide a transition period, it - warns on constructs whose meaning will change. The fix in all cases is to - add an `=` prior to the left brace. +- ... -- Clang now supports putting identical constructors and destructors in - the C5/D5 comdat, reducing code duplication. +C++11 Feature Support +^^^^^^^^^^^^^^^^^^^^^ -- Clang will put individual ``.init_array/.ctors`` sections in - comdats, reducing code duplication and speeding up startup. +... +Objective-C Language Changes in Clang +------------------------------------- -C++17 Feature Support -^^^^^^^^^^^^^^^^^^^^^ +... -Clang has experimental support for some proposed C++1z (tentatively, C++17) -features. This support can be enabled using the `-std=c++1z` flag. +OpenCL C Language Changes in Clang +---------------------------------- -New in Clang 3.6 is support for: +... -- Fold expressions +Internal API Changes +-------------------- -- `u8` character literals +These are major API changes that have happened since the 3.6 release of +Clang. If upgrading an external codebase that uses Clang as a library, +this section should help get you past the largest hurdles of upgrading. -- Nested namespace definitions: `namespace A::B { ... }` as a shorthand for - `namespace A { namespace B { ... } }` +- Some of the `PPCallbacks` interface now deals in `MacroDefinition` + objects instead of `MacroDirective` objects. This allows preserving + full information on macros imported from modules. -- Attributes for namespaces and enumerators +- `clang-c/Index.h` no longer `#include`\s `clang-c/Documentation.h`. + You now need to explicitly `#include "clang-c/Documentation.h"` if + you use the libclang documentation API. -- Constant evaluation for all non-type template arguments +libclang +-------- -Note that these features may be changed or removed in future Clang releases -without notice. +... -Support for `for (identifier : range)` as a synonym for -`for (auto &&identifier : range)` has been removed as it is no longer currently -considered for C++17. +Static Analyzer +--------------- + +... + +Core Analysis Improvements +========================== -For more details on C++ feature support, see -`the C++ status page `_. +- ... +New Issues Found +================ + +- ... + +Python Binding Changes +---------------------- -OpenMP Language Changes in Clang --------------------------------- +The following methods have been added: -Clang 3.6 contains codegen for many individual OpenMP pragmas, but combinations are not completed yet. -We plan to continue codegen code drop aiming for completion in 3.7. Please see this link for up-to-date -`status _`. -LLVM's OpenMP runtime library, originally developed by Intel, has been modified to work on ARM, PowerPC, -as well as X86. The Runtime Library's compatibility with GCC 4.9 is improved -- missed entry points added, barrier and fork/join code improved, one more type of barrier enabled. -Support for ppc64le architecture is now available and automatically detected when using cmake system. -Using makefile the new "ppc64le" arch type is available. -Contributors to this work include AMD, Argonne National Lab., IBM, Intel, Texas Instruments, University of Houston and many others. +- ... +Significant Known Problems +========================== Additional Information ====================== diff --git a/docs/SanitizerCoverage.rst b/docs/SanitizerCoverage.rst new file mode 100644 index 00000000000..65af6ffbf01 --- /dev/null +++ b/docs/SanitizerCoverage.rst @@ -0,0 +1,355 @@ +================= +SanitizerCoverage +================= + +.. contents:: + :local: + +Introduction +============ + +Sanitizer tools have a very simple code coverage tool built in. It allows to +get function-level, basic-block-level, and edge-level coverage at a very low +cost. + +How to build and run +==================== + +SanitizerCoverage can be used with :doc:`AddressSanitizer`, +:doc:`LeakSanitizer`, :doc:`MemorySanitizer`, and UndefinedBehaviorSanitizer. +In addition to ``-fsanitize=``, pass one of the following compile-time flags: + +* ``-fsanitize-coverage=func`` for function-level coverage (very fast). +* ``-fsanitize-coverage=bb`` for basic-block-level coverage (may add up to 30% + **extra** slowdown). +* ``-fsanitize-coverage=edge`` for edge-level coverage (up to 40% slowdown). + +You may also specify ``-fsanitize-coverage=indirect-calls`` for +additional `caller-callee coverage`_. + +At run time, pass ``coverage=1`` in ``ASAN_OPTIONS``, ``LSAN_OPTIONS``, +``MSAN_OPTIONS`` or ``UBSAN_OPTIONS``, as appropriate. + +To get `Coverage counters`_, add ``-fsanitize-coverage=8bit-counters`` +to one of the above compile-time flags. At runtime, use +``*SAN_OPTIONS=coverage=1:coverage_counters=1``. + +Example: + +.. code-block:: console + + % cat -n cov.cc + 1 #include + 2 __attribute__((noinline)) + 3 void foo() { printf("foo\n"); } + 4 + 5 int main(int argc, char **argv) { + 6 if (argc == 2) + 7 foo(); + 8 printf("main\n"); + 9 } + % clang++ -g cov.cc -fsanitize=address -fsanitize-coverage=func + % ASAN_OPTIONS=coverage=1 ./a.out; ls -l *sancov + main + -rw-r----- 1 kcc eng 4 Nov 27 12:21 a.out.22673.sancov + % ASAN_OPTIONS=coverage=1 ./a.out foo ; ls -l *sancov + foo + main + -rw-r----- 1 kcc eng 4 Nov 27 12:21 a.out.22673.sancov + -rw-r----- 1 kcc eng 8 Nov 27 12:21 a.out.22679.sancov + +Every time you run an executable instrumented with SanitizerCoverage +one ``*.sancov`` file is created during the process shutdown. +If the executable is dynamically linked against instrumented DSOs, +one ``*.sancov`` file will be also created for every DSO. + +Postprocessing +============== + +The format of ``*.sancov`` files is very simple: the first 8 bytes is the magic, +one of ``0xC0BFFFFFFFFFFF64`` and ``0xC0BFFFFFFFFFFF32``. The last byte of the +magic defines the size of the following offsets. The rest of the data is the +offsets in the corresponding binary/DSO that were executed during the run. + +A simple script +``$LLVM/projects/compiler-rt/lib/sanitizer_common/scripts/sancov.py`` is +provided to dump these offsets. + +.. code-block:: console + + % sancov.py print a.out.22679.sancov a.out.22673.sancov + sancov.py: read 2 PCs from a.out.22679.sancov + sancov.py: read 1 PCs from a.out.22673.sancov + sancov.py: 2 files merged; 2 PCs total + 0x465250 + 0x4652a0 + +You can then filter the output of ``sancov.py`` through ``addr2line --exe +ObjectFile`` or ``llvm-symbolizer --obj ObjectFile`` to get file names and line +numbers: + +.. code-block:: console + + % sancov.py print a.out.22679.sancov a.out.22673.sancov 2> /dev/null | llvm-symbolizer --obj a.out + cov.cc:3 + cov.cc:5 + +How good is the coverage? +========================= + +It is possible to find out which PCs are not covered, by subtracting the covered +set from the set of all instrumented PCs. The latter can be obtained by listing +all callsites of ``__sanitizer_cov()`` in the binary. On Linux, ``sancov.py`` +can do this for you. Just supply the path to binary and a list of covered PCs: + +.. code-block:: console + + % sancov.py print a.out.12345.sancov > covered.txt + sancov.py: read 2 64-bit PCs from a.out.12345.sancov + sancov.py: 1 file merged; 2 PCs total + % sancov.py missing a.out < covered.txt + sancov.py: found 3 instrumented PCs in a.out + sancov.py: read 2 PCs from stdin + sancov.py: 1 PCs missing from coverage + 0x4cc61c + +Edge coverage +============= + +Consider this code: + +.. code-block:: c++ + + void foo(int *a) { + if (a) + *a = 0; + } + +It contains 3 basic blocks, let's name them A, B, C: + +.. code-block:: none + + A + |\ + | \ + | B + | / + |/ + C + +If blocks A, B, and C are all covered we know for certain that the edges A=>B +and B=>C were executed, but we still don't know if the edge A=>C was executed. +Such edges of control flow graph are called +`critical `_. The +edge-level coverage (``-fsanitize-coverage=edge``) simply splits all critical +edges by introducing new dummy blocks and then instruments those blocks: + +.. code-block:: none + + A + |\ + | \ + D B + | / + |/ + C + +Bitset +====== + +When ``coverage_bitset=1`` run-time flag is given, the coverage will also be +dumped as a bitset (text file with 1 for blocks that have been executed and 0 +for blocks that were not). + +.. code-block:: console + + % clang++ -fsanitize=address -fsanitize-coverage=edge cov.cc + % ASAN_OPTIONS="coverage=1:coverage_bitset=1" ./a.out + main + % ASAN_OPTIONS="coverage=1:coverage_bitset=1" ./a.out 1 + foo + main + % head *bitset* + ==> a.out.38214.bitset-sancov <== + 01101 + ==> a.out.6128.bitset-sancov <== + 11011% + +For a given executable the length of the bitset is always the same (well, +unless dlopen/dlclose come into play), so the bitset coverage can be +easily used for bitset-based corpus distillation. + +Caller-callee coverage +====================== + +(Experimental!) +Every indirect function call is instrumented with a run-time function call that +captures caller and callee. At the shutdown time the process dumps a separate +file called ``caller-callee.PID.sancov`` which contains caller/callee pairs as +pairs of lines (odd lines are callers, even lines are callees) + +.. code-block:: console + + a.out 0x4a2e0c + a.out 0x4a6510 + a.out 0x4a2e0c + a.out 0x4a87f0 + +Current limitations: + +* Only the first 14 callees for every caller are recorded, the rest are silently + ignored. +* The output format is not very compact since caller and callee may reside in + different modules and we need to spell out the module names. +* The routine that dumps the output is not optimized for speed +* Only Linux x86_64 is tested so far. +* Sandboxes are not supported. + +Coverage counters +================= + +This experimental feature is inspired by +`AFL `_'s coverage +instrumentation. With additional compile-time and run-time flags you can get +more sensitive coverage information. In addition to boolean values assigned to +every basic block (edge) the instrumentation will collect imprecise counters. +On exit, every counter will be mapped to a 8-bit bitset representing counter +ranges: ``1, 2, 3, 4-7, 8-15, 16-31, 32-127, 128+`` and those 8-bit bitsets will +be dumped to disk. + +.. code-block:: console + + % clang++ -g cov.cc -fsanitize=address -fsanitize-coverage=edge,8bit-counters + % ASAN_OPTIONS="coverage=1:coverage_counters=1" ./a.out + % ls -l *counters-sancov + ... a.out.17110.counters-sancov + % xxd *counters-sancov + 0000000: 0001 0100 01 + +These counters may also be used for in-process coverage-guided fuzzers. See +``include/sanitizer/coverage_interface.h``: + +.. code-block:: c++ + + // The coverage instrumentation may optionally provide imprecise counters. + // Rather than exposing the counter values to the user we instead map + // the counters to a bitset. + // Every counter is associated with 8 bits in the bitset. + // We define 8 value ranges: 1, 2, 3, 4-7, 8-15, 16-31, 32-127, 128+ + // The i-th bit is set to 1 if the counter value is in the i-th range. + // This counter-based coverage implementation is *not* thread-safe. + + // Returns the number of registered coverage counters. + uintptr_t __sanitizer_get_number_of_counters(); + // Updates the counter 'bitset', clears the counters and returns the number of + // new bits in 'bitset'. + // If 'bitset' is nullptr, only clears the counters. + // Otherwise 'bitset' should be at least + // __sanitizer_get_number_of_counters bytes long and 8-aligned. + uintptr_t + __sanitizer_update_counter_bitset_and_clear_counters(uint8_t *bitset); + +Output directory +================ + +By default, .sancov files are created in the current working directory. +This can be changed with ``ASAN_OPTIONS=coverage_dir=/path``: + +.. code-block:: console + + % ASAN_OPTIONS="coverage=1:coverage_dir=/tmp/cov" ./a.out foo + % ls -l /tmp/cov/*sancov + -rw-r----- 1 kcc eng 4 Nov 27 12:21 a.out.22673.sancov + -rw-r----- 1 kcc eng 8 Nov 27 12:21 a.out.22679.sancov + +Sudden death +============ + +Normally, coverage data is collected in memory and saved to disk when the +program exits (with an ``atexit()`` handler), when a SIGSEGV is caught, or when +``__sanitizer_cov_dump()`` is called. + +If the program ends with a signal that ASan does not handle (or can not handle +at all, like SIGKILL), coverage data will be lost. This is a big problem on +Android, where SIGKILL is a normal way of evicting applications from memory. + +With ``ASAN_OPTIONS=coverage=1:coverage_direct=1`` coverage data is written to a +memory-mapped file as soon as it collected. + +.. code-block:: console + + % ASAN_OPTIONS="coverage=1:coverage_direct=1" ./a.out + main + % ls + 7036.sancov.map 7036.sancov.raw a.out + % sancov.py rawunpack 7036.sancov.raw + sancov.py: reading map 7036.sancov.map + sancov.py: unpacking 7036.sancov.raw + writing 1 PCs to a.out.7036.sancov + % sancov.py print a.out.7036.sancov + sancov.py: read 1 PCs from a.out.7036.sancov + sancov.py: 1 files merged; 1 PCs total + 0x4b2bae + +Note that on 64-bit platforms, this method writes 2x more data than the default, +because it stores full PC values instead of 32-bit offsets. + +In-process fuzzing +================== + +Coverage data could be useful for fuzzers and sometimes it is preferable to run +a fuzzer in the same process as the code being fuzzed (in-process fuzzer). + +You can use ``__sanitizer_get_total_unique_coverage()`` from +```` which returns the number of currently +covered entities in the program. This will tell the fuzzer if the coverage has +increased after testing every new input. + +If a fuzzer finds a bug in the ASan run, you will need to save the reproducer +before exiting the process. Use ``__asan_set_death_callback`` from +```` to do that. + +An example of such fuzzer can be found in `the LLVM tree +`_. + +Performance +=========== + +This coverage implementation is **fast**. With function-level coverage +(``-fsanitize-coverage=func``) the overhead is not measurable. With +basic-block-level coverage (``-fsanitize-coverage=bb``) the overhead varies +between 0 and 25%. + +============== ========= ========= ========= ========= ========= ========= + benchmark cov0 cov1 diff 0-1 cov2 diff 0-2 diff 1-2 +============== ========= ========= ========= ========= ========= ========= + 400.perlbench 1296.00 1307.00 1.01 1465.00 1.13 1.12 + 401.bzip2 858.00 854.00 1.00 1010.00 1.18 1.18 + 403.gcc 613.00 617.00 1.01 683.00 1.11 1.11 + 429.mcf 605.00 582.00 0.96 610.00 1.01 1.05 + 445.gobmk 896.00 880.00 0.98 1050.00 1.17 1.19 + 456.hmmer 892.00 892.00 1.00 918.00 1.03 1.03 + 458.sjeng 995.00 1009.00 1.01 1217.00 1.22 1.21 +462.libquantum 497.00 492.00 0.99 534.00 1.07 1.09 + 464.h264ref 1461.00 1467.00 1.00 1543.00 1.06 1.05 + 471.omnetpp 575.00 590.00 1.03 660.00 1.15 1.12 + 473.astar 658.00 652.00 0.99 715.00 1.09 1.10 + 483.xalancbmk 471.00 491.00 1.04 582.00 1.24 1.19 + 433.milc 616.00 627.00 1.02 627.00 1.02 1.00 + 444.namd 602.00 601.00 1.00 654.00 1.09 1.09 + 447.dealII 630.00 634.00 1.01 653.00 1.04 1.03 + 450.soplex 365.00 368.00 1.01 395.00 1.08 1.07 + 453.povray 427.00 434.00 1.02 495.00 1.16 1.14 + 470.lbm 357.00 375.00 1.05 370.00 1.04 0.99 + 482.sphinx3 927.00 928.00 1.00 1000.00 1.08 1.08 +============== ========= ========= ========= ========= ========= ========= + +Why another coverage? +===================== + +Why did we implement yet another code coverage? + * We needed something that is lightning fast, plays well with + AddressSanitizer, and does not significantly increase the binary size. + * Traditional coverage implementations based in global counters + `suffer from contention on counters + `_. diff --git a/docs/ThreadSafetyAnalysis.rst b/docs/ThreadSafetyAnalysis.rst index 0a1b8049e46..19ec2352ff2 100644 --- a/docs/ThreadSafetyAnalysis.rst +++ b/docs/ThreadSafetyAnalysis.rst @@ -857,6 +857,9 @@ implementation. // Assert that is mutex is currently held for read operations. void AssertReaderHeld() ASSERT_SHARED_CAPABILITY(this); + + // For negative capabilities. + const Mutex& operator!() const { return *this; } }; diff --git a/docs/ThreadSanitizer.rst b/docs/ThreadSanitizer.rst index a1d81e9a9c2..d1aeaa8a58c 100644 --- a/docs/ThreadSanitizer.rst +++ b/docs/ThreadSanitizer.rst @@ -12,8 +12,7 @@ ThreadSanitizer is about **5x-10x**. How to build ------------ -Follow the `Clang build instructions <../get_started.html>`_. CMake build is -supported. +Build LLVM/Clang with `CMake `_. Supported Platforms ------------------- diff --git a/docs/UsersManual.rst b/docs/UsersManual.rst index fc5af4ecd5b..2a6fc82a90d 100644 --- a/docs/UsersManual.rst +++ b/docs/UsersManual.rst @@ -589,6 +589,25 @@ Current limitations translated from debug annotations. That translation can be lossy, which results in some remarks having no location information. +Other Options +------------- +Clang options that that don't fit neatly into other categories. + +.. option:: -MV + + When emitting a dependency file, use formatting conventions appropriate + for NMake or Jom. Ignored unless another option causes Clang to emit a + dependency file. + +When Clang emits a dependency file (e.g., you supplied the -M option) +most filenames can be written to the file without any special formatting. +Different Make tools will treat different sets of characters as "special" +and use different conventions for telling the Make tool that the character +is actually part of the filename. Normally Clang uses backslash to "escape" +a special character, which is the convention used by GNU Make. The -MV +option tells Clang to put double-quotes around the entire filename, which +is the convention used by NMake and Jom. + Language and Target-Independent Features ======================================== @@ -637,7 +656,7 @@ Diagnostics `. Diagnostic Mappings ^^^^^^^^^^^^^^^^^^^ -All diagnostics are mapped into one of these 5 classes: +All diagnostics are mapped into one of these 6 classes: - Ignored - Note @@ -911,6 +930,8 @@ number of cases where the compilation environment is tightly controlled and the precompiled header cannot be generated after headers have been installed. +.. _controlling-code-generation: + Controlling Code Generation --------------------------- @@ -957,6 +978,8 @@ are listed below. ``unsigned-integer-overflow`` and ``vptr``. - ``-fsanitize=dataflow``: :doc:`DataFlowSanitizer`, a general data flow analysis. + - ``-fsanitize=cfi``: :doc:`control flow integrity ` + checks. Implies ``-flto``. The following more fine-grained checks are also available: @@ -966,6 +989,16 @@ are listed below. ``true`` nor ``false``. - ``-fsanitize=bounds``: Out of bounds array indexing, in cases where the array bound can be statically determined. + - ``-fsanitize=cfi-cast-strict``: Enables :ref:`strict cast checks + `. + - ``-fsanitize=cfi-derived-cast``: Base-to-derived cast to the wrong + dynamic type. Implies ``-flto``. + - ``-fsanitize=cfi-unrelated-cast``: Cast from ``void*`` or another + unrelated type to the wrong dynamic type. Implies ``-flto``. + - ``-fsanitize=cfi-nvcall``: Non-virtual call via an object whose vptr is of + the wrong dynamic type. Implies ``-flto``. + - ``-fsanitize=cfi-vcall``: Virtual call via an object whose vptr is of the + wrong dynamic type. Implies ``-flto``. - ``-fsanitize=enum``: Load of a value of an enumerated type which is not in the range of representable values for that enumerated type. @@ -994,7 +1027,9 @@ are listed below. greater or equal to the promoted bit-width of the left hand side or less than zero, or where the left hand side is negative. For a signed left shift, also checks for signed overflow in C, and for - unsigned overflow in C++. + unsigned overflow in C++. You can use ``-fsanitize=shift-base`` or + ``-fsanitize=shift-exponent`` to check only left-hand side or + right-hand side of shift operation, respectively. - ``-fsanitize=signed-integer-overflow``: Signed integer overflow, including all the checks added by ``-ftrapv``, and checking for overflow in signed division (``INT_MIN / -1``). @@ -1026,10 +1061,11 @@ are listed below. uninitialized bits came from. Slows down execution by additional 1.5x-2x. - Possible values for level are 0 (off), 1 (default), 2. Level 2 adds more - sections to MemorySanitizer reports describing the order of memory stores - the uninitialized value went through. Beware, this mode may use a lot of - extra memory. + Possible values for level are 0 (off), 1, 2 (default). Level 2 + adds more sections to MemorySanitizer reports describing the + order of memory stores the uninitialized value went + through. This mode may use extra memory in programs that copy + uninitialized memory a lot. Extra features of UndefinedBehaviorSanitizer: @@ -1049,8 +1085,8 @@ are listed below. It is not possible to combine more than one of the ``-fsanitize=address``, ``-fsanitize=thread``, and ``-fsanitize=memory`` checkers in the same - program. The ``-fsanitize=undefined`` checks can be combined with other - sanitizers. + program. The ``-fsanitize=undefined`` checks can only be combined with + ``-fsanitize=address``. **-f[no-]sanitize-recover=check1,check2,...** @@ -1063,6 +1099,11 @@ are listed below. sanitizers (e.g. :doc:`AddressSanitizer`) may not support recovery, and always crash the program after the issue is detected. +**-f[no-]sanitize-coverage=[type,features,...]** + + Enable simple code coverage in addition to certain sanitizers. + See :doc:`SanitizerCoverage` for more details. + .. option:: -fno-assume-sane-operator-new Don't assume that the C++'s new operator is sane. @@ -1249,6 +1290,10 @@ If you are not using Linux Perf to collect profiles, you will need to write a conversion tool from your profiler to LLVM's format. This section explains the file format expected by the backend. +NOTE: This format is not intended to be used for code coverage. For that, +you need to use Clang's instrumentation based profiling +(``-fprofile-instr-generate``). + Sample profiles are written as ASCII text. The file is divided into sections, which correspond to each of the functions executed at runtime. Each section has the following format (taken from diff --git a/docs/conf.py b/docs/conf.py index 7c2ef2aed0f..9030c2c2875 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -48,9 +48,9 @@ # built documents. # # The short X.Y version. -version = '3.6' +version = '3.7' # The full version, including alpha/beta/rc tags. -release = '3.6' +release = '3.7' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/doxygen.cfg.in b/docs/doxygen.cfg.in index 2372e044cde..39c9aed57e0 100644 --- a/docs/doxygen.cfg.in +++ b/docs/doxygen.cfg.in @@ -1,1306 +1,2305 @@ -# Doxyfile 1.4.4 +# Doxyfile 1.8.6 # This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project +# doxygen (www.doxygen.org) for a project. # -# All text after a hash (#) is considered a comment and will be ignored +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. # The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. PROJECT_NAME = clang -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. OUTPUT_DIRECTORY = @abs_builddir@/doxygen -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. CREATE_SUBDIRS = NO -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. OUTPUT_LANGUAGE = English -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. +# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. +# The default value is: YES. REPEAT_BRIEF = YES -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. -ABBREVIATE_BRIEF = +ABBREVIATE_BRIEF = -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief # description. +# The default value is: NO. ALWAYS_DETAILED_SEC = NO -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. +# The default value is: NO. INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. +# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. FULL_PATH_NAMES = NO -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = ../.. -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. -STRIP_FROM_INC_PATH = +STRIP_FROM_INC_PATH = -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. SHORT_NAMES = NO -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. JAVADOC_AUTOBRIEF = NO -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. -MULTILINE_CPP_IS_BRIEF = NO +QT_AUTOBRIEF = NO -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. -DETAILS_AT_TOP = NO +MULTILINE_CPP_IS_BRIEF = NO -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. INHERIT_DOCS = YES -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a +# new page for each member. If set to NO, the documentation of a member will be +# part of the file/class/namespace that contains it. +# The default value is: NO. -DISTRIBUTE_GROUP_DOC = NO +SEPARATE_MEMBER_PAGES = NO -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. -#SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 2 -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. -TAB_SIZE = 2 +ALIASES = -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. -ALIASES = +TCL_SUBST = -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = NO -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. +# +# Note For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. SUBGROUPING = YES +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 2 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. EXTRACT_ALL = YES -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# be included in the documentation. +# The default value is: NO. EXTRACT_PRIVATE = NO -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# included in the documentation. +# The default value is: NO. EXTRACT_STATIC = YES -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. EXTRACT_LOCAL_CLASSES = YES -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. +# This flag is only useful for Objective-C code. When set to YES local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO only methods in the interface are +# included. +# The default value is: NO. EXTRACT_LOCAL_METHODS = NO -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. HIDE_UNDOC_MEMBERS = NO -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO these classes will be included in the various overviews. This option has +# no effect if EXTRACT_ALL is enabled. +# The default value is: NO. HIDE_UNDOC_CLASSES = NO -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO these declarations will be +# included in the documentation. +# The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. HIDE_IN_BODY_DOCS = NO -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. +# The default value is: system dependent. CASE_SENSE_NAMES = YES -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES the +# scope will be hidden. +# The default value is: NO. HIDE_SCOPE_NAMES = NO -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. SHOW_INCLUDE_FILES = YES -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. INLINE_INFO = YES -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: YES. SORT_MEMBER_DOCS = YES -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. SORT_BRIEF_DOCS = NO -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. SORT_BY_SCOPE_NAME = NO -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the +# todo list. This list is created by putting \todo commands in the +# documentation. +# The default value is: YES. GENERATE_TODOLIST = YES -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. +# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the +# test list. This list is created by putting \test commands in the +# documentation. +# The default value is: YES. GENERATE_TESTLIST = YES -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. +# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. GENERATE_BUGLIST = YES -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. +# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. GENERATE_DEPRECATEDLIST= YES -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. -ENABLED_SECTIONS = +ENABLED_SECTIONS = -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES the list +# will mention the files that were used to generate the documentation. +# The default value is: YES. SHOW_USED_FILES = YES -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is YES. +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES -SHOW_DIRECTORIES = YES +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. +SHOW_NAMESPACES = YES -#FILE_VERSION_FILTER = +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. Do not use file names with spaces, bibtex cannot handle them. See +# also \cite for info how to create references. + +CITE_BIB_FILES = #--------------------------------------------------------------------------- -# configuration options related to warning and progress messages +# Configuration options related to warning and progress messages #--------------------------------------------------------------------------- -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. QUIET = NO -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. WARNINGS = NO -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. +# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. WARN_IF_UNDOCUMENTED = NO -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. WARN_IF_DOC_ERROR = YES -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO doxygen will only warn about wrong or incomplete parameter +# documentation, but not about the absence of documentation. +# The default value is: NO. -#WARN_NO_PARAMDOC = NO +WARN_NO_PARAMDOC = NO -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. -WARN_FORMAT = +WARN_FORMAT = "$file:$line: $text" -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). -WARN_LOGFILE = +WARN_LOGFILE = #--------------------------------------------------------------------------- -# configuration options related to the input files +# Configuration options related to the input files #--------------------------------------------------------------------------- -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. INPUT = @abs_srcdir@/../include \ @abs_srcdir@/../lib \ @abs_srcdir@/doxygen.intro -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 -FILE_PATTERNS = +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. +FILE_PATTERNS = + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. RECURSIVE = YES -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. -EXCLUDE = +EXCLUDE = -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded # from the input. +# The default value is: NO. EXCLUDE_SYMLINKS = NO -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* -EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). EXAMPLE_PATH = @abs_srcdir@/../examples -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. -EXAMPLE_PATTERNS = +EXAMPLE_PATTERNS = -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. EXAMPLE_RECURSIVE = YES -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). IMAGE_PATH = @abs_srcdir@/img -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. -INPUT_FILTER = +INPUT_FILTER = -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. -FILTER_PATTERNS = +FILTER_PATTERNS = -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER ) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. FILTER_SOURCE_FILES = NO +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + #--------------------------------------------------------------------------- -# configuration options related to source browsing +# Configuration options related to source browsing #--------------------------------------------------------------------------- -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. SOURCE_BROWSER = YES -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. INLINE_SOURCES = NO -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. STRIP_CODE_COMMENTS = NO -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. REFERENCED_BY_RELATION = YES -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. REFERENCES_RELATION = YES -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. -#USE_HTAGS = NO +USE_HTAGS = NO -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. ALPHABETICAL_INDEX = YES -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 4 -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = clang:: #--------------------------------------------------------------------------- -# configuration options related to the HTML output +# Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. +# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# The default value is: YES. GENERATE_HTML = YES -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a # standard header. - -HTML_HEADER = @abs_srcdir@/doxygen.header - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = @abs_srcdir@/doxygen.footer - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = @abs_srcdir@/doxygen.css - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- +# defined cascading style sheet that is included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefor more robust against future updates. +# Doxygen will copy the style sheet file to the output directory. For an example +# see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be # written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_FILE = +CHM_FILE = -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. -HHC_LOCATION = +HHC_LOCATION = -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). +# The GENERATE_CHI flag controls if a separate .chi index file is generated ( +# YES) or that it should be included in the master .chm file ( NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated ( +# YES) or a normal table of contents ( NO) in the .chm file. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = @clang_doxygen_generate_qhp@ -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = @clang_doxygen_qch_filename@ -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = @clang_doxygen_qhp_namespace@ -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-folders +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-filters +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = @clang_doxygen_qhp_cust_filter_name@ -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = @clang_doxygen_qhp_cust_filter_attrs@ -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. -QHP_SECT_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @clang_doxygen_qhelpgenerator_path@ -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. -ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_TREEVIEW = NO +ENUM_VALUES_PER_LINE = 4 -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /