[llvm-branch-commits] [cfe-branch] r146593 - in /cfe/branches/tooling: ./ include/clang/AST/DeclBase.h lib/Driver/Tools.cpp lib/Sema/SemaExpr.cpp test/Analysis/taint-tester.c test/CXX/expr/expr.unary/expr.unary.op/p3.cpp test/Driver/frame-pointer.c
Chandler Carruth
chandlerc at gmail.com
Wed Dec 14 13:48:14 PST 2011
Author: chandlerc
Date: Wed Dec 14 15:48:14 2011
New Revision: 146593
URL: http://llvm.org/viewvc/llvm-project?rev=146593&view=rev
Log:
Sync the branch.
Added:
cfe/branches/tooling/test/CXX/expr/expr.unary/expr.unary.op/p3.cpp
- copied unchanged from r146591, cfe/trunk/test/CXX/expr/expr.unary/expr.unary.op/p3.cpp
cfe/branches/tooling/test/Driver/frame-pointer.c
- copied unchanged from r146591, cfe/trunk/test/Driver/frame-pointer.c
Modified:
cfe/branches/tooling/ (props changed)
cfe/branches/tooling/include/clang/AST/DeclBase.h
cfe/branches/tooling/lib/Driver/Tools.cpp
cfe/branches/tooling/lib/Sema/SemaExpr.cpp
cfe/branches/tooling/test/Analysis/taint-tester.c
Propchange: cfe/branches/tooling/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 14 15:48:14 2011
@@ -1,2 +1,3 @@
/cfe/branches/type-system-rewrite:134693-134817
+/cfe/trunk:146581-146591
/cfe/trunk/test/SemaTemplate:126920
Modified: cfe/branches/tooling/include/clang/AST/DeclBase.h
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/tooling/include/clang/AST/DeclBase.h?rev=146593&r1=146592&r2=146593&view=diff
==============================================================================
--- cfe/branches/tooling/include/clang/AST/DeclBase.h (original)
+++ cfe/branches/tooling/include/clang/AST/DeclBase.h Wed Dec 14 15:48:14 2011
@@ -590,6 +590,12 @@
/// \brief Whether this particular Decl is a canonical one.
bool isCanonicalDecl() const { return getCanonicalDecl() == this; }
+ /// \brief Determine whether this declaration declares the same entity as
+ /// the other declaration.
+ bool isSameEntityAs(const Decl *Other) const {
+ return getCanonicalDecl() == Other->getCanonicalDecl();
+ }
+
protected:
/// \brief Returns the next redeclaration or itself if this is the only decl.
///
Modified: cfe/branches/tooling/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/tooling/lib/Driver/Tools.cpp?rev=146593&r1=146592&r2=146593&view=diff
==============================================================================
--- cfe/branches/tooling/lib/Driver/Tools.cpp (original)
+++ cfe/branches/tooling/lib/Driver/Tools.cpp Wed Dec 14 15:48:14 2011
@@ -1195,6 +1195,24 @@
CmdArgs.push_back("-export-dynamic");
}
+static bool shouldUseFramePointer(const ArgList &Args,
+ const llvm::Triple &Triple) {
+ if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer,
+ options::OPT_fomit_frame_pointer))
+ return A->getOption().matches(options::OPT_fno_omit_frame_pointer);
+
+ // Don't use a frame poiter on liunx x86 and x86_64 if optimizing.
+ if ((Triple.getArch() == llvm::Triple::x86_64 ||
+ Triple.getArch() == llvm::Triple::x86) &&
+ Triple.getOS() == llvm::Triple::Linux) {
+ if (Arg *A = Args.getLastArg(options::OPT_O_Group))
+ if (!A->getOption().matches(options::OPT_O0))
+ return false;
+ }
+
+ return true;
+}
+
void Clang::ConstructJob(Compilation &C, const JobAction &JA,
const InputInfo &Output,
const InputInfoList &Inputs,
@@ -1408,8 +1426,7 @@
CmdArgs.push_back("-mrtd");
// FIXME: Set --enable-unsafe-fp-math.
- if (Args.hasFlag(options::OPT_fno_omit_frame_pointer,
- options::OPT_fomit_frame_pointer))
+ if (shouldUseFramePointer(Args, getToolChain().getTriple()))
CmdArgs.push_back("-mdisable-fp-elim");
if (!Args.hasFlag(options::OPT_fzero_initialized_in_bss,
options::OPT_fno_zero_initialized_in_bss))
Modified: cfe/branches/tooling/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/tooling/lib/Sema/SemaExpr.cpp?rev=146593&r1=146592&r2=146593&view=diff
==============================================================================
--- cfe/branches/tooling/lib/Sema/SemaExpr.cpp (original)
+++ cfe/branches/tooling/lib/Sema/SemaExpr.cpp Wed Dec 14 15:48:14 2011
@@ -8257,6 +8257,48 @@
VK, OK, OpLoc));
}
+/// \brief Determine whether the given expression is a qualified member
+/// access expression, of a form that could be turned into a pointer to member
+/// with the address-of operator.
+static bool isQualifiedMemberAccess(Expr *E) {
+ if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {
+ if (!DRE->getQualifier())
+ return false;
+
+ ValueDecl *VD = DRE->getDecl();
+ if (!VD->isCXXClassMember())
+ return false;
+
+ if (isa<FieldDecl>(VD) || isa<IndirectFieldDecl>(VD))
+ return true;
+ if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(VD))
+ return Method->isInstance();
+
+ return false;
+ }
+
+ if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
+ if (!ULE->getQualifier())
+ return false;
+
+ for (UnresolvedLookupExpr::decls_iterator D = ULE->decls_begin(),
+ DEnd = ULE->decls_end();
+ D != DEnd; ++D) {
+ if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(*D)) {
+ if (Method->isInstance())
+ return true;
+ } else {
+ // Overload set does not contain methods.
+ break;
+ }
+ }
+
+ return false;
+ }
+
+ return false;
+}
+
ExprResult Sema::BuildUnaryOp(Scope *S, SourceLocation OpLoc,
UnaryOperatorKind Opc, Expr *Input) {
// First things first: handle placeholders so that the
@@ -8286,7 +8328,8 @@
}
if (getLangOptions().CPlusPlus && Input->getType()->isOverloadableType() &&
- UnaryOperator::getOverloadedOperator(Opc) != OO_None) {
+ UnaryOperator::getOverloadedOperator(Opc) != OO_None &&
+ !(Opc == UO_AddrOf && isQualifiedMemberAccess(Input))) {
// Find all of the overloaded operators visible from this
// point. We perform both an operator-name lookup from the local
// scope and an argument-dependent lookup based on the types of
Modified: cfe/branches/tooling/test/Analysis/taint-tester.c
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/tooling/test/Analysis/taint-tester.c?rev=146593&r1=146592&r2=146593&view=diff
==============================================================================
--- cfe/branches/tooling/test/Analysis/taint-tester.c (original)
+++ cfe/branches/tooling/test/Analysis/taint-tester.c Wed Dec 14 15:48:14 2011
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -analyze -analyzer-checker=experimental.security.taint,debug.TaintTest -verify %s
+// RUN: %clang_cc1 -analyze -analyzer-checker=experimental.security.taint,debug.TaintTest %s
#include <stdarg.h>
More information about the llvm-branch-commits
mailing list