Chromium Code Reviews| Index: tools/clang/scripts/update.sh |
| diff --git a/tools/clang/scripts/update.sh b/tools/clang/scripts/update.sh |
| index 7b964cc17e4d7500393bfc9d5cd66d489a41a52c..c233a71d88336c189c57a8584659eacbe4bf0502 100755 |
| --- a/tools/clang/scripts/update.sh |
| +++ b/tools/clang/scripts/update.sh |
| @@ -8,7 +8,10 @@ |
| # 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=228129 |
| +CLANG_BUILD=1 |
|
Nico
2015/02/05 23:51:49
this could use a better name, and maybe a short co
hans
2015/02/06 00:05:34
Done. I've renamed it CLANG_SUB_REVISION and added
|
| + |
| +PACKAGE_VERSION="${CLANG_REVISION}-${CLANG_BUILD}" |
| THIS_DIR="$(dirname "${0}")" |
| LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" |
| @@ -32,12 +35,6 @@ ABS_LLVM_BUILD_DIR="${PWD}/${LLVM_BUILD_DIR}" |
| ABS_COMPILER_RT_DIR="${PWD}/${COMPILER_RT_DIR}" |
| -# Use both the clang revision and the plugin revisions to test for updates. |
| -BLINKGCPLUGIN_REVISION=\ |
| -$(grep 'set(LIBRARYNAME' "$THIS_DIR"/../blink_gc_plugin/CMakeLists.txt \ |
| - | cut -d ' ' -f 2 | tr -cd '[0-9]') |
| -CLANG_AND_PLUGINS_REVISION="${CLANG_REVISION}-${BLINKGCPLUGIN_REVISION}" |
| - |
| # ${A:-a} returns $A if it's set, a else. |
| LLVM_REPO_URL=${LLVM_URL:-https://llvm.org/svn/llvm-project} |
| @@ -166,8 +163,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 |
| @@ -179,7 +176,7 @@ 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_URL=https://commondatastorage.googleapis.com/chromium-browser-clang |
| - 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 |
| @@ -201,12 +198,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 |
| @@ -330,349 +327,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}" |
| @@ -941,4 +595,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}" |