svn commit: r319525 - in vendor/clang/dist: docs include/clang/Basic include/clang/Driver include/clang/Frontend include/clang/Lex lib/ARCMigrate lib/AST lib/Analysis lib/Basic lib/CodeGen lib/Driv...
Dimitry Andric
dim at FreeBSD.org
Sat Jun 3 15:20:55 UTC 2017
Author: dim
Date: Sat Jun 3 15:20:48 2017
New Revision: 319525
URL: https://svnweb.freebsd.org/changeset/base/319525
Log:
Vendor import of clang trunk r304659:
https://llvm.org/svn/llvm-project/cfe/trunk@304659
Added:
vendor/clang/dist/test/CodeGen/pr26099.c (contents, props changed)
vendor/clang/dist/test/CodeGenCXX/pr33080.cpp (contents, props changed)
vendor/clang/dist/test/CodeGenCXX/unaligned-member-qualifier.cpp (contents, props changed)
vendor/clang/dist/test/Frontend/rewrite-includes-filenotfound.c (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/check-for-sanitizer-feature/
vendor/clang/dist/test/Modules/Inputs/check-for-sanitizer-feature/check.h (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/check-for-sanitizer-feature/map
vendor/clang/dist/test/Modules/Inputs/header-attribs/
vendor/clang/dist/test/Modules/Inputs/header-attribs/bar.h (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/header-attribs/baz.h (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/header-attribs/foo.h (contents, props changed)
vendor/clang/dist/test/Modules/Inputs/header-attribs/modular.modulemap
vendor/clang/dist/test/Modules/Inputs/header-attribs/textual.modulemap
vendor/clang/dist/test/Modules/check-for-sanitizer-feature.cpp (contents, props changed)
vendor/clang/dist/test/Modules/header-attribs.cpp (contents, props changed)
vendor/clang/dist/test/Modules/preprocess-missing.modulemap
Deleted:
vendor/clang/dist/test/CodeGenCXX/unaligned-duplicated-mangle-name.cpp
Modified:
vendor/clang/dist/docs/Modules.rst
vendor/clang/dist/include/clang/Basic/DiagnosticLexKinds.td
vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td
vendor/clang/dist/include/clang/Basic/DiagnosticSerializationKinds.td
vendor/clang/dist/include/clang/Basic/Module.h
vendor/clang/dist/include/clang/Basic/Sanitizers.h
vendor/clang/dist/include/clang/Driver/CC1Options.td
vendor/clang/dist/include/clang/Frontend/CodeGenOptions.def
vendor/clang/dist/include/clang/Lex/ModuleMap.h
vendor/clang/dist/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
vendor/clang/dist/lib/ARCMigrate/TransformActions.cpp
vendor/clang/dist/lib/AST/ASTContext.cpp
vendor/clang/dist/lib/AST/ASTDiagnostic.cpp
vendor/clang/dist/lib/AST/ASTStructuralEquivalence.cpp
vendor/clang/dist/lib/AST/DeclPrinter.cpp
vendor/clang/dist/lib/AST/Expr.cpp
vendor/clang/dist/lib/AST/ExprConstant.cpp
vendor/clang/dist/lib/AST/ItaniumMangle.cpp
vendor/clang/dist/lib/AST/NestedNameSpecifier.cpp
vendor/clang/dist/lib/Analysis/PrintfFormatString.cpp
vendor/clang/dist/lib/Analysis/PseudoConstantAnalysis.cpp
vendor/clang/dist/lib/Analysis/ScanfFormatString.cpp
vendor/clang/dist/lib/Basic/IdentifierTable.cpp
vendor/clang/dist/lib/Basic/LangOptions.cpp
vendor/clang/dist/lib/Basic/Module.cpp
vendor/clang/dist/lib/Basic/TargetInfo.cpp
vendor/clang/dist/lib/CodeGen/BackendUtil.cpp
vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp
vendor/clang/dist/lib/CodeGen/CGCall.cpp
vendor/clang/dist/lib/CodeGen/CGCoroutine.cpp
vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp
vendor/clang/dist/lib/CodeGen/CGDebugInfo.h
vendor/clang/dist/lib/CodeGen/CGExpr.cpp
vendor/clang/dist/lib/CodeGen/CGExprScalar.cpp
vendor/clang/dist/lib/CodeGen/CodeGenFunction.cpp
vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp
vendor/clang/dist/lib/Driver/SanitizerArgs.cpp
vendor/clang/dist/lib/Edit/RewriteObjCFoundationAPI.cpp
vendor/clang/dist/lib/Frontend/CompilerInstance.cpp
vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp
vendor/clang/dist/lib/Frontend/FrontendAction.cpp
vendor/clang/dist/lib/Frontend/FrontendActions.cpp
vendor/clang/dist/lib/Frontend/InitHeaderSearch.cpp
vendor/clang/dist/lib/Frontend/Rewrite/FrontendActions.cpp
vendor/clang/dist/lib/Frontend/Rewrite/InclusionRewriter.cpp
vendor/clang/dist/lib/Frontend/SerializedDiagnosticReader.cpp
vendor/clang/dist/lib/Lex/HeaderSearch.cpp
vendor/clang/dist/lib/Lex/Lexer.cpp
vendor/clang/dist/lib/Lex/LiteralSupport.cpp
vendor/clang/dist/lib/Lex/ModuleMap.cpp
vendor/clang/dist/lib/Lex/PPDirectives.cpp
vendor/clang/dist/lib/Parse/ParseDecl.cpp
vendor/clang/dist/lib/Parse/ParseDeclCXX.cpp
vendor/clang/dist/lib/Parse/ParseExpr.cpp
vendor/clang/dist/lib/Parse/ParseInit.cpp
vendor/clang/dist/lib/Parse/ParseOpenMP.cpp
vendor/clang/dist/lib/Parse/ParseStmt.cpp
vendor/clang/dist/lib/Parse/ParseTentative.cpp
vendor/clang/dist/lib/Parse/Parser.cpp
vendor/clang/dist/lib/Rewrite/HTMLRewrite.cpp
vendor/clang/dist/lib/Sema/CoroutineStmtBuilder.h
vendor/clang/dist/lib/Sema/SemaCodeComplete.cpp
vendor/clang/dist/lib/Sema/SemaCoroutine.cpp
vendor/clang/dist/lib/Sema/SemaDecl.cpp
vendor/clang/dist/lib/Sema/SemaDeclCXX.cpp
vendor/clang/dist/lib/Sema/SemaExpr.cpp
vendor/clang/dist/lib/Sema/SemaLambda.cpp
vendor/clang/dist/lib/Sema/SemaLookup.cpp
vendor/clang/dist/lib/Sema/SemaStmt.cpp
vendor/clang/dist/lib/Sema/SemaStmtAsm.cpp
vendor/clang/dist/lib/Sema/SemaTemplateDeduction.cpp
vendor/clang/dist/lib/Sema/SemaType.cpp
vendor/clang/dist/lib/Sema/TreeTransform.h
vendor/clang/dist/lib/Serialization/ASTReader.cpp
vendor/clang/dist/lib/Serialization/ASTWriter.cpp
vendor/clang/dist/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp
vendor/clang/dist/lib/StaticAnalyzer/Core/ExprEngine.cpp
vendor/clang/dist/lib/StaticAnalyzer/Core/SValBuilder.cpp
vendor/clang/dist/lib/StaticAnalyzer/Core/SimpleSValBuilder.cpp
vendor/clang/dist/test/CodeGen/thin_link_bitcode.c
vendor/clang/dist/test/CodeGen/ubsan-pointer-overflow.m
vendor/clang/dist/test/CodeGenCoroutines/coro-params.cpp
vendor/clang/dist/test/CodeGenObjCXX/arc-mangle.mm
vendor/clang/dist/test/Driver/fsanitize-coverage.c
vendor/clang/dist/test/Integration/carbon.c
vendor/clang/dist/test/Integration/cocoa-pch.m
vendor/clang/dist/test/Integration/cocoa.m
vendor/clang/dist/test/Misc/ast-print-objectivec.m
vendor/clang/dist/test/Modules/diagnostics.modulemap
vendor/clang/dist/test/Modules/lookup.m
vendor/clang/dist/test/Modules/preprocess-module.cpp
vendor/clang/dist/test/Sema/warn-strict-prototypes.m
vendor/clang/dist/test/SemaCXX/coroutines.cpp
vendor/clang/dist/test/SemaOpenCL/func.cl
vendor/clang/dist/test/SemaTemplate/deduction-crash.cpp
vendor/clang/dist/test/lit.cfg
vendor/clang/dist/unittests/AST/DeclPrinterTest.cpp
Modified: vendor/clang/dist/docs/Modules.rst
==============================================================================
--- vendor/clang/dist/docs/Modules.rst Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/docs/Modules.rst Sat Jun 3 15:20:48 2017 (r319525)
@@ -469,10 +469,17 @@ A header declaration specifies that a particular heade
.. parsed-literal::
*header-declaration*:
- ``private``:sub:`opt` ``textual``:sub:`opt` ``header`` *string-literal*
- ``umbrella`` ``header`` *string-literal*
- ``exclude`` ``header`` *string-literal*
+ ``private``:sub:`opt` ``textual``:sub:`opt` ``header`` *string-literal* *header-attrs*:sub:`opt`
+ ``umbrella`` ``header`` *string-literal* *header-attrs*:sub:`opt`
+ ``exclude`` ``header`` *string-literal* *header-attrs*:sub:`opt`
+ *header-attrs*:
+ '{' *header-attr** '}'
+
+ *header-attr*:
+ ``size`` *integer-literal*
+ ``mtime`` *integer-literal*
+
A header declaration that does not contain ``exclude`` nor ``textual`` specifies a header that contributes to the enclosing module. Specifically, when the module is built, the named header will be parsed and its declarations will be (logically) placed into the enclosing submodule.
A header with the ``umbrella`` specifier is called an umbrella header. An umbrella header includes all of the headers within its directory (and any subdirectories), and is typically used (in the ``#include`` world) to easily access the full API provided by a particular library. With modules, an umbrella header is a convenient shortcut that eliminates the need to write out ``header`` declarations for every library header. A given directory can only contain a single umbrella header.
@@ -503,6 +510,18 @@ A header with the ``exclude`` specifier is excluded fr
}
A given header shall not be referenced by more than one *header-declaration*.
+
+Two *header-declaration*\s, or a *header-declaration* and a ``#include``, are
+considered to refer to the same file if the paths resolve to the same file
+and the specified *header-attr*\s (if any) match the attributes of that file,
+even if the file is named differently (for instance, by a relative path or
+via symlinks).
+
+.. note::
+ The use of *header-attr*\s avoids the need for Clang to speculatively
+ ``stat`` every header referenced by a module map. It is recommended that
+ *header-attr*\s only be used in machine-generated module maps, to avoid
+ mismatches between attribute values and the corresponding files.
Umbrella directory declaration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Modified: vendor/clang/dist/include/clang/Basic/DiagnosticLexKinds.td
==============================================================================
--- vendor/clang/dist/include/clang/Basic/DiagnosticLexKinds.td Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/include/clang/Basic/DiagnosticLexKinds.td Sat Jun 3 15:20:48 2017 (r319525)
@@ -664,6 +664,12 @@ def warn_mmap_mismatched_top_level_private : Warning<
InGroup<PrivateModule>;
def note_mmap_rename_top_level_private_as_submodule : Note<
"make '%0' a submodule of '%1' to ensure it can be found by name">;
+def err_mmap_duplicate_header_attribute : Error<
+ "header attribute '%0' specified multiple times">;
+def err_mmap_invalid_header_attribute_value : Error<
+ "expected integer literal as value for header attribute '%0'">;
+def err_mmap_expected_header_attribute : Error<
+ "expected a header attribute name ('size' or 'mtime')">;
def warn_auto_module_import : Warning<
"treating #%select{include|import|include_next|__include_macros}0 as an "
Modified: vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td
==============================================================================
--- vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/include/clang/Basic/DiagnosticSemaKinds.td Sat Jun 3 15:20:48 2017 (r319525)
@@ -4584,7 +4584,7 @@ def warn_missing_prototype : Warning<
def note_declaration_not_a_prototype : Note<
"this declaration is not a prototype; add 'void' to make it a prototype for a zero-parameter function">;
def warn_strict_prototypes : Warning<
- "this %select{function declaration is not|"
+ "this %select{function declaration is not|block declaration is not|"
"old-style function definition is not preceded by}0 a prototype">,
InGroup<DiagGroup<"strict-prototypes">>, DefaultIgnore;
def warn_missing_variable_declarations : Warning<
@@ -7268,7 +7268,7 @@ def err_invalid_conversion_between_vector_and_integer
"invalid conversion between vector type %0 and integer type %1 "
"of different size">;
-def err_opencl_function_pointer_variable : Error<
+def err_opencl_function_pointer : Error<
"pointers to functions are not allowed">;
def err_opencl_taking_function_address : Error<
Modified: vendor/clang/dist/include/clang/Basic/DiagnosticSerializationKinds.td
==============================================================================
--- vendor/clang/dist/include/clang/Basic/DiagnosticSerializationKinds.td Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/include/clang/Basic/DiagnosticSerializationKinds.td Sat Jun 3 15:20:48 2017 (r319525)
@@ -174,10 +174,6 @@ def note_module_odr_violation_mismatch_decl_diff : Not
"method %2 with %ordinal3 parameter of type %4%select{| decayed from %6}5|"
"method %2 with %ordinal3 parameter named %4}1">;
-def warn_module_uses_date_time : Warning<
- "%select{precompiled header|module}0 uses __DATE__ or __TIME__">,
- InGroup<DiagGroup<"pch-date-time">>;
-
def warn_duplicate_module_file_extension : Warning<
"duplicate module file extension block name '%0'">,
InGroup<ModuleFileExtension>;
@@ -186,7 +182,15 @@ def warn_module_system_bit_conflict : Warning<
"module file '%0' was validated as a system module and is now being imported "
"as a non-system module; any difference in diagnostic options will be ignored">,
InGroup<ModuleConflict>;
+} // let CategoryName
+let CategoryName = "AST Serialization Issue" in {
+def warn_module_uses_date_time : Warning<
+ "%select{precompiled header|module}0 uses __DATE__ or __TIME__">,
+ InGroup<DiagGroup<"pch-date-time">>;
+def err_module_no_size_mtime_for_header : Error<
+ "cannot emit module %0: %select{size|mtime}1 must be explicitly specified "
+ "for missing header file \"%2\"">;
} // let CategoryName
} // let Component
Modified: vendor/clang/dist/include/clang/Basic/Module.h
==============================================================================
--- vendor/clang/dist/include/clang/Basic/Module.h Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/include/clang/Basic/Module.h Sat Jun 3 15:20:48 2017 (r319525)
@@ -154,10 +154,18 @@ class Module { (public)
/// \brief Stored information about a header directive that was found in the
/// module map file but has not been resolved to a file.
struct UnresolvedHeaderDirective {
+ HeaderKind Kind = HK_Normal;
SourceLocation FileNameLoc;
std::string FileName;
- bool IsUmbrella;
+ bool IsUmbrella = false;
+ bool HasBuiltinHeader = false;
+ Optional<off_t> Size;
+ Optional<time_t> ModTime;
};
+
+ /// Headers that are mentioned in the module map file but that we have not
+ /// yet attempted to resolve to a file on the file system.
+ SmallVector<UnresolvedHeaderDirective, 1> UnresolvedHeaders;
/// \brief Headers that are mentioned in the module map file but could not be
/// found on the file system.
Modified: vendor/clang/dist/include/clang/Basic/Sanitizers.h
==============================================================================
--- vendor/clang/dist/include/clang/Basic/Sanitizers.h Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/include/clang/Basic/Sanitizers.h Sat Jun 3 15:20:48 2017 (r319525)
@@ -61,8 +61,8 @@ struct SanitizerSet {
Mask = Value ? (Mask | K) : (Mask & ~K);
}
- /// \brief Disable all sanitizers.
- void clear() { Mask = 0; }
+ /// Disable the sanitizers specified in \p K.
+ void clear(SanitizerMask K = SanitizerKind::All) { Mask &= ~K; }
/// \brief Returns true if at least one sanitizer is enabled.
bool empty() const { return Mask == 0; }
@@ -78,6 +78,12 @@ SanitizerMask parseSanitizerValue(StringRef Value, boo
/// For each sanitizer group bit set in \p Kinds, set the bits for sanitizers
/// this group enables.
SanitizerMask expandSanitizerGroups(SanitizerMask Kinds);
+
+/// Return the sanitizers which do not affect preprocessing.
+static inline SanitizerMask getPPTransparentSanitizers() {
+ return SanitizerKind::CFI | SanitizerKind::Integer |
+ SanitizerKind::Nullability | SanitizerKind::Undefined;
+}
} // end namespace clang
Modified: vendor/clang/dist/include/clang/Driver/CC1Options.td
==============================================================================
--- vendor/clang/dist/include/clang/Driver/CC1Options.td Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/include/clang/Driver/CC1Options.td Sat Jun 3 15:20:48 2017 (r319525)
@@ -293,6 +293,9 @@ def fsanitize_coverage_trace_gep
def fsanitize_coverage_8bit_counters
: Flag<["-"], "fsanitize-coverage-8bit-counters">,
HelpText<"Enable frequency counters in sanitizer coverage">;
+def fsanitize_coverage_inline_8bit_counters
+ : Flag<["-"], "fsanitize-coverage-inline-8bit-counters">,
+ HelpText<"Enable inline 8-bit counters in sanitizer coverage">;
def fsanitize_coverage_trace_pc
: Flag<["-"], "fsanitize-coverage-trace-pc">,
HelpText<"Enable PC tracing in sanitizer coverage">;
Modified: vendor/clang/dist/include/clang/Frontend/CodeGenOptions.def
==============================================================================
--- vendor/clang/dist/include/clang/Frontend/CodeGenOptions.def Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/include/clang/Frontend/CodeGenOptions.def Sat Jun 3 15:20:48 2017 (r319525)
@@ -163,6 +163,7 @@ CODEGENOPT(SanitizeCoverageTracePC, 1, 0) ///< Enable
///< in sanitizer coverage.
CODEGENOPT(SanitizeCoverageTracePCGuard, 1, 0) ///< Enable PC tracing with guard
///< in sanitizer coverage.
+CODEGENOPT(SanitizeCoverageInline8bitCounters, 1, 0) ///< Use inline 8bit counters.
CODEGENOPT(SanitizeCoverageNoPrune, 1, 0) ///< Disable coverage pruning.
CODEGENOPT(SanitizeStats , 1, 0) ///< Collect statistics for sanitizers.
CODEGENOPT(SimplifyLibCalls , 1, 1) ///< Set when -fbuiltin is enabled.
Modified: vendor/clang/dist/include/clang/Lex/ModuleMap.h
==============================================================================
--- vendor/clang/dist/include/clang/Lex/ModuleMap.h Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/include/clang/Lex/ModuleMap.h Sat Jun 3 15:20:48 2017 (r319525)
@@ -26,6 +26,7 @@
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/TinyPtrVector.h"
#include "llvm/ADT/Twine.h"
#include <algorithm>
#include <memory>
@@ -116,6 +117,11 @@ class ModuleMap { (public)
// Adjust ModuleMap::addHeader.
};
+ /// Convert a header kind to a role. Requires Kind to not be HK_Excluded.
+ static ModuleHeaderRole headerKindToRole(Module::HeaderKind Kind);
+ /// Convert a header role to a kind.
+ static Module::HeaderKind headerRoleToKind(ModuleHeaderRole Role);
+
/// \brief A header that is known to reside within a given module,
/// whether it was included or excluded.
class KnownHeader {
@@ -165,7 +171,13 @@ class ModuleMap { (public)
/// \brief Mapping from each header to the module that owns the contents of
/// that header.
HeadersMap Headers;
-
+
+ /// Map from file sizes to modules with lazy header directives of that size.
+ mutable llvm::DenseMap<off_t, llvm::TinyPtrVector<Module*>> LazyHeadersBySize;
+ /// Map from mtimes to modules with lazy header directives with those mtimes.
+ mutable llvm::DenseMap<time_t, llvm::TinyPtrVector<Module*>>
+ LazyHeadersByModTime;
+
/// \brief Mapping from directories with umbrella headers to the module
/// that is generated from the umbrella header.
///
@@ -257,22 +269,30 @@ class ModuleMap { (public)
/// resolved.
Module *resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const;
- /// Resolve the given header directive to an actual header file.
+ /// Add an unresolved header to a module.
+ void addUnresolvedHeader(Module *Mod,
+ Module::UnresolvedHeaderDirective Header);
+
+ /// Look up the given header directive to find an actual header file.
///
/// \param M The module in which we're resolving the header directive.
/// \param Header The header directive to resolve.
/// \param RelativePathName Filled in with the relative path name from the
/// module to the resolved header.
/// \return The resolved file, if any.
- const FileEntry *resolveHeader(Module *M,
- Module::UnresolvedHeaderDirective Header,
- SmallVectorImpl<char> &RelativePathName);
+ const FileEntry *findHeader(Module *M,
+ const Module::UnresolvedHeaderDirective &Header,
+ SmallVectorImpl<char> &RelativePathName);
+ /// Resolve the given header directive.
+ void resolveHeader(Module *M,
+ const Module::UnresolvedHeaderDirective &Header);
+
/// Attempt to resolve the specified header directive as naming a builtin
/// header.
- const FileEntry *
- resolveAsBuiltinHeader(Module *M, Module::UnresolvedHeaderDirective Header,
- SmallVectorImpl<char> &BuiltinPathName);
+ /// \return \c true if a corresponding builtin header was found.
+ bool resolveAsBuiltinHeader(Module *M,
+ const Module::UnresolvedHeaderDirective &Header);
/// \brief Looks up the modules that \p File corresponds to.
///
@@ -367,6 +387,15 @@ class ModuleMap { (public)
/// Typically, \ref findModuleForHeader should be used instead, as it picks
/// the preferred module for the header.
ArrayRef<KnownHeader> findAllModulesForHeader(const FileEntry *File) const;
+
+ /// Resolve all lazy header directives for the specified file.
+ ///
+ /// This ensures that the HeaderFileInfo on HeaderSearch is up to date. This
+ /// is effectively internal, but is exposed so HeaderSearch can call it.
+ void resolveHeaderDirectives(const FileEntry *File) const;
+
+ /// Resolve all lazy header directives for the specified module.
+ void resolveHeaderDirectives(Module *Mod) const;
/// \brief Reports errors if a module must not include a specific file.
///
Modified: vendor/clang/dist/lib/ARCMigrate/TransRetainReleaseDealloc.cpp
==============================================================================
--- vendor/clang/dist/lib/ARCMigrate/TransRetainReleaseDealloc.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/ARCMigrate/TransRetainReleaseDealloc.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -78,6 +78,7 @@ class RetainReleaseDeallocRemover : (public)
}
}
// Pass through.
+ LLVM_FALLTHROUGH;
case OMF_retain:
case OMF_release:
if (E->getReceiverKind() == ObjCMessageExpr::Instance)
Modified: vendor/clang/dist/lib/ARCMigrate/TransformActions.cpp
==============================================================================
--- vendor/clang/dist/lib/ARCMigrate/TransformActions.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/ARCMigrate/TransformActions.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -539,6 +539,7 @@ void TransformActionsImpl::addRemoval(CharSourceRange
return;
case Range_Contains:
RI->End = newRange.End;
+ LLVM_FALLTHROUGH;
case Range_ExtendsBegin:
newRange.End = RI->End;
Removals.erase(RI);
Modified: vendor/clang/dist/lib/AST/ASTContext.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/ASTContext.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/AST/ASTContext.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -6240,6 +6240,8 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T
S += "{objc_class=}";
return;
}
+ // TODO: Double check to make sure this intentially falls through.
+ LLVM_FALLTHROUGH;
}
case Type::ObjCInterface: {
Modified: vendor/clang/dist/lib/AST/ASTDiagnostic.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/ASTDiagnostic.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/AST/ASTDiagnostic.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -360,6 +360,7 @@ void clang::FormatASTNodeDiagnosticArgument(
Modifier = StringRef();
Argument = StringRef();
// Fall through
+ LLVM_FALLTHROUGH;
}
case DiagnosticsEngine::ak_qualtype: {
assert(Modifier.empty() && Argument.empty() &&
Modified: vendor/clang/dist/lib/AST/ASTStructuralEquivalence.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/ASTStructuralEquivalence.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/AST/ASTStructuralEquivalence.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -424,6 +424,7 @@ static bool IsStructurallyEquivalent(StructuralEquival
return false;
// Fall through to check the bits common with FunctionNoProtoType.
+ LLVM_FALLTHROUGH;
}
case Type::FunctionNoProto: {
Modified: vendor/clang/dist/lib/AST/DeclPrinter.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/DeclPrinter.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/AST/DeclPrinter.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -1189,7 +1189,9 @@ void DeclPrinter::VisitObjCMethodDecl(ObjCMethodDecl *
for (const auto *PI : OMD->parameters()) {
// FIXME: selector is missing here!
pos = name.find_first_of(':', lastPos);
- Out << " " << name.substr(lastPos, pos - lastPos) << ':';
+ if (lastPos != 0)
+ Out << " ";
+ Out << name.substr(lastPos, pos - lastPos) << ':';
PrintObjCMethodType(OMD->getASTContext(),
PI->getObjCDeclQualifier(),
PI->getType());
@@ -1198,7 +1200,7 @@ void DeclPrinter::VisitObjCMethodDecl(ObjCMethodDecl *
}
if (OMD->param_begin() == OMD->param_end())
- Out << " " << name;
+ Out << name;
if (OMD->isVariadic())
Out << ", ...";
Modified: vendor/clang/dist/lib/AST/Expr.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/Expr.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/AST/Expr.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -1576,6 +1576,7 @@ bool CastExpr::CastConsistency() const {
getSubExpr()->getType()->isBlockPointerType());
assert(getType()->getPointeeType().getAddressSpace() !=
getSubExpr()->getType()->getPointeeType().getAddressSpace());
+ LLVM_FALLTHROUGH;
// These should not have an inheritance path.
case CK_Dynamic:
case CK_ToUnion:
@@ -2102,6 +2103,7 @@ bool Expr::isUnusedResultAWarning(const Expr *&WarnE,
}
// Fallthrough for generic call handling.
+ LLVM_FALLTHROUGH;
}
case CallExprClass:
case CXXMemberCallExprClass:
Modified: vendor/clang/dist/lib/AST/ExprConstant.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/ExprConstant.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/AST/ExprConstant.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -736,6 +736,7 @@ namespace {
if (!HasFoldFailureDiagnostic)
break;
// We've already failed to fold something. Keep that diagnostic.
+ LLVM_FALLTHROUGH;
case EM_ConstantExpression:
case EM_PotentialConstantExpression:
case EM_ConstantExpressionUnevaluated:
@@ -10374,6 +10375,7 @@ static ICEDiag CheckICE(const Expr* E, const ASTContex
}
// OffsetOf falls through here.
+ LLVM_FALLTHROUGH;
}
case Expr::OffsetOfExprClass: {
// Note that per C99, offsetof must be an ICE. And AFAIK, using
@@ -10476,6 +10478,7 @@ static ICEDiag CheckICE(const Expr* E, const ASTContex
return Worst(LHSResult, RHSResult);
}
}
+ LLVM_FALLTHROUGH;
}
case Expr::ImplicitCastExprClass:
case Expr::CStyleCastExprClass:
Modified: vendor/clang/dist/lib/AST/ItaniumMangle.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/ItaniumMangle.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/AST/ItaniumMangle.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -1459,8 +1459,6 @@ void CXXNameMangler::mangleNestedName(const NamedDecl
// We do not consider restrict a distinguishing attribute for overloading
// purposes so we must not mangle it.
MethodQuals.removeRestrict();
- // __unaligned is not currently mangled in any way, so remove it.
- MethodQuals.removeUnaligned();
mangleQualifiers(MethodQuals);
mangleRefQualifier(Method->getRefQualifier());
}
@@ -2140,7 +2138,8 @@ CXXNameMangler::mangleOperatorName(OverloadedOperatorK
}
void CXXNameMangler::mangleQualifiers(Qualifiers Quals) {
- // Vendor qualifiers come first.
+ // Vendor qualifiers come first and if they are order-insensitive they must
+ // be emitted in reversed alphabetical order, see Itanium ABI 5.1.5.
// Address space qualifiers start with an ordinary letter.
if (Quals.hasAddressSpace()) {
@@ -2176,17 +2175,28 @@ void CXXNameMangler::mangleQualifiers(Qualifiers Quals
}
// The ARC ownership qualifiers start with underscores.
- switch (Quals.getObjCLifetime()) {
// Objective-C ARC Extension:
//
// <type> ::= U "__strong"
// <type> ::= U "__weak"
// <type> ::= U "__autoreleasing"
+ //
+ // Note: we emit __weak first to preserve the order as
+ // required by the Itanium ABI.
+ if (Quals.getObjCLifetime() == Qualifiers::OCL_Weak)
+ mangleVendorQualifier("__weak");
+
+ // __unaligned (from -fms-extensions)
+ if (Quals.hasUnaligned())
+ mangleVendorQualifier("__unaligned");
+
+ // Remaining ARC ownership qualifiers.
+ switch (Quals.getObjCLifetime()) {
case Qualifiers::OCL_None:
break;
case Qualifiers::OCL_Weak:
- mangleVendorQualifier("__weak");
+ // Do nothing as we already handled this case above.
break;
case Qualifiers::OCL_Strong:
@@ -3775,6 +3785,7 @@ recurse:
Out << "v1U" << Kind.size() << Kind;
}
// Fall through to mangle the cast itself.
+ LLVM_FALLTHROUGH;
case Expr::CStyleCastExprClass:
mangleCastExpression(E, "cv");
@@ -4327,7 +4338,7 @@ bool CXXNameMangler::mangleSubstitution(const NamedDec
/// substitutions.
static bool hasMangledSubstitutionQualifiers(QualType T) {
Qualifiers Qs = T.getQualifiers();
- return Qs.getCVRQualifiers() || Qs.hasAddressSpace();
+ return Qs.getCVRQualifiers() || Qs.hasAddressSpace() || Qs.hasUnaligned();
}
bool CXXNameMangler::mangleSubstitution(QualType T) {
Modified: vendor/clang/dist/lib/AST/NestedNameSpecifier.cpp
==============================================================================
--- vendor/clang/dist/lib/AST/NestedNameSpecifier.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/AST/NestedNameSpecifier.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -290,6 +290,7 @@ NestedNameSpecifier::print(raw_ostream &OS,
case TypeSpecWithTemplate:
OS << "template ";
// Fall through to print the type.
+ LLVM_FALLTHROUGH;
case TypeSpec: {
const Type *T = getAsType();
Modified: vendor/clang/dist/lib/Analysis/PrintfFormatString.cpp
==============================================================================
--- vendor/clang/dist/lib/Analysis/PrintfFormatString.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Analysis/PrintfFormatString.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -441,6 +441,7 @@ ArgType PrintfSpecifier::getArgType(ASTContext &Ctx,
case LengthModifier::AsShort:
if (Ctx.getTargetInfo().getTriple().isOSMSVCRT())
return Ctx.IntTy;
+ LLVM_FALLTHROUGH;
default:
return ArgType::Invalid();
}
Modified: vendor/clang/dist/lib/Analysis/PseudoConstantAnalysis.cpp
==============================================================================
--- vendor/clang/dist/lib/Analysis/PseudoConstantAnalysis.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Analysis/PseudoConstantAnalysis.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -109,6 +109,7 @@ void PseudoConstantAnalysis::RunAnalysis() {
// Do not visit the children
continue;
+ LLVM_FALLTHROUGH;
}
case BO_AddAssign:
case BO_SubAssign:
Modified: vendor/clang/dist/lib/Analysis/ScanfFormatString.cpp
==============================================================================
--- vendor/clang/dist/lib/Analysis/ScanfFormatString.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Analysis/ScanfFormatString.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -341,6 +341,7 @@ ArgType ScanfSpecifier::getArgType(ASTContext &Ctx) co
case LengthModifier::AsShort:
if (Ctx.getTargetInfo().getTriple().isOSMSVCRT())
return ArgType::PtrTo(ArgType::AnyCharTy);
+ LLVM_FALLTHROUGH;
default:
return ArgType::Invalid();
}
@@ -357,6 +358,7 @@ ArgType ScanfSpecifier::getArgType(ASTContext &Ctx) co
case LengthModifier::AsShort:
if (Ctx.getTargetInfo().getTriple().isOSMSVCRT())
return ArgType::PtrTo(ArgType::AnyCharTy);
+ LLVM_FALLTHROUGH;
default:
return ArgType::Invalid();
}
Modified: vendor/clang/dist/lib/Basic/IdentifierTable.cpp
==============================================================================
--- vendor/clang/dist/lib/Basic/IdentifierTable.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Basic/IdentifierTable.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -551,6 +551,7 @@ ObjCInstanceTypeFamily Selector::getInstTypeMethodFami
case 's':
if (startsWithWord(name, "shared")) return OIT_ReturnsSelf;
if (startsWithWord(name, "standard")) return OIT_Singleton;
+ break;
case 'i':
if (startsWithWord(name, "init")) return OIT_Init;
default:
Modified: vendor/clang/dist/lib/Basic/LangOptions.cpp
==============================================================================
--- vendor/clang/dist/lib/Basic/LangOptions.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Basic/LangOptions.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -29,9 +29,7 @@ void LangOptions::resetNonModularOptions() {
Name = Default;
#include "clang/Basic/LangOptions.def"
- // FIXME: This should not be reset; modules can be different with different
- // sanitizer options (this affects __has_feature(address_sanitizer) etc).
- Sanitize.clear();
+ // These options do not affect AST generation.
SanitizerBlacklistFiles.clear();
XRayAlwaysInstrumentFiles.clear();
XRayNeverInstrumentFiles.clear();
Modified: vendor/clang/dist/lib/Basic/Module.cpp
==============================================================================
--- vendor/clang/dist/lib/Basic/Module.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Basic/Module.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -394,11 +394,30 @@ void Module::print(raw_ostream &OS, unsigned Indent) c
{"exclude ", HK_Excluded}};
for (auto &K : Kinds) {
+ assert(&K == &Kinds[K.Kind] && "kinds in wrong order");
for (auto &H : Headers[K.Kind]) {
OS.indent(Indent + 2);
OS << K.Prefix << "header \"";
OS.write_escaped(H.NameAsWritten);
- OS << "\"\n";
+ OS << "\" { size " << H.Entry->getSize()
+ << " mtime " << H.Entry->getModificationTime() << " }\n";
+ }
+ }
+ for (auto *Unresolved : {&UnresolvedHeaders, &MissingHeaders}) {
+ for (auto &U : *Unresolved) {
+ OS.indent(Indent + 2);
+ OS << Kinds[U.Kind].Prefix << "header \"";
+ OS.write_escaped(U.FileName);
+ OS << "\"";
+ if (U.Size || U.ModTime) {
+ OS << " {";
+ if (U.Size)
+ OS << " size " << *U.Size;
+ if (U.ModTime)
+ OS << " mtime " << *U.ModTime;
+ OS << " }";
+ }
+ OS << "\n";
}
}
Modified: vendor/clang/dist/lib/Basic/TargetInfo.cpp
==============================================================================
--- vendor/clang/dist/lib/Basic/TargetInfo.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Basic/TargetInfo.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -143,9 +143,11 @@ const char *TargetInfo::getTypeConstantSuffix(IntType
case UnsignedChar:
if (getCharWidth() < getIntWidth())
return "";
+ LLVM_FALLTHROUGH;
case UnsignedShort:
if (getShortWidth() < getIntWidth())
return "";
+ LLVM_FALLTHROUGH;
case UnsignedInt: return "U";
case UnsignedLong: return "UL";
case UnsignedLongLong: return "ULL";
Modified: vendor/clang/dist/lib/CodeGen/BackendUtil.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/BackendUtil.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/BackendUtil.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -49,6 +49,7 @@
#include "llvm/Transforms/IPO.h"
#include "llvm/Transforms/IPO/AlwaysInliner.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
+#include "llvm/Transforms/IPO/ThinLTOBitcodeWriter.h"
#include "llvm/Transforms/Instrumentation.h"
#include "llvm/Transforms/ObjCARC.h"
#include "llvm/Transforms/Scalar.h"
@@ -186,6 +187,7 @@ static void addSanitizerCoveragePass(const PassManager
Opts.TracePC = CGOpts.SanitizeCoverageTracePC;
Opts.TracePCGuard = CGOpts.SanitizeCoverageTracePCGuard;
Opts.NoPrune = CGOpts.SanitizeCoverageNoPrune;
+ Opts.Inline8bitCounters = CGOpts.SanitizeCoverageInline8bitCounters;
PM.add(createSanitizerCoverageModulePass(Opts));
}
@@ -897,6 +899,7 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManage
// create that pass manager here and use it as needed below.
legacy::PassManager CodeGenPasses;
bool NeedCodeGen = false;
+ Optional<raw_fd_ostream> ThinLinkOS;
// Append any output we need to the pass manager.
switch (Action) {
@@ -904,9 +907,24 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManage
break;
case Backend_EmitBC:
- MPM.addPass(BitcodeWriterPass(*OS, CodeGenOpts.EmitLLVMUseLists,
- CodeGenOpts.EmitSummaryIndex,
- CodeGenOpts.EmitSummaryIndex));
+ if (CodeGenOpts.EmitSummaryIndex) {
+ if (!CodeGenOpts.ThinLinkBitcodeFile.empty()) {
+ std::error_code EC;
+ ThinLinkOS.emplace(CodeGenOpts.ThinLinkBitcodeFile, EC,
+ llvm::sys::fs::F_None);
+ if (EC) {
+ Diags.Report(diag::err_fe_unable_to_open_output)
+ << CodeGenOpts.ThinLinkBitcodeFile << EC.message();
+ return;
+ }
+ }
+ MPM.addPass(
+ ThinLTOBitcodeWriterPass(*OS, ThinLinkOS ? &*ThinLinkOS : nullptr));
+ } else {
+ MPM.addPass(BitcodeWriterPass(*OS, CodeGenOpts.EmitLLVMUseLists,
+ CodeGenOpts.EmitSummaryIndex,
+ CodeGenOpts.EmitSummaryIndex));
+ }
break;
case Backend_EmitLL:
@@ -1029,6 +1047,7 @@ static void runThinLTOBackend(ModuleSummaryIndex *Comb
Conf.CGOptLevel = getCGOptLevel(CGOpts);
initTargetOptions(Conf.Options, CGOpts, TOpts, LOpts, HeaderOpts);
Conf.SampleProfile = std::move(SampleProfile);
+ Conf.UseNewPM = CGOpts.ExperimentalNewPassManager;
switch (Action) {
case Backend_EmitNothing:
Conf.PreCodeGenModuleHook = [](size_t Task, const Module &Mod) {
Modified: vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/CGBuiltin.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -2659,6 +2659,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const Function
Builder.CreateCall(CGM.CreateRuntimeFunction(FTy, Name),
llvm::ArrayRef<llvm::Value *>(Args)));
}
+ LLVM_FALLTHROUGH;
}
// OpenCL v2.0 s6.13.17.6 - Kernel query functions need bitcast of block
// parameter.
@@ -3813,6 +3814,7 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr(
case NEON::BI__builtin_neon_vcalt_v:
case NEON::BI__builtin_neon_vcaltq_v:
std::swap(Ops[0], Ops[1]);
+ LLVM_FALLTHROUGH;
case NEON::BI__builtin_neon_vcage_v:
case NEON::BI__builtin_neon_vcageq_v:
case NEON::BI__builtin_neon_vcagt_v:
@@ -5056,6 +5058,7 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned Bu
case NEON::BI__builtin_neon_vsri_n_v:
case NEON::BI__builtin_neon_vsriq_n_v:
rightShift = true;
+ LLVM_FALLTHROUGH;
case NEON::BI__builtin_neon_vsli_n_v:
case NEON::BI__builtin_neon_vsliq_n_v:
Ops[2] = EmitNeonShiftVector(Ops[2], Ty, rightShift);
Modified: vendor/clang/dist/lib/CodeGen/CGCall.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGCall.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/CGCall.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -4259,6 +4259,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo
Builder.CreateStore(elt, eltAddr);
}
// FALLTHROUGH
+ LLVM_FALLTHROUGH;
}
case ABIArgInfo::InAlloca:
Modified: vendor/clang/dist/lib/CodeGen/CGCoroutine.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGCoroutine.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/CGCoroutine.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -625,6 +625,7 @@ RValue CodeGenFunction::EmitCoroutineIntrinsic(const C
CGM.Error(E->getLocStart(), "this builtin expect that __builtin_coro_id has"
" been used earlier in this function");
// Fallthrough to the next case to add TokenNone as the first argument.
+ LLVM_FALLTHROUGH;
}
// @llvm.coro.suspend takes a token parameter. Add token 'none' as the first
// argument.
Modified: vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/CGDebugInfo.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -2781,6 +2781,7 @@ llvm::DICompositeType *CGDebugInfo::CreateLimitedType(
// them distinct if they are ODR-uniqued.
if (FullName.empty())
break;
+ LLVM_FALLTHROUGH;
case llvm::dwarf::DW_TAG_structure_type:
case llvm::dwarf::DW_TAG_union_type:
@@ -3263,7 +3264,7 @@ void CGDebugInfo::EmitInlineFunctionStart(CGBuilderTy
void CGDebugInfo::EmitInlineFunctionEnd(CGBuilderTy &Builder) {
assert(CurInlinedAt && "unbalanced inline scope stack");
- EmitFunctionEnd(Builder);
+ EmitFunctionEnd(Builder, nullptr);
setInlinedAt(llvm::DebugLoc(CurInlinedAt).getInlinedAt());
}
@@ -3332,7 +3333,7 @@ void CGDebugInfo::EmitLexicalBlockEnd(CGBuilderTy &Bui
LexicalBlockStack.pop_back();
}
-void CGDebugInfo::EmitFunctionEnd(CGBuilderTy &Builder) {
+void CGDebugInfo::EmitFunctionEnd(CGBuilderTy &Builder, llvm::Function *Fn) {
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
unsigned RCount = FnBeginRegionCount.back();
assert(RCount <= LexicalBlockStack.size() && "Region stack mismatch");
@@ -3344,6 +3345,9 @@ void CGDebugInfo::EmitFunctionEnd(CGBuilderTy &Builder
LexicalBlockStack.pop_back();
}
FnBeginRegionCount.pop_back();
+
+ if (Fn && Fn->getSubprogram())
+ DBuilder.finalizeSubprogram(Fn->getSubprogram());
}
llvm::DIType *CGDebugInfo::EmitTypeForVarWithBlocksAttr(const VarDecl *VD,
Modified: vendor/clang/dist/lib/CodeGen/CGDebugInfo.h
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGDebugInfo.h Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/CGDebugInfo.h Sat Jun 3 15:20:48 2017 (r319525)
@@ -367,7 +367,7 @@ class CGDebugInfo { (public)
void EmitFunctionDecl(GlobalDecl GD, SourceLocation Loc, QualType FnType);
/// Constructs the debug code for exiting a function.
- void EmitFunctionEnd(CGBuilderTy &Builder);
+ void EmitFunctionEnd(CGBuilderTy &Builder, llvm::Function *Fn);
/// Emit metadata to indicate the beginning of a new lexical block
/// and push the block onto the stack.
Modified: vendor/clang/dist/lib/CodeGen/CGExpr.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGExpr.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/CGExpr.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -1487,9 +1487,9 @@ void CodeGenFunction::EmitStoreOfScalar(llvm::Value *V
// Handle vectors differently to get better performance.
if (Ty->isVectorType()) {
llvm::Type *SrcTy = Value->getType();
- auto *VecTy = cast<llvm::VectorType>(SrcTy);
+ auto *VecTy = dyn_cast<llvm::VectorType>(SrcTy);
// Handle vec3 special.
- if (VecTy->getNumElements() == 3) {
+ if (VecTy && VecTy->getNumElements() == 3) {
// Our source is a vec3, do a shuffle vector to make it a vec4.
llvm::Constant *Mask[] = {Builder.getInt32(0), Builder.getInt32(1),
Builder.getInt32(2),
Modified: vendor/clang/dist/lib/CodeGen/CGExprScalar.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CGExprScalar.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/CGExprScalar.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -3887,7 +3887,7 @@ Value *CodeGenFunction::EmitCheckedInBoundsGEP(Value *
/// Return the result of the given binary operation.
auto eval = [&](BinaryOperator::Opcode Opcode, llvm::Value *LHS,
llvm::Value *RHS) -> llvm::Value * {
- assert(Opcode == BO_Add || Opcode == BO_Mul && "Can't eval binop");
+ assert((Opcode == BO_Add || Opcode == BO_Mul) && "Can't eval binop");
// If the operands are constants, return a constant result.
if (auto *LHSCI = dyn_cast<llvm::ConstantInt>(LHS)) {
Modified: vendor/clang/dist/lib/CodeGen/CodeGenFunction.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CodeGenFunction.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/CodeGenFunction.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -348,7 +348,7 @@ void CodeGenFunction::FinishFunction(SourceLocation En
// Emit debug descriptor for function end.
if (CGDebugInfo *DI = getDebugInfo())
- DI->EmitFunctionEnd(Builder);
+ DI->EmitFunctionEnd(Builder, CurFn);
// Reset the debug location to that of the simple 'return' expression, if any
// rather than that of the end of the function's scope '}'.
Modified: vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp
==============================================================================
--- vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/CodeGen/CodeGenModule.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -3841,6 +3841,7 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) {
// Skip variable templates
if (cast<VarDecl>(D)->getDescribedVarTemplate())
return;
+ LLVM_FALLTHROUGH;
case Decl::VarTemplateSpecialization:
EmitGlobal(cast<VarDecl>(D));
if (auto *DD = dyn_cast<DecompositionDecl>(D))
Modified: vendor/clang/dist/lib/Driver/SanitizerArgs.cpp
==============================================================================
--- vendor/clang/dist/lib/Driver/SanitizerArgs.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Driver/SanitizerArgs.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -48,13 +48,14 @@ enum CoverageFeature {
CoverageBB = 1 << 1,
CoverageEdge = 1 << 2,
CoverageIndirCall = 1 << 3,
- CoverageTraceBB = 1 << 4,
+ CoverageTraceBB = 1 << 4, // Deprecated.
CoverageTraceCmp = 1 << 5,
CoverageTraceDiv = 1 << 6,
CoverageTraceGep = 1 << 7,
- Coverage8bitCounters = 1 << 8,
+ Coverage8bitCounters = 1 << 8, // Deprecated.
CoverageTracePC = 1 << 9,
CoverageTracePCGuard = 1 << 10,
+ CoverageInline8bitCounters = 1 << 12,
CoverageNoPrune = 1 << 11,
};
@@ -530,7 +531,8 @@ SanitizerArgs::SanitizerArgs(const ToolChain &TC,
}
// trace-pc w/o func/bb/edge implies edge.
- if ((CoverageFeatures & (CoverageTracePC | CoverageTracePCGuard)) &&
+ if ((CoverageFeatures &
+ (CoverageTracePC | CoverageTracePCGuard | CoverageInline8bitCounters)) &&
!(CoverageFeatures & InsertionPointTypes))
CoverageFeatures |= CoverageEdge;
@@ -637,6 +639,7 @@ void SanitizerArgs::addArgs(const ToolChain &TC, const
std::make_pair(Coverage8bitCounters, "-fsanitize-coverage-8bit-counters"),
std::make_pair(CoverageTracePC, "-fsanitize-coverage-trace-pc"),
std::make_pair(CoverageTracePCGuard, "-fsanitize-coverage-trace-pc-guard"),
+ std::make_pair(CoverageInline8bitCounters, "-fsanitize-coverage-inline-8bit-counters"),
std::make_pair(CoverageNoPrune, "-fsanitize-coverage-no-prune")};
for (auto F : CoverageFlags) {
if (CoverageFeatures & F.first)
@@ -798,6 +801,7 @@ int parseCoverageFeatures(const Driver &D, const llvm:
.Case("trace-pc", CoverageTracePC)
.Case("trace-pc-guard", CoverageTracePCGuard)
.Case("no-prune", CoverageNoPrune)
+ .Case("inline-8bit-counters", CoverageInline8bitCounters)
.Default(0);
if (F == 0)
D.Diag(clang::diag::err_drv_unsupported_option_argument)
Modified: vendor/clang/dist/lib/Edit/RewriteObjCFoundationAPI.cpp
==============================================================================
--- vendor/clang/dist/lib/Edit/RewriteObjCFoundationAPI.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Edit/RewriteObjCFoundationAPI.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -798,24 +798,28 @@ static bool rewriteToNumberLiteral(const ObjCMessageEx
case NSAPI::NSNumberWithUnsignedInt:
case NSAPI::NSNumberWithUnsignedInteger:
CallIsUnsigned = true;
+ LLVM_FALLTHROUGH;
case NSAPI::NSNumberWithInt:
case NSAPI::NSNumberWithInteger:
break;
case NSAPI::NSNumberWithUnsignedLong:
CallIsUnsigned = true;
+ LLVM_FALLTHROUGH;
case NSAPI::NSNumberWithLong:
CallIsLong = true;
break;
case NSAPI::NSNumberWithUnsignedLongLong:
CallIsUnsigned = true;
+ LLVM_FALLTHROUGH;
case NSAPI::NSNumberWithLongLong:
CallIsLongLong = true;
break;
case NSAPI::NSNumberWithDouble:
CallIsDouble = true;
+ LLVM_FALLTHROUGH;
case NSAPI::NSNumberWithFloat:
CallIsFloating = true;
break;
Modified: vendor/clang/dist/lib/Frontend/CompilerInstance.cpp
==============================================================================
--- vendor/clang/dist/lib/Frontend/CompilerInstance.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Frontend/CompilerInstance.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -1727,6 +1727,7 @@ CompilerInstance::loadModule(SourceLocation ImportLoc,
diag::warn_module_config_mismatch)
<< ModuleFileName;
// Fall through to error out.
+ LLVM_FALLTHROUGH;
case ASTReader::VersionMismatch:
case ASTReader::HadErrors:
ModuleLoader::HadFatalFailure = true;
Modified: vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp
==============================================================================
--- vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Frontend/CompilerInvocation.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -768,6 +768,8 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, Arg
Opts.SanitizeCoverageTracePCGuard =
Args.hasArg(OPT_fsanitize_coverage_trace_pc_guard);
Opts.SanitizeCoverageNoPrune = Args.hasArg(OPT_fsanitize_coverage_no_prune);
+ Opts.SanitizeCoverageInline8bitCounters =
+ Args.hasArg(OPT_fsanitize_coverage_inline_8bit_counters);
Opts.SanitizeMemoryTrackOrigins =
getLastArgIntValue(Args, OPT_fsanitize_memory_track_origins_EQ, 0, Diags);
Opts.SanitizeMemoryUseAfterDtor =
@@ -2699,6 +2701,13 @@ std::string CompilerInvocation::getModuleHash() const
for (const auto &ext : frontendOpts.ModuleFileExtensions) {
code = ext->hashExtension(code);
}
+
+ // Extend the signature with the enabled sanitizers, if at least one is
+ // enabled. Sanitizers which cannot affect AST generation aren't hashed.
+ SanitizerSet SanHash = LangOpts->Sanitize;
+ SanHash.clear(getPPTransparentSanitizers());
+ if (!SanHash.empty())
+ code = hash_combine(code, SanHash.Mask);
return llvm::APInt(64, code).toString(36, /*Signed=*/false);
}
Modified: vendor/clang/dist/lib/Frontend/FrontendAction.cpp
==============================================================================
--- vendor/clang/dist/lib/Frontend/FrontendAction.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Frontend/FrontendAction.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -289,14 +289,28 @@ static void addHeaderInclude(StringRef HeaderName,
///
/// \param Includes Will be augmented with the set of \#includes or \#imports
/// needed to load all of the named headers.
-static std::error_code
-collectModuleHeaderIncludes(const LangOptions &LangOpts, FileManager &FileMgr,
- ModuleMap &ModMap, clang::Module *Module,
- SmallVectorImpl<char> &Includes) {
+static std::error_code collectModuleHeaderIncludes(
+ const LangOptions &LangOpts, FileManager &FileMgr, DiagnosticsEngine &Diag,
+ ModuleMap &ModMap, clang::Module *Module, SmallVectorImpl<char> &Includes) {
// Don't collect any headers for unavailable modules.
if (!Module->isAvailable())
return std::error_code();
+ // Resolve all lazy header directives to header files.
+ ModMap.resolveHeaderDirectives(Module);
+
+ // If any headers are missing, we can't build this module. In most cases,
+ // diagnostics for this should have already been produced; we only get here
+ // if explicit stat information was provided.
+ // FIXME: If the name resolves to a file with different stat information,
+ // produce a better diagnostic.
+ if (!Module->MissingHeaders.empty()) {
+ auto &MissingHeader = Module->MissingHeaders.front();
+ Diag.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing)
+ << MissingHeader.IsUmbrella << MissingHeader.FileName;
+ return std::error_code();
+ }
+
// Add includes for each of these headers.
for (auto HK : {Module::HK_Normal, Module::HK_Private}) {
for (Module::Header &H : Module->Headers[HK]) {
@@ -367,7 +381,7 @@ collectModuleHeaderIncludes(const LangOptions &LangOpt
SubEnd = Module->submodule_end();
Sub != SubEnd; ++Sub)
if (std::error_code Err = collectModuleHeaderIncludes(
- LangOpts, FileMgr, ModMap, *Sub, Includes))
+ LangOpts, FileMgr, Diag, ModMap, *Sub, Includes))
return Err;
return std::error_code();
@@ -494,7 +508,7 @@ getInputBufferForModule(CompilerInstance &CI, Module *
addHeaderInclude(UmbrellaHeader.NameAsWritten, HeaderContents,
CI.getLangOpts(), M->IsExternC);
Err = collectModuleHeaderIncludes(
- CI.getLangOpts(), FileMgr,
+ CI.getLangOpts(), FileMgr, CI.getDiagnostics(),
CI.getPreprocessor().getHeaderSearchInfo().getModuleMap(), M,
HeaderContents);
Modified: vendor/clang/dist/lib/Frontend/FrontendActions.cpp
==============================================================================
--- vendor/clang/dist/lib/Frontend/FrontendActions.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Frontend/FrontendActions.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -546,8 +546,11 @@ void PrintPreprocessedAction::ExecuteAction() {
// module itself before switching to the input buffer.
auto &Input = getCurrentInput();
if (Input.getKind().getFormat() == InputKind::ModuleMap) {
- if (Input.isFile())
- (*OS) << "# 1 \"" << Input.getFile() << "\"\n";
+ if (Input.isFile()) {
+ (*OS) << "# 1 \"";
+ OS->write_escaped(Input.getFile());
+ (*OS) << "\"\n";
+ }
// FIXME: Include additional information here so that we don't need the
// original source files to exist on disk.
getCurrentModule()->print(*OS);
Modified: vendor/clang/dist/lib/Frontend/InitHeaderSearch.cpp
==============================================================================
--- vendor/clang/dist/lib/Frontend/InitHeaderSearch.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Frontend/InitHeaderSearch.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -221,6 +221,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const l
case llvm::Triple::Win32:
if (triple.getEnvironment() != llvm::Triple::Cygnus)
break;
+ LLVM_FALLTHROUGH;
default:
// FIXME: temporary hack: hard-coded paths.
AddPath("/usr/local/include", System, false);
@@ -343,6 +344,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const l
AddPath(BaseSDKPath + "/target/include", System, false);
if (triple.isPS4CPU())
AddPath(BaseSDKPath + "/target/include_common", System, false);
+ LLVM_FALLTHROUGH;
}
default:
AddPath("/usr/include", ExternCSystem, false);
Modified: vendor/clang/dist/lib/Frontend/Rewrite/FrontendActions.cpp
==============================================================================
--- vendor/clang/dist/lib/Frontend/Rewrite/FrontendActions.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Frontend/Rewrite/FrontendActions.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -200,8 +200,11 @@ void RewriteIncludesAction::ExecuteAction() {
// module itself before switching to the input buffer.
auto &Input = getCurrentInput();
if (Input.getKind().getFormat() == InputKind::ModuleMap) {
- if (Input.isFile())
- (*OS) << "# 1 \"" << Input.getFile() << "\"\n";
+ if (Input.isFile()) {
+ (*OS) << "# 1 \"";
+ OS->write_escaped(Input.getFile());
+ (*OS) << "\"\n";
+ }
// FIXME: Include additional information here so that we don't need the
// original source files to exist on disk.
getCurrentModule()->print(*OS);
Modified: vendor/clang/dist/lib/Frontend/Rewrite/InclusionRewriter.cpp
==============================================================================
--- vendor/clang/dist/lib/Frontend/Rewrite/InclusionRewriter.cpp Sat Jun 3 15:20:41 2017 (r319524)
+++ vendor/clang/dist/lib/Frontend/Rewrite/InclusionRewriter.cpp Sat Jun 3 15:20:48 2017 (r319525)
@@ -177,7 +177,9 @@ void InclusionRewriter::FileSkipped(const FileEntry &/
/// directives. It does not say whether the file has been included, but it
/// provides more information about the directive (hash location instead
/// of location inside the included file). It is assumed that the matching
-/// FileChanged() or FileSkipped() is called after this.
+/// FileChanged() or FileSkipped() is called after this (or neither is
+/// called if this #include results in an error or does not textually include
+/// anything).
void InclusionRewriter::InclusionDirective(SourceLocation HashLoc,
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-all
mailing list