diff options
author | Reid Kleckner <rnk@google.com> | 2019-07-08 21:59:07 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2019-07-08 21:59:07 +0000 |
commit | 345708b68118a9950c3d6958c562d6fe2c834be3 (patch) | |
tree | 673f0ec2c6d4768dc9e716ccd375d03701c803ce /clang/lib | |
parent | a5ede3182bc07cf453c7b601dce0f0a8af2b624d (diff) | |
download | bcm5719-llvm-345708b68118a9950c3d6958c562d6fe2c834be3.tar.gz bcm5719-llvm-345708b68118a9950c3d6958c562d6fe2c834be3.zip |
Revert [Sema] Resolve placeholder types before type deduction to silence spurious `-Warc-repeated-use-of-weak` warnings
This reverts r365382 (git commit 8b1becf2e31d9170ee356a19c7b6ea991d3a520f)
Appears to regress this semi-reduced fragment of valid code from windows
SDK headers:
#define InterlockedIncrement64 _InterlockedIncrement64
extern "C" __int64 InterlockedIncrement64(__int64 volatile *Addend);
#pragma intrinsic(_InterlockedIncrement64)
unsigned __int64 InterlockedIncrement(unsigned __int64 volatile *Addend) {
return (unsigned __int64)(InterlockedIncrement64)((volatile __int64 *)Addend);
}
Found on a buildbot here, but no mail was sent due to it already being
red:
http://lab.llvm.org:8011/builders/sanitizer-windows/builds/48067
llvm-svn: 365393
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 34 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 8 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 8 |
3 files changed, 12 insertions, 38 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index f2838df6923..03b6cc91657 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -10985,6 +10985,18 @@ QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, return QualType(); } + // Expressions default to 'id' when we're in a debugger. + bool DefaultedAnyToId = false; + if (getLangOpts().DebuggerCastResultToId && + Init->getType() == Context.UnknownAnyTy && !IsInitCapture) { + ExprResult Result = forceUnknownAnyToType(Init, Context.getObjCIdType()); + if (Result.isInvalid()) { + return QualType(); + } + Init = Result.get(); + DefaultedAnyToId = true; + } + // C++ [dcl.decomp]p1: // If the assignment-expression [...] has array type A and no ref-qualifier // is present, e has type cv A @@ -11018,7 +11030,6 @@ QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, // checks. // We only want to warn outside of template instantiations, though: // inside a template, the 'id' could have come from a parameter. - bool DefaultedAnyToId = VDecl && VDecl->hasAttr<ObjCDefaultedAnyToIdAttr>(); if (!inTemplateInstantiation() && !DefaultedAnyToId && !IsInitCapture && !DeducedType.isNull() && DeducedType->isObjCIdType()) { SourceLocation Loc = TSI->getTypeLoc().getBeginLoc(); @@ -11097,27 +11108,6 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) { } Init = Res.get(); - // Expressions default to 'id' when we're in a debugger - // and we are assigning it to a variable of Objective-C pointer type. - if (getLangOpts().DebuggerCastResultToId && - Init->getType() == Context.UnknownAnyTy) { - ExprResult Result = forceUnknownAnyToType(Init, Context.getObjCIdType()); - if (Result.isInvalid()) { - VDecl->setInvalidDecl(); - return; - } - Init = Result.get(); - VDecl->addAttr(ObjCDefaultedAnyToIdAttr::CreateImplicit(Context)); - } else if (!Init->getType().isNull() && - Init->hasNonOverloadPlaceholderType()) { - Res = CheckPlaceholderExpr(Init).get(); - if (!Res.isUsable()) { - VDecl->setInvalidDecl(); - return; - } - Init = Res.get(); - } - if (DeduceVariableDeclarationType(VDecl, DirectInit, Init)) return; } diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index f44235491d6..466d9fdb9b9 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -6678,14 +6678,6 @@ Sema::MaybeConvertParenListExprToParenExpr(Scope *S, Expr *OrigExpr) { ExprResult Sema::ActOnParenListExpr(SourceLocation L, SourceLocation R, MultiExprArg Val) { - for (size_t I = 0, E = Val.size(); I != E; ++I) - if (Val[I]->hasNonOverloadPlaceholderType()) { - ExprResult Result = CheckPlaceholderExpr(Val[I]); - if (!Result.isUsable()) - return ExprError(); - Val[I] = Result.get(); - } - return ParenListExpr::Create(Context, L, Val, R); } diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 5a71443e792..32b35ba7c32 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -1793,14 +1793,6 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, NumInits = List->getNumExprs(); } - for (unsigned I = 0, E = NumInits; I != E; ++I) - if (Inits[I]->hasNonOverloadPlaceholderType()) { - ExprResult Result = CheckPlaceholderExpr(Inits[I]); - if (!Result.isUsable()) - return ExprError(); - Inits[I] = Result.get(); - } - // C++11 [expr.new]p15: // A new-expression that creates an object of type T initializes that // object as follows: |