Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: tools/clang/scripts/update.sh

Issue 980523002: Roll Clang 223108:231191 (Closed) Base URL: precise:/work/chromium/src@clang_roll_231191
Patch Set: Rebase on top of recent update.sh change Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/clang/scripts/repackage.sh ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env bash 1 #!/usr/bin/env bash
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 # This script will check out llvm and clang into third_party/llvm and build it. 6 # This script will check out llvm and clang into third_party/llvm and build it.
7 7
8 # Do NOT CHANGE this if you don't know what you're doing -- see 8 # Do NOT CHANGE this if you don't know what you're doing -- see
9 # https://code.google.com/p/chromium/wiki/UpdatingClang 9 # https://code.google.com/p/chromium/wiki/UpdatingClang
10 # Reverting problematic clang rolls is safe, though. 10 # Reverting problematic clang rolls is safe, though.
11 CLANG_REVISION=223108 11 CLANG_REVISION=231191
12
13 # This is incremented when pushing a new build of Clang at the same revision.
14 CLANG_SUB_REVISION=1
15
16 PACKAGE_VERSION="${CLANG_REVISION}-${CLANG_SUB_REVISION}"
12 17
13 THIS_DIR="$(dirname "${0}")" 18 THIS_DIR="$(dirname "${0}")"
14 LLVM_DIR="${THIS_DIR}/../../../third_party/llvm" 19 LLVM_DIR="${THIS_DIR}/../../../third_party/llvm"
15 LLVM_BUILD_DIR="${LLVM_DIR}/../llvm-build/Release+Asserts" 20 LLVM_BUILD_DIR="${LLVM_DIR}/../llvm-build/Release+Asserts"
16 COMPILER_RT_BUILD_DIR="${LLVM_DIR}/../llvm-build/compiler-rt" 21 COMPILER_RT_BUILD_DIR="${LLVM_DIR}/../llvm-build/compiler-rt"
17 LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap" 22 LLVM_BOOTSTRAP_DIR="${LLVM_DIR}/../llvm-bootstrap"
18 LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install" 23 LLVM_BOOTSTRAP_INSTALL_DIR="${LLVM_DIR}/../llvm-bootstrap-install"
19 CLANG_DIR="${LLVM_DIR}/tools/clang" 24 CLANG_DIR="${LLVM_DIR}/tools/clang"
20 COMPILER_RT_DIR="${LLVM_DIR}/compiler-rt" 25 COMPILER_RT_DIR="${LLVM_DIR}/compiler-rt"
21 LIBCXX_DIR="${LLVM_DIR}/projects/libcxx" 26 LIBCXX_DIR="${LLVM_DIR}/projects/libcxx"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 --bootstrap) 88 --bootstrap)
84 bootstrap=yes 89 bootstrap=yes
85 ;; 90 ;;
86 --if-needed) 91 --if-needed)
87 if_needed=yes 92 if_needed=yes
88 ;; 93 ;;
89 --force-local-build) 94 --force-local-build)
90 force_local_build=yes 95 force_local_build=yes
91 ;; 96 ;;
92 --print-revision) 97 --print-revision)
93 echo $CLANG_REVISION 98 echo $PACKAGE_VERSION
94 exit 0 99 exit 0
95 ;; 100 ;;
96 --run-tests) 101 --run-tests)
97 run_tests=yes 102 run_tests=yes
98 ;; 103 ;;
99 --without-android) 104 --without-android)
100 with_android= 105 with_android=
101 ;; 106 ;;
102 --without-patches) 107 --without-patches)
103 with_patches= 108 with_patches=
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 exit 0 225 exit 0
221 fi 226 fi
222 fi 227 fi
223 228
224 229
225 # Check if there's anything to be done, exit early if not. 230 # Check if there's anything to be done, exit early if not.
226 if [[ -f "${STAMP_FILE}" ]]; then 231 if [[ -f "${STAMP_FILE}" ]]; then
227 PREVIOUSLY_BUILT_REVISON=$(cat "${STAMP_FILE}") 232 PREVIOUSLY_BUILT_REVISON=$(cat "${STAMP_FILE}")
228 if [[ -z "$force_local_build" ]] && \ 233 if [[ -z "$force_local_build" ]] && \
229 [[ "${PREVIOUSLY_BUILT_REVISON}" = \ 234 [[ "${PREVIOUSLY_BUILT_REVISON}" = \
230 "${CLANG_AND_PLUGINS_REVISION}" ]]; then 235 "${PACKAGE_VERSION}" ]]; then
231 echo "Clang already at ${CLANG_AND_PLUGINS_REVISION}" 236 echo "Clang already at ${PACKAGE_VERSION}"
232 exit 0 237 exit 0
233 fi 238 fi
234 fi 239 fi
235 # To always force a new build if someone interrupts their build half way. 240 # To always force a new build if someone interrupts their build half way.
236 rm -f "${STAMP_FILE}" 241 rm -f "${STAMP_FILE}"
237 242
238 243
239 if [[ -z "$force_local_build" ]]; then 244 if [[ -z "$force_local_build" ]]; then
240 # Check if there's a prebuilt binary and if so just fetch that. That's faster, 245 # Check if there's a prebuilt binary and if so just fetch that. That's faster,
241 # and goma relies on having matching binary hashes on client and server too. 246 # and goma relies on having matching binary hashes on client and server too.
242 CDS_FILE="clang-${CLANG_REVISION}.tgz" 247 CDS_FILE="clang-${PACKAGE_VERSION}.tgz"
243 CDS_OUT_DIR=$(mktemp -d -t clang_download.XXXXXX) 248 CDS_OUT_DIR=$(mktemp -d -t clang_download.XXXXXX)
244 CDS_OUTPUT="${CDS_OUT_DIR}/${CDS_FILE}" 249 CDS_OUTPUT="${CDS_OUT_DIR}/${CDS_FILE}"
245 if [ "${OS}" = "Linux" ]; then 250 if [ "${OS}" = "Linux" ]; then
246 CDS_FULL_URL="${CDS_URL}/Linux_x64/${CDS_FILE}" 251 CDS_FULL_URL="${CDS_URL}/Linux_x64/${CDS_FILE}"
247 elif [ "${OS}" = "Darwin" ]; then 252 elif [ "${OS}" = "Darwin" ]; then
248 CDS_FULL_URL="${CDS_URL}/Mac/${CDS_FILE}" 253 CDS_FULL_URL="${CDS_URL}/Mac/${CDS_FILE}"
249 fi 254 fi
250 echo Trying to download prebuilt clang 255 echo Trying to download prebuilt clang
251 if which curl > /dev/null; then 256 if which curl > /dev/null; then
252 curl -L --fail "${CDS_FULL_URL}" -o "${CDS_OUTPUT}" || \ 257 curl -L --fail "${CDS_FULL_URL}" -o "${CDS_OUTPUT}" || \
253 rm -rf "${CDS_OUT_DIR}" 258 rm -rf "${CDS_OUT_DIR}"
254 elif which wget > /dev/null; then 259 elif which wget > /dev/null; then
255 wget "${CDS_FULL_URL}" -O "${CDS_OUTPUT}" || rm -rf "${CDS_OUT_DIR}" 260 wget "${CDS_FULL_URL}" -O "${CDS_OUTPUT}" || rm -rf "${CDS_OUT_DIR}"
256 else 261 else
257 echo "Neither curl nor wget found. Please install one of these." 262 echo "Neither curl nor wget found. Please install one of these."
258 exit 1 263 exit 1
259 fi 264 fi
260 if [ -f "${CDS_OUTPUT}" ]; then 265 if [ -f "${CDS_OUTPUT}" ]; then
261 rm -rf "${LLVM_BUILD_DIR}" 266 rm -rf "${LLVM_BUILD_DIR}"
262 mkdir -p "${LLVM_BUILD_DIR}" 267 mkdir -p "${LLVM_BUILD_DIR}"
263 tar -xzf "${CDS_OUTPUT}" -C "${LLVM_BUILD_DIR}" 268 tar -xzf "${CDS_OUTPUT}" -C "${LLVM_BUILD_DIR}"
264 echo clang "${CLANG_REVISION}" unpacked 269 echo clang "${PACKAGE_VERSION}" unpacked
265 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" 270 echo "${PACKAGE_VERSION}" > "${STAMP_FILE}"
266 rm -rf "${CDS_OUT_DIR}" 271 rm -rf "${CDS_OUT_DIR}"
267 exit 0 272 exit 0
268 else 273 else
269 echo Did not find prebuilt clang at r"${CLANG_REVISION}", building 274 echo Did not find prebuilt clang "${PACKAGE_VERSION}", building
270 fi 275 fi
271 fi 276 fi
272 277
273 if [[ -n "${with_android}" ]] && ! [[ -d "${ANDROID_NDK_DIR}" ]]; then 278 if [[ -n "${with_android}" ]] && ! [[ -d "${ANDROID_NDK_DIR}" ]]; then
274 echo "Android NDK not found at ${ANDROID_NDK_DIR}" 279 echo "Android NDK not found at ${ANDROID_NDK_DIR}"
275 echo "The Android NDK is needed to build a Clang whose -fsanitize=address" 280 echo "The Android NDK is needed to build a Clang whose -fsanitize=address"
276 echo "works on Android. See " 281 echo "works on Android. See "
277 echo "http://code.google.com/p/chromium/wiki/AndroidBuildInstructions for how" 282 echo "http://code.google.com/p/chromium/wiki/AndroidBuildInstructions for how"
278 echo "to install the NDK, or pass --without-android." 283 echo "to install the NDK, or pass --without-android."
279 exit 1 284 exit 1
(...skipping 23 matching lines...) Expand all
303 "${CLANG_DIR}/lib/Frontend/InitPreprocessor.cpp" \ 308 "${CLANG_DIR}/lib/Frontend/InitPreprocessor.cpp" \
304 "${CLANG_DIR}/test/Frontend/exceptions.c" \ 309 "${CLANG_DIR}/test/Frontend/exceptions.c" \
305 "${CLANG_DIR}/test/Preprocessor/predefined-exceptions.m" \ 310 "${CLANG_DIR}/test/Preprocessor/predefined-exceptions.m" \
306 "${LLVM_DIR}/test/Bindings/Go/go.test" \ 311 "${LLVM_DIR}/test/Bindings/Go/go.test" \
307 "${CLANG_DIR}/lib/Parse/ParseExpr.cpp" \ 312 "${CLANG_DIR}/lib/Parse/ParseExpr.cpp" \
308 "${CLANG_DIR}/lib/Parse/ParseTemplate.cpp" \ 313 "${CLANG_DIR}/lib/Parse/ParseTemplate.cpp" \
309 "${CLANG_DIR}/lib/Sema/SemaDeclCXX.cpp" \ 314 "${CLANG_DIR}/lib/Sema/SemaDeclCXX.cpp" \
310 "${CLANG_DIR}/lib/Sema/SemaExprCXX.cpp" \ 315 "${CLANG_DIR}/lib/Sema/SemaExprCXX.cpp" \
311 "${CLANG_DIR}/test/SemaCXX/default2.cpp" \ 316 "${CLANG_DIR}/test/SemaCXX/default2.cpp" \
312 "${CLANG_DIR}/test/SemaCXX/typo-correction-delayed.cpp" \ 317 "${CLANG_DIR}/test/SemaCXX/typo-correction-delayed.cpp" \
318 "${COMPILER_RT_DIR}/lib/sanitizer_common/sanitizer_stoptheworld_linux_libc dep.cc" \
319 "${COMPILER_RT_DIR}/test/tsan/signal_segv_handler.cc" \
313 ; do 320 ; do
314 if [[ -e "${i}" ]]; then 321 if [[ -e "${i}" ]]; then
315 rm -f "${i}" # For unversioned files. 322 rm -f "${i}" # For unversioned files.
316 svn revert "${i}" 323 svn revert "${i}"
317 fi; 324 fi;
318 done 325 done
319 326
320 echo Remove the Clang tools shim dir 327 echo Remove the Clang tools shim dir
321 CHROME_TOOLS_SHIM_DIR=${ABS_LLVM_DIR}/tools/chrometools 328 CHROME_TOOLS_SHIM_DIR=${ABS_LLVM_DIR}/tools/chrometools
322 rm -rfv ${CHROME_TOOLS_SHIM_DIR} 329 rm -rfv ${CHROME_TOOLS_SHIM_DIR}
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 392
386 -TEST_F(LibclangReparseTest, ReparseWithModule) { 393 -TEST_F(LibclangReparseTest, ReparseWithModule) {
387 +TEST_F(LibclangReparseTest, DISABLED_ReparseWithModule) { 394 +TEST_F(LibclangReparseTest, DISABLED_ReparseWithModule) {
388 const char *HeaderTop = "#ifndef H\n#define H\nstruct Foo { int bar;"; 395 const char *HeaderTop = "#ifndef H\n#define H\nstruct Foo { int bar;";
389 const char *HeaderBottom = "\n};\n#endif\n"; 396 const char *HeaderBottom = "\n};\n#endif\n";
390 const char *MFile = "#include \"HeaderFile.h\"\nint main() {" 397 const char *MFile = "#include \"HeaderFile.h\"\nint main() {"
391 EOF 398 EOF
392 patch -p0 399 patch -p0
393 popd 400 popd
394 401
395 # Apply r223211: "Revert r222997."
396 pushd "${LLVM_DIR}"
397 cat << 'EOF' |
398 --- a/lib/Transforms/Instrumentation/MemorySanitizer.cpp
399 +++ b/lib/Transforms/Instrumentation/MemorySanitizer.cpp
400 @@ -921,8 +921,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySan itizerVisitor> {
401 Value *OriginPtr =
402 getOriginPtrForArgument(&FArg, EntryIRB, ArgOffset);
403 setOrigin(A, EntryIRB.CreateLoad(OriginPtr));
404 - } else {
405 - setOrigin(A, getCleanOrigin());
406 }
407 }
408 ArgOffset += RoundUpToAlignment(Size, kShadowTLSAlignment);
409 @@ -942,13 +940,15 @@ struct MemorySanitizerVisitor : public InstVisitor<MemoryS anitizerVisitor> {
410 /// \brief Get the origin for a value.
411 Value *getOrigin(Value *V) {
412 if (!MS.TrackOrigins) return nullptr;
413 - if (!PropagateShadow) return getCleanOrigin();
414 - if (isa<Constant>(V)) return getCleanOrigin();
415 - assert((isa<Instruction>(V) || isa<Argument>(V)) &&
416 - "Unexpected value type in getOrigin()");
417 - Value *Origin = OriginMap[V];
418 - assert(Origin && "Missing origin");
419 - return Origin;
420 + if (isa<Instruction>(V) || isa<Argument>(V)) {
421 + Value *Origin = OriginMap[V];
422 + if (!Origin) {
423 + DEBUG(dbgs() << "NO ORIGIN: " << *V << "\n");
424 + Origin = getCleanOrigin();
425 + }
426 + return Origin;
427 + }
428 + return getCleanOrigin();
429 }
430
431 /// \brief Get the origin for i-th argument of the instruction I.
432 @@ -1088,7 +1088,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemoryS anitizerVisitor> {
433 IRB.CreateStore(getCleanShadow(&I), ShadowPtr);
434
435 setShadow(&I, getCleanShadow(&I));
436 - setOrigin(&I, getCleanOrigin());
437 }
438
439 void visitAtomicRMWInst(AtomicRMWInst &I) {
440 EOF
441 patch -p1
442 popd
443
444 # Apply r223219: "Preserve LD_LIBRARY_PATH when using the 'env' command"
445 pushd "${CLANG_DIR}"
446 cat << 'EOF' |
447 --- a/test/Driver/env.c
448 +++ b/test/Driver/env.c
449 @@ -5,12 +5,14 @@
450 // REQUIRES: shell
451 //
452 // The PATH variable is heavily used when trying to find a linker.
453 -// RUN: env -i LC_ALL=C %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
454 +// RUN: env -i LC_ALL=C LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \
455 +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
456 // RUN: --target=i386-unknown-linux \
457 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
458 // RUN: | FileCheck --check-prefix=CHECK-LD-32 %s
459 //
460 -// RUN: env -i LC_ALL=C PATH="" %clang -no-canonical-prefixes %s -### -o %t.o 2 >&1 \
461 +// RUN: env -i LC_ALL=C PATH="" LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \
462 +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
463 // RUN: --target=i386-unknown-linux \
464 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
465 // RUN: | FileCheck --check-prefix=CHECK-LD-32 %s
466 EOF
467 patch -p1
468 popd
469
470 # Revert r220714: "Frontend: Define __EXCEPTIONS if -fexceptions is passed"
471 pushd "${CLANG_DIR}"
472 cat << 'EOF' |
473 --- a/lib/Frontend/InitPreprocessor.cpp
474 +++ b/lib/Frontend/InitPreprocessor.cpp
475 @@ -566,7 +566,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
476 Builder.defineMacro("__BLOCKS__");
477 }
478
479 - if (!LangOpts.MSVCCompat && LangOpts.Exceptions)
480 + if (!LangOpts.MSVCCompat && LangOpts.CXXExceptions)
481 Builder.defineMacro("__EXCEPTIONS");
482 if (!LangOpts.MSVCCompat && LangOpts.RTTI)
483 Builder.defineMacro("__GXX_RTTI");
484 diff --git a/test/Frontend/exceptions.c b/test/Frontend/exceptions.c
485 index 981b5b9..4bbaaa3 100644
486 --- a/test/Frontend/exceptions.c
487 +++ b/test/Frontend/exceptions.c
488 @@ -1,9 +1,6 @@
489 -// RUN: %clang_cc1 -fms-compatibility -fexceptions -fcxx-exceptions -DMS_MODE - verify %s
490 +// RUN: %clang_cc1 -fms-compatibility -fexceptions -fcxx-exceptions -verify %s
491 // expected-no-diagnostics
492
493 -// RUN: %clang_cc1 -fms-compatibility -fexceptions -verify %s
494 -// expected-no-diagnostics
495 -
496 -#if defined(MS_MODE) && defined(__EXCEPTIONS)
497 +#if defined(__EXCEPTIONS)
498 #error __EXCEPTIONS should not be defined.
499 #endif
500 diff --git a/test/Preprocessor/predefined-exceptions.m b/test/Preprocessor/prede fined-exceptions.m
501 index 0791075..c13f429 100644
502 --- a/test/Preprocessor/predefined-exceptions.m
503 +++ b/test/Preprocessor/predefined-exceptions.m
504 @@ -1,6 +1,6 @@
505 // RUN: %clang_cc1 -x objective-c -fobjc-exceptions -fexceptions -E -dM %s | Fi leCheck -check-prefix=CHECK-OBJC-NOCXX %s
506 // CHECK-OBJC-NOCXX: #define OBJC_ZEROCOST_EXCEPTIONS 1
507 -// CHECK-OBJC-NOCXX: #define __EXCEPTIONS 1
508 +// CHECK-OBJC-NOCXX-NOT: #define __EXCEPTIONS 1
509
510 // RUN: %clang_cc1 -x objective-c++ -fobjc-exceptions -fexceptions -fcxx-except ions -E -dM %s | FileCheck -check-prefix=CHECK-OBJC-CXX %s
511 // CHECK-OBJC-CXX: #define OBJC_ZEROCOST_EXCEPTIONS 1
512 EOF
513 patch -p1
514 popd
515
516 # Apply r223177: "Ensure typos in the default values of template parameters ge t diagnosed."
517 pushd "${CLANG_DIR}"
518 cat << 'EOF' |
519 --- a/lib/Parse/ParseTemplate.cpp
520 +++ b/lib/Parse/ParseTemplate.cpp
521 @@ -676,7 +676,7 @@ Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsign ed Position) {
522 GreaterThanIsOperatorScope G(GreaterThanIsOperator, false);
523 EnterExpressionEvaluationContext Unevaluated(Actions, Sema::Unevaluated);
524
525 - DefaultArg = ParseAssignmentExpression();
526 + DefaultArg = Actions.CorrectDelayedTyposInExpr(ParseAssignmentExpression()) ;
527 if (DefaultArg.isInvalid())
528 SkipUntil(tok::comma, tok::greater, StopAtSemi | StopBeforeMatch);
529 }
530 diff --git a/test/SemaCXX/default2.cpp b/test/SemaCXX/default2.cpp
531 index 1626044..c4d40b4 100644
532 --- a/test/SemaCXX/default2.cpp
533 +++ b/test/SemaCXX/default2.cpp
534 @@ -122,3 +122,9 @@ class XX {
535 void A(int length = -1 ) { }
536 void B() { A(); }
537 };
538 +
539 +template <int I = (1 * I)> struct S {}; // expected-error-re {{use of undeclar ed identifier 'I'{{$}}}}
540 +S<1> s;
541 +
542 +template <int I1 = I2, int I2 = 1> struct T {}; // expected-error-re {{use of undeclared identifier 'I2'{{$}}}}
543 +T<0, 1> t;
544 diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correc tion-delayed.cpp
545 index bff1d76..7bf9258 100644
546 --- a/test/SemaCXX/typo-correction-delayed.cpp
547 +++ b/test/SemaCXX/typo-correction-delayed.cpp
548 @@ -102,3 +102,7 @@ void f(int *i) {
549 __atomic_load(i, i, something_something); // expected-error-re {{use of unde clared identifier 'something_something'{{$}}}}
550 }
551 }
552 +
553 +const int DefaultArg = 9; // expected-note {{'DefaultArg' declared here}}
554 +template <int I = defaultArg> struct S {}; // expected-error {{use of undeclar ed identifier 'defaultArg'; did you mean 'DefaultArg'?}}
555 +S<1> s;
556 EOF
557 patch -p1
558 popd
559
560 # Apply r223209: "Handle delayed corrections in a couple more error paths in P arsePostfixExpressionSuffix."
561 pushd "${CLANG_DIR}"
562 cat << 'EOF' |
563 --- a/lib/Parse/ParseExpr.cpp
564 +++ b/lib/Parse/ParseExpr.cpp
565 @@ -1390,6 +1390,7 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {
566 SourceLocation OpenLoc = ConsumeToken();
567
568 if (ParseSimpleExpressionList(ExecConfigExprs, ExecConfigCommaLocs)) {
569 + (void)Actions.CorrectDelayedTyposInExpr(LHS);
570 LHS = ExprError();
571 }
572
573 @@ -1440,6 +1441,7 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {
574 if (Tok.isNot(tok::r_paren)) {
575 if (ParseExpressionList(ArgExprs, CommaLocs, &Sema::CodeCompleteCall,
576 LHS.get())) {
577 + (void)Actions.CorrectDelayedTyposInExpr(LHS);
578 LHS = ExprError();
579 }
580 }
581 diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correc tion-delayed.cpp
582 index 7bf9258..f7ef015 100644
583 --- a/test/SemaCXX/typo-correction-delayed.cpp
584 +++ b/test/SemaCXX/typo-correction-delayed.cpp
585 @@ -106,3 +106,9 @@ void f(int *i) {
586 const int DefaultArg = 9; // expected-note {{'DefaultArg' declared here}}
587 template <int I = defaultArg> struct S {}; // expected-error {{use of undeclar ed identifier 'defaultArg'; did you mean 'DefaultArg'?}}
588 S<1> s;
589 +
590 +namespace foo {}
591 +void test_paren_suffix() {
592 + foo::bar({5, 6}); // expected-error-re {{no member named 'bar' in namespace 'foo'{{$}}}} \
593 + // expected-error {{expected expression}}
594 +}
595 EOF
596 patch -p1
597 popd
598
599 # Apply r223705: "Handle possible TypoExprs in member initializers."
600 pushd "${CLANG_DIR}"
601 cat << 'EOF' |
602 --- a/lib/Sema/SemaDeclCXX.cpp
603 +++ b/lib/Sema/SemaDeclCXX.cpp
604 @@ -2813,6 +2813,11 @@ Sema::BuildMemInitializer(Decl *ConstructorD,
605 SourceLocation IdLoc,
606 Expr *Init,
607 SourceLocation EllipsisLoc) {
608 + ExprResult Res = CorrectDelayedTyposInExpr(Init);
609 + if (!Res.isUsable())
610 + return true;
611 + Init = Res.get();
612 +
613 if (!ConstructorD)
614 return true;
615
616 diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correc tion-delayed.cpp
617 index f7ef015..d303b58 100644
618 --- a/test/SemaCXX/typo-correction-delayed.cpp
619 +++ b/test/SemaCXX/typo-correction-delayed.cpp
620 @@ -112,3 +112,10 @@ void test_paren_suffix() {
621 foo::bar({5, 6}); // expected-error-re {{no member named 'bar' in namespace 'foo'{{$}}}} \
622 // expected-error {{expected expression}}
623 }
624 +
625 +const int kNum = 10; // expected-note {{'kNum' declared here}}
626 +class SomeClass {
627 + int Kind;
628 +public:
629 + explicit SomeClass() : Kind(kSum) {} // expected-error {{use of undeclared i dentifier 'kSum'; did you mean 'kNum'?}}
630 +};
631 EOF
632 patch -p1
633 popd
634
635 # Apply r224172: "Typo correction: Ignore temporary binding exprs after overlo ad resolution"
636 pushd "${CLANG_DIR}"
637 cat << 'EOF' |
638 --- a/lib/Sema/SemaExprCXX.cpp
639 +++ b/lib/Sema/SemaExprCXX.cpp
640 @@ -6105,8 +6105,13 @@ public:
641 auto Result = BaseTransform::RebuildCallExpr(Callee, LParenLoc, Args,
642 RParenLoc, ExecConfig);
643 if (auto *OE = dyn_cast<OverloadExpr>(Callee)) {
644 - if (!Result.isInvalid() && Result.get())
645 - OverloadResolution[OE] = cast<CallExpr>(Result.get())->getCallee();
646 + if (!Result.isInvalid() && Result.get()) {
647 + Expr *ResultCall = Result.get();
648 + if (auto *BE = dyn_cast<CXXBindTemporaryExpr>(ResultCall))
649 + ResultCall = BE->getSubExpr();
650 + if (auto *CE = dyn_cast<CallExpr>(ResultCall))
651 + OverloadResolution[OE] = CE->getCallee();
652 + }
653 }
654 return Result;
655 }
656 diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correc tion-delayed.cpp
657 index d303b58..d42888f 100644
658 --- a/test/SemaCXX/typo-correction-delayed.cpp
659 +++ b/test/SemaCXX/typo-correction-delayed.cpp
660 @@ -119,3 +119,23 @@ class SomeClass {
661 public:
662 explicit SomeClass() : Kind(kSum) {} // expected-error {{use of undeclared i dentifier 'kSum'; did you mean 'kNum'?}}
663 };
664 +
665 +extern "C" int printf(const char *, ...);
666 +
667 +// There used to be an issue with typo resolution inside overloads.
668 +struct AssertionResult {
669 + ~AssertionResult();
670 + operator bool();
671 + int val;
672 +};
673 +AssertionResult Compare(const char *a, const char *b);
674 +AssertionResult Compare(int a, int b);
675 +int main() {
676 + // expected-note@+1 {{'result' declared here}}
677 + const char *result;
678 + // expected-error@+1 {{use of undeclared identifier 'resulta'; did you mean ' result'?}}
679 + if (AssertionResult ar = (Compare("value1", resulta)))
680 + ;
681 + else
682 + printf("ar: %d\n", ar.val);
683 +}
684 EOF
685 patch -p1
686 popd
687
688 # Apply r224173: "Implement feedback on r224172 in PR21899"
689 pushd "${CLANG_DIR}"
690 cat << 'EOF' |
691 --- a/lib/Sema/SemaExprCXX.cpp
692 +++ b/lib/Sema/SemaExprCXX.cpp
693 @@ -6105,7 +6105,7 @@ public:
694 auto Result = BaseTransform::RebuildCallExpr(Callee, LParenLoc, Args,
695 RParenLoc, ExecConfig);
696 if (auto *OE = dyn_cast<OverloadExpr>(Callee)) {
697 - if (!Result.isInvalid() && Result.get()) {
698 + if (Result.isUsable()) {
699 Expr *ResultCall = Result.get();
700 if (auto *BE = dyn_cast<CXXBindTemporaryExpr>(ResultCall))
701 ResultCall = BE->getSubExpr();
702 diff --git a/test/SemaCXX/typo-correction-delayed.cpp b/test/SemaCXX/typo-correc tion-delayed.cpp
703 index d42888f..7879d29 100644
704 --- a/test/SemaCXX/typo-correction-delayed.cpp
705 +++ b/test/SemaCXX/typo-correction-delayed.cpp
706 @@ -120,22 +120,13 @@ public:
707 explicit SomeClass() : Kind(kSum) {} // expected-error {{use of undeclared i dentifier 'kSum'; did you mean 'kNum'?}}
708 };
709
710 -extern "C" int printf(const char *, ...);
711 -
712 // There used to be an issue with typo resolution inside overloads.
713 -struct AssertionResult {
714 - ~AssertionResult();
715 - operator bool();
716 - int val;
717 -};
718 -AssertionResult Compare(const char *a, const char *b);
719 -AssertionResult Compare(int a, int b);
720 -int main() {
721 +struct AssertionResult { ~AssertionResult(); };
722 +AssertionResult Overload(const char *a);
723 +AssertionResult Overload(int a);
724 +void UseOverload() {
725 // expected-note@+1 {{'result' declared here}}
726 const char *result;
727 // expected-error@+1 {{use of undeclared identifier 'resulta'; did you mean ' result'?}}
728 - if (AssertionResult ar = (Compare("value1", resulta)))
729 - ;
730 - else
731 - printf("ar: %d\n", ar.val);
732 + Overload(resulta);
733 }
734 EOF
735 patch -p1
736 popd
737
738 # This Go bindings test doesn't work after the bootstrap build on Linux. (PR21 552) 402 # This Go bindings test doesn't work after the bootstrap build on Linux. (PR21 552)
739 pushd "${LLVM_DIR}" 403 pushd "${LLVM_DIR}"
740 cat << 'EOF' | 404 cat << 'EOF' |
741 Index: test/Bindings/Go/go.test 405 Index: test/Bindings/Go/go.test
742 =================================================================== 406 ===================================================================
743 --- test/Bindings/Go/go.test (revision 223109) 407 --- test/Bindings/Go/go.test (revision 223109)
744 +++ test/Bindings/Go/go.test (working copy) 408 +++ test/Bindings/Go/go.test (working copy)
745 @@ -1,3 +1,3 @@ 409 @@ -1,3 +1,3 @@
746 -; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm 410 -; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm
747 +; RUN: true 411 +; RUN: true
748 412
749 ; REQUIRES: shell 413 ; REQUIRES: shell
750 EOF 414 EOF
751 patch -p0 415 patch -p0
752 popd 416 popd
753 417
418
754 fi 419 fi
755 420
756 # Echo all commands. 421 # Echo all commands.
757 set -x 422 set -x
758 423
759 # Set default values for CC and CXX if they're not set in the environment. 424 # Set default values for CC and CXX if they're not set in the environment.
760 CC=${CC:-cc} 425 CC=${CC:-cc}
761 CXX=${CXX:-c++} 426 CXX=${CXX:-c++}
762 427
763 if [[ -n "${gcc_toolchain}" ]]; then 428 if [[ -n "${gcc_toolchain}" ]]; then
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 fi 661 fi
997 662
998 if [[ -n "$run_tests" ]]; then 663 if [[ -n "$run_tests" ]]; then
999 # Run Chrome tool tests. 664 # Run Chrome tool tests.
1000 ninja -C "${LLVM_BUILD_DIR}" cr-check-all 665 ninja -C "${LLVM_BUILD_DIR}" cr-check-all
1001 # Run the LLVM and Clang tests. 666 # Run the LLVM and Clang tests.
1002 ninja -C "${LLVM_BUILD_DIR}" check-all 667 ninja -C "${LLVM_BUILD_DIR}" check-all
1003 fi 668 fi
1004 669
1005 # After everything is done, log success for this revision. 670 # After everything is done, log success for this revision.
1006 echo "${CLANG_AND_PLUGINS_REVISION}" > "${STAMP_FILE}" 671 echo "${PACKAGE_VERSION}" > "${STAMP_FILE}"
OLDNEW
« no previous file with comments | « tools/clang/scripts/repackage.sh ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698