diff options
| author | hans <hans@chromium.org> | 2015-03-04 20:02:11 -0800 | 
|---|---|---|
| committer | Commit bot <commit-bot@chromium.org> | 2015-03-05 04:03:12 +0000 | 
| commit | 832e529746438a592d8c0a7edd76a8eb9290c8c3 (patch) | |
| tree | 162cc48e7028239807436a0a6b476d0322f5c3be | |
| parent | d8905bf21dcb6979b07da39f017bb72659fc3041 (diff) | |
| download | chromium_src-832e529746438a592d8c0a7edd76a8eb9290c8c3.zip chromium_src-832e529746438a592d8c0a7edd76a8eb9290c8c3.tar.gz chromium_src-832e529746438a592d8c0a7edd76a8eb9290c8c3.tar.bz2 | |
Roll Clang 223108:231191
Also introduce a build number in the package name, stop versioning
the Blink GC plugin, and remove repackage.sh.
BUG=444089
NOPRESUBMIT=true
Review URL: https://codereview.chromium.org/980523002
Cr-Commit-Position: refs/heads/master@{#319215}
| -rw-r--r-- | content/gpu/gpu_main.cc | 1 | ||||
| -rw-r--r-- | content/zygote/zygote_main_linux.cc | 1 | ||||
| -rw-r--r-- | sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc | 5 | ||||
| -rw-r--r-- | tools/clang/blink_gc_plugin/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | tools/clang/blink_gc_plugin/Edge.h | 1 | ||||
| -rw-r--r-- | tools/clang/blink_gc_plugin/RecordInfo.h | 1 | ||||
| -rwxr-xr-x | tools/clang/blink_gc_plugin/tests/test.sh | 1 | ||||
| -rwxr-xr-x | tools/clang/scripts/blink_gc_plugin_flags.sh | 5 | ||||
| -rwxr-xr-x | tools/clang/scripts/package.sh | 12 | ||||
| -rwxr-xr-x | tools/clang/scripts/plugin_flags.py | 6 | ||||
| -rwxr-xr-x | tools/clang/scripts/repackage.sh | 67 | ||||
| -rwxr-xr-x | tools/clang/scripts/update.sh | 369 | 
12 files changed, 35 insertions, 436 deletions
| diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc index f73bb0d..b34d42f 100644 --- a/content/gpu/gpu_main.cc +++ b/content/gpu/gpu_main.cc @@ -61,6 +61,7 @@  #if defined(SANITIZER_COVERAGE)  #include <sanitizer/common_interface_defs.h> +#include <sanitizer/coverage_interface.h>  #endif  const int kGpuTimeout = 10000; diff --git a/content/zygote/zygote_main_linux.cc b/content/zygote/zygote_main_linux.cc index efbfdb0..96fac21 100644 --- a/content/zygote/zygote_main_linux.cc +++ b/content/zygote/zygote_main_linux.cc @@ -67,6 +67,7 @@  #if defined(SANITIZER_COVERAGE)  #include <sanitizer/common_interface_defs.h> +#include <sanitizer/coverage_interface.h>  #endif  namespace content { diff --git a/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc b/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc index 2d337c6..8e7e144 100644 --- a/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc +++ b/sandbox/linux/integration_tests/bpf_dsl_seccomp_unittest.cc @@ -651,6 +651,10 @@ ResultExpr RedirectAllSyscallsPolicy::EvaluateSyscall(int sysno) const {    return UnsafeTrap(AllowRedirectedSyscall, NULL);  } +#if !defined(ADDRESS_SANITIZER) +// ASan does not allow changing the signal handler for SIGBUS, and treats it as +// a fatal signal. +  int bus_handler_fd_ = -1;  void SigBusHandler(int, siginfo_t* info, void* void_context) { @@ -679,6 +683,7 @@ BPF_TEST_C(SandboxBPF, SigBus, RedirectAllSyscallsPolicy) {    BPF_ASSERT(close(fds[1]) == 0);    BPF_ASSERT(c == 0x55);  } +#endif  // !defined(ADDRESS_SANITIZER)  BPF_TEST_C(SandboxBPF, SigMask, RedirectAllSyscallsPolicy) {    // Signal masks are potentially tricky to handle. For instance, if we diff --git a/tools/clang/blink_gc_plugin/CMakeLists.txt b/tools/clang/blink_gc_plugin/CMakeLists.txt index c511edf..7f1dee3 100644 --- a/tools/clang/blink_gc_plugin/CMakeLists.txt +++ b/tools/clang/blink_gc_plugin/CMakeLists.txt @@ -1,6 +1,6 @@  # This line is read by update.sh and other scripts in tools/clang/scripts  # Note: The spaces are significant. -set(LIBRARYNAME BlinkGCPlugin_14) +set(LIBRARYNAME BlinkGCPlugin)  add_llvm_loadable_module("lib${LIBRARYNAME}"                           BlinkGCPlugin.cpp diff --git a/tools/clang/blink_gc_plugin/Edge.h b/tools/clang/blink_gc_plugin/Edge.h index d0b78b5..7659968 100644 --- a/tools/clang/blink_gc_plugin/Edge.h +++ b/tools/clang/blink_gc_plugin/Edge.h @@ -24,6 +24,7 @@ class Collection;  // Bare-bones visitor.  class EdgeVisitor {   public: +  virtual ~EdgeVisitor() {}    virtual void VisitValue(Value*) {}    virtual void VisitRawPtr(RawPtr*) {}    virtual void VisitRefPtr(RefPtr*) {} diff --git a/tools/clang/blink_gc_plugin/RecordInfo.h b/tools/clang/blink_gc_plugin/RecordInfo.h index 82fb604..da2f415 100644 --- a/tools/clang/blink_gc_plugin/RecordInfo.h +++ b/tools/clang/blink_gc_plugin/RecordInfo.h @@ -23,6 +23,7 @@ class RecordCache;  class GraphPoint {   public:    GraphPoint() : traced_(false) {} +  virtual ~GraphPoint() {}    void MarkTraced() { traced_ = true; }    bool IsProperlyTraced() { return traced_ || !NeedsTracing().IsNeeded(); }    virtual const TracingStatus NeedsTracing() = 0; diff --git a/tools/clang/blink_gc_plugin/tests/test.sh b/tools/clang/blink_gc_plugin/tests/test.sh index 02c7477..95bb261 100755 --- a/tools/clang/blink_gc_plugin/tests/test.sh +++ b/tools/clang/blink_gc_plugin/tests/test.sh @@ -29,6 +29,7 @@ do_testcase() {      flags="$(cat "${3}")"    fi    local output="$("${CLANG_PATH}" -c -Wno-c++11-extensions \ +      -Wno-inaccessible-base \        -Xclang -load -Xclang "${PLUGIN_PATH}" \        -Xclang -add-plugin -Xclang blink-gc-plugin ${flags} ${1} 2>&1)"    local json="${input%cpp}graph.json" diff --git a/tools/clang/scripts/blink_gc_plugin_flags.sh b/tools/clang/scripts/blink_gc_plugin_flags.sh index 3654808..38ea72d 100755 --- a/tools/clang/scripts/blink_gc_plugin_flags.sh +++ b/tools/clang/scripts/blink_gc_plugin_flags.sh @@ -13,9 +13,6 @@ if uname -s | grep -q Darwin; then  else    LIBSUFFIX=so  fi -LIBNAME=\ -$(grep 'set(LIBRARYNAME' "$SRC_DIR"/tools/clang/blink_gc_plugin/CMakeLists.txt \ -    | cut -d ' ' -f 2 | tr -d ')')  FLAGS=""  PREFIX="-Xclang -plugin-arg-blink-gc-plugin -Xclang" @@ -31,5 +28,5 @@ for arg in "$@"; do    fi  done -echo -Xclang -load -Xclang $CLANG_LIB_PATH/lib$LIBNAME.$LIBSUFFIX \ +echo -Xclang -load -Xclang $CLANG_LIB_PATH/libBlinkGCPlugin.$LIBSUFFIX \    -Xclang -add-plugin -Xclang blink-gc-plugin $FLAGS diff --git a/tools/clang/scripts/package.sh b/tools/clang/scripts/package.sh index e0c0fcc..453a166 100755 --- a/tools/clang/scripts/package.sh +++ b/tools/clang/scripts/package.sh @@ -52,6 +52,7 @@ LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install"  LLVM_BUILD_DIR="${THIS_DIR}/../../../third_party/llvm-build"  LLVM_BIN_DIR="${LLVM_BUILD_DIR}/Release+Asserts/bin"  LLVM_LIB_DIR="${LLVM_BUILD_DIR}/Release+Asserts/lib" +STAMP_FILE="${LLVM_DIR}/../llvm-build/cr_build_revision"  echo "Diff in llvm:" | tee buildlog.txt  svn stat "${LLVM_DIR}" 2>&1 | tee -a buildlog.txt @@ -86,8 +87,7 @@ fi  "${THIS_DIR}"/update.sh --bootstrap --force-local-build --run-tests \      ${extra_flags} 2>&1 | tee -a buildlog.txt -R=$("${LLVM_BIN_DIR}/clang" --version | \ -     sed -ne 's/clang version .*(trunk \([0-9]*\))/\1/p') +R=$(cat "${STAMP_FILE}")  PDIR=clang-$R  rm -rf $PDIR @@ -122,11 +122,7 @@ fi  # Copy plugins. Some of the dylibs are pretty big, so copy only the ones we  # care about.  cp "${LLVM_LIB_DIR}/libFindBadConstructs.${SO_EXT}" $PDIR/lib - -BLINKGCPLUGIN_LIBNAME=\ -$(grep 'set(LIBRARYNAME' "$THIS_DIR"/../blink_gc_plugin/CMakeLists.txt \ -    | cut -d ' ' -f 2 | tr -d ')') -cp "${LLVM_LIB_DIR}/lib${BLINKGCPLUGIN_LIBNAME}.${SO_EXT}" $PDIR/lib +cp "${LLVM_LIB_DIR}/libBlinkGCPlugin.${SO_EXT}" $PDIR/lib  if [[ -n "${gcc_toolchain}" ]]; then    # Copy the stdlibc++.so.6 we linked Clang against so it can run. @@ -182,3 +178,5 @@ fi  echo To upload, run:  echo gsutil cp -a public-read $PDIR.tgz \       gs://chromium-browser-clang/$PLATFORM/$PDIR.tgz + +# FIXME: Warn if the file already exists on the server. diff --git a/tools/clang/scripts/plugin_flags.py b/tools/clang/scripts/plugin_flags.py index ae58199..3f61d6b 100755 --- a/tools/clang/scripts/plugin_flags.py +++ b/tools/clang/scripts/plugin_flags.py @@ -26,8 +26,4 @@ LIB_PATH = os.path.join(      'libFindBadConstructs.' + LIBSUFFIX)  print ('-Xclang -load -Xclang %s' -       ' -Xclang -add-plugin -Xclang find-bad-constructs' -       ' -Xclang -plugin-arg-find-bad-constructs' -       ' -Xclang check-weak-ptr-factory-order' -       ' -Xclang -plugin-arg-find-bad-constructs' -       ' -Xclang strict-virtual-specifiers') % LIB_PATH +       ' -Xclang -add-plugin -Xclang find-bad-constructs') % LIB_PATH diff --git a/tools/clang/scripts/repackage.sh b/tools/clang/scripts/repackage.sh deleted file mode 100755 index e19ab7e..0000000 --- a/tools/clang/scripts/repackage.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash -# Copyright 2014 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# This script will check out llvm and clang, build a full package -# with the latest plugin revisions and then repackage an existing -# clang-package with the new plugin revisions. - -# The new package can be uploaded to replace the existing clang -# package at the same clang revision. - -THIS_DIR="$(dirname "${0}")" -LLVM_BUILD_DIR="${THIS_DIR}/../../../third_party/llvm-build" -LLVM_TAR_DIR="${LLVM_BUILD_DIR}/Release+Asserts" -LLVM_BIN_DIR="${LLVM_TAR_DIR}/bin" -LLVM_LIB_DIR="${LLVM_TAR_DIR}/lib" - -set -eu - -if [ "$(uname -s)" = "Darwin" ]; then -  PLATFORM=Mac -  SO_EXT="dylib" -else -  PLATFORM=Linux_x64 -  SO_EXT="so" -fi - -# Build clang with the new plugin revisions. -"$THIS_DIR"/package.sh $@ - -R=$("${LLVM_BIN_DIR}/clang" --version | \ -     sed -ne 's/clang version .*(trunk \([0-9]*\))/\1/p') -PDIR=clang-$R - -if [ ! -f "$PDIR.tgz" ]; then -    echo "Could not find package archive $PDIR.tgz generated by package.sh" -    exit 1 -fi - -# We don't want to change the clang binary, so fetch the current clang -# package and add the plugin shared-libraries to the existing package. -rm -rf $LLVM_BUILD_DIR -"$THIS_DIR"/update.sh - -LIBNAME=\ -$(grep 'set(LIBRARYNAME' "$THIS_DIR"/../blink_gc_plugin/CMakeLists.txt \ -    | cut -d ' ' -f 2 | tr -d ')') -LIBFILE=lib$LIBNAME.$SO_EXT - -# Check that we are actually creating the plugin at a new revision. -if [ -f "$LLVM_LIB_DIR/$LIBFILE" ]; then -    echo "The plugin revision $LIBNAME is already in the existing package." -    exit 1 -fi - -cp $PDIR/lib/$LIBFILE "$LLVM_LIB_DIR/" -if [ "$(uname -s)" = "Darwin" ]; then -  tar zcf ${PDIR}_repack.tgz -C "$LLVM_TAR_DIR" bin include lib buildlog.txt -else -  tar zcf ${PDIR}_repack.tgz -C "$LLVM_TAR_DIR" bin lib buildlog.txt -fi - -echo The clang package has been repackaged with $LIBNAME -echo To upload, run: -echo gsutil cp -a public-read ${PDIR}_repack.tgz \ -     gs://chromium-browser-clang/$PLATFORM/$PDIR.tgz diff --git a/tools/clang/scripts/update.sh b/tools/clang/scripts/update.sh index 6ae953d..c9fc9a0 100755 --- a/tools/clang/scripts/update.sh +++ b/tools/clang/scripts/update.sh @@ -8,7 +8,12 @@  # Do NOT CHANGE this if you don't know what you're doing -- see  # https://code.google.com/p/chromium/wiki/UpdatingClang  # Reverting problematic clang rolls is safe, though. -CLANG_REVISION=223108 +CLANG_REVISION=231191 + +# This is incremented when pushing a new build of Clang at the same revision. +CLANG_SUB_REVISION=1 + +PACKAGE_VERSION="${CLANG_REVISION}-${CLANG_SUB_REVISION}"  THIS_DIR="$(dirname "${0}")"  LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" @@ -90,7 +95,7 @@ while [[ $# > 0 ]]; do        force_local_build=yes        ;;      --print-revision) -      echo $CLANG_REVISION +      echo $PACKAGE_VERSION        exit 0        ;;      --run-tests) @@ -227,8 +232,8 @@ if [[ -f "${STAMP_FILE}" ]]; then    PREVIOUSLY_BUILT_REVISON=$(cat "${STAMP_FILE}")    if [[ -z "$force_local_build" ]] && \         [[ "${PREVIOUSLY_BUILT_REVISON}" = \ -          "${CLANG_AND_PLUGINS_REVISION}" ]]; then -    echo "Clang already at ${CLANG_AND_PLUGINS_REVISION}" +          "${PACKAGE_VERSION}" ]]; then +    echo "Clang already at ${PACKAGE_VERSION}"      exit 0    fi  fi @@ -239,7 +244,7 @@ rm -f "${STAMP_FILE}"  if [[ -z "$force_local_build" ]]; then    # Check if there's a prebuilt binary and if so just fetch that. That's faster,    # and goma relies on having matching binary hashes on client and server too. -  CDS_FILE="clang-${CLANG_REVISION}.tgz" +  CDS_FILE="clang-${PACKAGE_VERSION}.tgz"    CDS_OUT_DIR=$(mktemp -d -t clang_download.XXXXXX)    CDS_OUTPUT="${CDS_OUT_DIR}/${CDS_FILE}"    if [ "${OS}" = "Linux" ]; then @@ -261,12 +266,12 @@ if [[ -z "$force_local_build" ]]; then      rm -rf "${LLVM_BUILD_DIR}"      mkdir -p "${LLVM_BUILD_DIR}"      tar -xzf "${CDS_OUTPUT}" -C "${LLVM_BUILD_DIR}" -    echo clang "${CLANG_REVISION}" unpacked -    echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" +    echo clang "${PACKAGE_VERSION}" unpacked +    echo "${PACKAGE_VERSION}" > "${STAMP_FILE}"      rm -rf "${CDS_OUT_DIR}"      exit 0    else -    echo Did not find prebuilt clang at r"${CLANG_REVISION}", building +    echo Did not find prebuilt clang "${PACKAGE_VERSION}", building    fi  fi @@ -310,6 +315,8 @@ for i in \        "${CLANG_DIR}/lib/Sema/SemaExprCXX.cpp" \        "${CLANG_DIR}/test/SemaCXX/default2.cpp" \        "${CLANG_DIR}/test/SemaCXX/typo-correction-delayed.cpp" \ +      "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc" \ +      "${COMPILER_RT_DIR}/test/tsan/signal_segv_handler.cc" \        ; do    if [[ -e "${i}" ]]; then      rm -f "${i}"  # For unversioned files. @@ -392,349 +399,6 @@ EOF    patch -p0    popd -  # Apply r223211: "Revert r222997." -  pushd "${LLVM_DIR}" -  cat << 'EOF' | ---- a/lib/Transforms/Instrumentation/MemorySanitizer.cpp -+++ b/lib/Transforms/Instrumentation/MemorySanitizer.cpp -@@ -921,8 +921,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { -             Value *OriginPtr = -                 getOriginPtrForArgument(&FArg, EntryIRB, ArgOffset); -             setOrigin(A, EntryIRB.CreateLoad(OriginPtr)); --          } else { --            setOrigin(A, getCleanOrigin()); -           } -         } -         ArgOffset += RoundUpToAlignment(Size, kShadowTLSAlignment); -@@ -942,13 +940,15 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { -   /// \brief Get the origin for a value. -   Value *getOrigin(Value *V) { -     if (!MS.TrackOrigins) return nullptr; --    if (!PropagateShadow) return getCleanOrigin(); --    if (isa<Constant>(V)) return getCleanOrigin(); --    assert((isa<Instruction>(V) || isa<Argument>(V)) && --           "Unexpected value type in getOrigin()"); --    Value *Origin = OriginMap[V]; --    assert(Origin && "Missing origin"); --    return Origin; -+    if (isa<Instruction>(V) || isa<Argument>(V)) { -+      Value *Origin = OriginMap[V]; -+      if (!Origin) { -+        DEBUG(dbgs() << "NO ORIGIN: " << *V << "\n"); -+        Origin = getCleanOrigin(); -+      } -+      return Origin; -+    } -+    return getCleanOrigin(); -   } -  -   /// \brief Get the origin for i-th argument of the instruction I. -@@ -1088,7 +1088,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> { -     IRB.CreateStore(getCleanShadow(&I), ShadowPtr); -  -     setShadow(&I, getCleanShadow(&I)); --    setOrigin(&I, getCleanOrigin()); -   } -  -   void visitAtomicRMWInst(AtomicRMWInst &I) { -EOF -  patch -p1 -  popd - -  # Apply r223219: "Preserve LD_LIBRARY_PATH when using the 'env' command" -  pushd "${CLANG_DIR}" -  cat << 'EOF' | ---- a/test/Driver/env.c -+++ b/test/Driver/env.c -@@ -5,12 +5,14 @@ - // REQUIRES: shell - // - // The PATH variable is heavily used when trying to find a linker. --// RUN: env -i LC_ALL=C %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -+// RUN: env -i LC_ALL=C LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \ -+// RUN:   %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ - // RUN:     --target=i386-unknown-linux \ - // RUN:     --sysroot=%S/Inputs/basic_linux_tree \ - // RUN:   | FileCheck --check-prefix=CHECK-LD-32 %s - // --// RUN: env -i LC_ALL=C PATH="" %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ -+// RUN: env -i LC_ALL=C PATH="" LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \ -+// RUN:   %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ - // RUN:     --target=i386-unknown-linux \ - // RUN:     --sysroot=%S/Inputs/basic_linux_tree \ - // RUN:   | FileCheck --check-prefix=CHECK-LD-32 %s -EOF -  patch -p1 -  popd - -  # Revert r220714: "Frontend: Define __EXCEPTIONS if -fexceptions is passed" -  pushd "${CLANG_DIR}" -  cat << 'EOF' | ---- a/lib/Frontend/InitPreprocessor.cpp -+++ b/lib/Frontend/InitPreprocessor.cpp -@@ -566,7 +566,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI, -     Builder.defineMacro("__BLOCKS__"); -   } -  --  if (!LangOpts.MSVCCompat && LangOpts.Exceptions) -+  if (!LangOpts.MSVCCompat && LangOpts.CXXExceptions) -     Builder.defineMacro("__EXCEPTIONS"); -   if (!LangOpts.MSVCCompat && LangOpts.RTTI) -     Builder.defineMacro("__GXX_RTTI"); -diff --git a/test/Frontend/exceptions.c b/test/Frontend/exceptions.c -index 981b5b9..4bbaaa3 100644 ---- a/test/Frontend/exceptions.c -+++ b/test/Frontend/exceptions.c -@@ -1,9 +1,6 @@ --// RUN: %clang_cc1 -fms-compatibility -fexceptions -fcxx-exceptions -DMS_MODE -verify %s -+// RUN: %clang_cc1 -fms-compatibility -fexceptions -fcxx-exceptions -verify %s - // expected-no-diagnostics -  --// RUN: %clang_cc1 -fms-compatibility -fexceptions -verify %s --// expected-no-diagnostics -- --#if defined(MS_MODE) && defined(__EXCEPTIONS) -+#if defined(__EXCEPTIONS) - #error __EXCEPTIONS should not be defined. - #endif -diff --git a/test/Preprocessor/predefined-exceptions.m b/test/Preprocessor/predefined-exceptions.m -index 0791075..c13f429 100644 ---- a/test/Preprocessor/predefined-exceptions.m -+++ b/test/Preprocessor/predefined-exceptions.m -@@ -1,6 +1,6 @@ - // RUN: %clang_cc1 -x objective-c -fobjc-exceptions -fexceptions -E -dM %s | FileCheck -check-prefix=CHECK-OBJC-NOCXX %s  - // CHECK-OBJC-NOCXX: #define OBJC_ZEROCOST_EXCEPTIONS 1 --// CHECK-OBJC-NOCXX: #define __EXCEPTIONS 1 -+// CHECK-OBJC-NOCXX-NOT: #define __EXCEPTIONS 1 -  - // RUN: %clang_cc1 -x objective-c++ -fobjc-exceptions -fexceptions -fcxx-exceptions -E -dM %s | FileCheck -check-prefix=CHECK-OBJC-CXX %s  - // CHECK-OBJC-CXX: #define OBJC_ZEROCOST_EXCEPTIONS 1 -EOF -  patch -p1 -  popd - -  # Apply r223177: "Ensure typos in the default values of template parameters get diagnosed." -  pushd "${CLANG_DIR}" -  cat << 'EOF' | ---- a/lib/Parse/ParseTemplate.cpp -+++ b/lib/Parse/ParseTemplate.cpp -@@ -676,7 +676,7 @@ Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) { -     GreaterThanIsOperatorScope G(GreaterThanIsOperator, false); -     EnterExpressionEvaluationContext Unevaluated(Actions, Sema::Unevaluated); -  --    DefaultArg = ParseAssignmentExpression(); -+    DefaultArg = Actions.CorrectDelayedTyposInExpr(ParseAssignmentExpression()); -     if (DefaultArg.isInvalid()) -       SkipUntil(tok::comma, tok::greater, StopAtSemi | StopBeforeMatch); -   } -diff --git a/test/SemaCXX/default2.cpp b/test/SemaCXX/default2.cpp -index 1626044..c4d40b4 100644 ---- a/test/SemaCXX/default2.cpp -+++ b/test/SemaCXX/default2.cpp -@@ -122,3 +122,9 @@ class XX { -   void A(int length = -1 ) {  }  -   void B() { A(); } - }; -+ -+template <int I = (1 * I)> struct S {};  // expected-error-re {{use of undeclared identifier 'I'{{$}}}} -+S<1> s; -+ -+template <int I1 = I2, int I2 = 1> struct T {};  // expected-error-re {{use of undeclared identifier 'I2'{{$}}}} -+T<0, 1> t; -diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correction-delayed.cpp -index bff1d76..7bf9258 100644 ---- a/test/SemaCXX/typo-correction-delayed.cpp -+++ b/test/SemaCXX/typo-correction-delayed.cpp -@@ -102,3 +102,7 @@ void f(int *i) { -   __atomic_load(i, i, something_something);  // expected-error-re {{use of undeclared identifier 'something_something'{{$}}}} - } - } -+ -+const int DefaultArg = 9;  // expected-note {{'DefaultArg' declared here}} -+template <int I = defaultArg> struct S {};  // expected-error {{use of undeclared identifier 'defaultArg'; did you mean 'DefaultArg'?}} -+S<1> s; -EOF -  patch -p1 -  popd - -  # Apply r223209: "Handle delayed corrections in a couple more error paths in ParsePostfixExpressionSuffix." -  pushd "${CLANG_DIR}" -  cat << 'EOF' | ---- a/lib/Parse/ParseExpr.cpp -+++ b/lib/Parse/ParseExpr.cpp -@@ -1390,6 +1390,7 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) { -         SourceLocation OpenLoc = ConsumeToken(); -  -         if (ParseSimpleExpressionList(ExecConfigExprs, ExecConfigCommaLocs)) { -+          (void)Actions.CorrectDelayedTyposInExpr(LHS); -           LHS = ExprError(); -         } -  -@@ -1440,6 +1441,7 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) { -         if (Tok.isNot(tok::r_paren)) { -           if (ParseExpressionList(ArgExprs, CommaLocs, &Sema::CodeCompleteCall, -                                   LHS.get())) { -+            (void)Actions.CorrectDelayedTyposInExpr(LHS); -             LHS = ExprError(); -           } -         } -diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correction-delayed.cpp -index 7bf9258..f7ef015 100644 ---- a/test/SemaCXX/typo-correction-delayed.cpp -+++ b/test/SemaCXX/typo-correction-delayed.cpp -@@ -106,3 +106,9 @@ void f(int *i) { - const int DefaultArg = 9;  // expected-note {{'DefaultArg' declared here}} - template <int I = defaultArg> struct S {};  // expected-error {{use of undeclared identifier 'defaultArg'; did you mean 'DefaultArg'?}} - S<1> s; -+ -+namespace foo {} -+void test_paren_suffix() { -+  foo::bar({5, 6});  // expected-error-re {{no member named 'bar' in namespace 'foo'{{$}}}} \ -+                     // expected-error {{expected expression}} -+} -EOF -  patch -p1 -  popd - -  # Apply r223705: "Handle possible TypoExprs in member initializers." -  pushd "${CLANG_DIR}" -  cat << 'EOF' | ---- a/lib/Sema/SemaDeclCXX.cpp -+++ b/lib/Sema/SemaDeclCXX.cpp -@@ -2813,6 +2813,11 @@ Sema::BuildMemInitializer(Decl *ConstructorD, -                           SourceLocation IdLoc, -                           Expr *Init, -                           SourceLocation EllipsisLoc) { -+  ExprResult Res = CorrectDelayedTyposInExpr(Init); -+  if (!Res.isUsable()) -+    return true; -+  Init = Res.get(); -+ -   if (!ConstructorD) -     return true; -  -diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correction-delayed.cpp -index f7ef015..d303b58 100644 ---- a/test/SemaCXX/typo-correction-delayed.cpp -+++ b/test/SemaCXX/typo-correction-delayed.cpp -@@ -112,3 +112,10 @@ void test_paren_suffix() { -   foo::bar({5, 6});  // expected-error-re {{no member named 'bar' in namespace 'foo'{{$}}}} \ -                      // expected-error {{expected expression}} - } -+ -+const int kNum = 10;  // expected-note {{'kNum' declared here}} -+class SomeClass { -+  int Kind; -+public: -+  explicit SomeClass() : Kind(kSum) {}  // expected-error {{use of undeclared identifier 'kSum'; did you mean 'kNum'?}} -+}; -EOF -  patch -p1 -  popd - -  # Apply r224172: "Typo correction: Ignore temporary binding exprs after overload resolution" -  pushd "${CLANG_DIR}" -  cat << 'EOF' | ---- a/lib/Sema/SemaExprCXX.cpp -+++ b/lib/Sema/SemaExprCXX.cpp -@@ -6105,8 +6105,13 @@ public: -     auto Result = BaseTransform::RebuildCallExpr(Callee, LParenLoc, Args, -                                                  RParenLoc, ExecConfig); -     if (auto *OE = dyn_cast<OverloadExpr>(Callee)) { --      if (!Result.isInvalid() && Result.get()) --        OverloadResolution[OE] = cast<CallExpr>(Result.get())->getCallee(); -+      if (!Result.isInvalid() && Result.get()) { -+        Expr *ResultCall = Result.get(); -+        if (auto *BE = dyn_cast<CXXBindTemporaryExpr>(ResultCall)) -+          ResultCall = BE->getSubExpr(); -+        if (auto *CE = dyn_cast<CallExpr>(ResultCall)) -+          OverloadResolution[OE] = CE->getCallee(); -+      } -     } -     return Result; -   } -diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correction-delayed.cpp -index d303b58..d42888f 100644 ---- a/test/SemaCXX/typo-correction-delayed.cpp -+++ b/test/SemaCXX/typo-correction-delayed.cpp -@@ -119,3 +119,23 @@ class SomeClass { - public: -   explicit SomeClass() : Kind(kSum) {}  // expected-error {{use of undeclared identifier 'kSum'; did you mean 'kNum'?}} - }; -+ -+extern "C" int printf(const char *, ...); -+ -+// There used to be an issue with typo resolution inside overloads. -+struct AssertionResult { -+  ~AssertionResult(); -+  operator bool(); -+  int val; -+}; -+AssertionResult Compare(const char *a, const char *b); -+AssertionResult Compare(int a, int b); -+int main() { -+  // expected-note@+1 {{'result' declared here}} -+  const char *result; -+  // expected-error@+1 {{use of undeclared identifier 'resulta'; did you mean 'result'?}} -+  if (AssertionResult ar = (Compare("value1", resulta))) -+    ; -+  else -+    printf("ar: %d\n", ar.val); -+} -EOF -  patch -p1 -  popd - -  # Apply r224173: "Implement feedback on r224172 in PR21899" -  pushd "${CLANG_DIR}" -  cat << 'EOF' | ---- a/lib/Sema/SemaExprCXX.cpp -+++ b/lib/Sema/SemaExprCXX.cpp -@@ -6105,7 +6105,7 @@ public: -     auto Result = BaseTransform::RebuildCallExpr(Callee, LParenLoc, Args, -                                                  RParenLoc, ExecConfig); -     if (auto *OE = dyn_cast<OverloadExpr>(Callee)) { --      if (!Result.isInvalid() && Result.get()) { -+      if (Result.isUsable()) { -         Expr *ResultCall = Result.get(); -         if (auto *BE = dyn_cast<CXXBindTemporaryExpr>(ResultCall)) -           ResultCall = BE->getSubExpr(); -diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correction-delayed.cpp -index d42888f..7879d29 100644 ---- a/test/SemaCXX/typo-correction-delayed.cpp -+++ b/test/SemaCXX/typo-correction-delayed.cpp -@@ -120,22 +120,13 @@ public: -   explicit SomeClass() : Kind(kSum) {}  // expected-error {{use of undeclared identifier 'kSum'; did you mean 'kNum'?}} - }; -  --extern "C" int printf(const char *, ...); -- - // There used to be an issue with typo resolution inside overloads. --struct AssertionResult { --  ~AssertionResult(); --  operator bool(); --  int val; --}; --AssertionResult Compare(const char *a, const char *b); --AssertionResult Compare(int a, int b); --int main() { -+struct AssertionResult { ~AssertionResult(); }; -+AssertionResult Overload(const char *a); -+AssertionResult Overload(int a); -+void UseOverload() { -   // expected-note@+1 {{'result' declared here}} -   const char *result; -   // expected-error@+1 {{use of undeclared identifier 'resulta'; did you mean 'result'?}} --  if (AssertionResult ar = (Compare("value1", resulta))) --    ; --  else --    printf("ar: %d\n", ar.val); -+  Overload(resulta); - } -EOF -  patch -p1 -  popd -    # This Go bindings test doesn't work after the bootstrap build on Linux. (PR21552)    pushd "${LLVM_DIR}"    cat << 'EOF' | @@ -751,6 +415,7 @@ EOF    patch -p0    popd +  fi  # Echo all commands. @@ -1003,4 +668,4 @@ if [[ -n "$run_tests" ]]; then  fi  # After everything is done, log success for this revision. -echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" +echo "${PACKAGE_VERSION}" > "${STAMP_FILE}" | 
