r368463 - Revert Even more warnings utilizing gsl::Owner/gsl::Pointer annotations

Gabor Horvath via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 9 12:01:23 PDT 2019


Author: xazax
Date: Fri Aug  9 12:01:23 2019
New Revision: 368463

URL: http://llvm.org/viewvc/llvm-project?rev=368463&view=rev
Log:
Revert Even more warnings utilizing gsl::Owner/gsl::Pointer annotations

This reverts r368454 (git commit 7c3c8ba8daf40534e09f6fe8701b723e25e4e2dc)

Modified:
    cfe/trunk/lib/Sema/SemaInit.cpp
    cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp

Modified: cfe/trunk/lib/Sema/SemaInit.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=368463&r1=368462&r2=368463&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaInit.cpp (original)
+++ cfe/trunk/lib/Sema/SemaInit.cpp Fri Aug  9 12:01:23 2019
@@ -6568,33 +6568,19 @@ static bool shouldTrackImplicitObjectArg
   if (auto *Conv = dyn_cast_or_null<CXXConversionDecl>(Callee))
     if (isRecordWithAttr<PointerAttr>(Conv->getConversionType()))
       return true;
-  if (!Callee->getParent()->isInStdNamespace())
+  if (!Callee->getParent()->isInStdNamespace() || !Callee->getIdentifier())
     return false;
   if (!isRecordWithAttr<PointerAttr>(Callee->getThisObjectType()) &&
       !isRecordWithAttr<OwnerAttr>(Callee->getThisObjectType()))
     return false;
-  if (Callee->getReturnType()->isPointerType() ||
-      isRecordWithAttr<PointerAttr>(Callee->getReturnType())) {
-    if (!Callee->getIdentifier())
-      return false;
-    return llvm::StringSwitch<bool>(Callee->getName())
-        .Cases("begin", "rbegin", "cbegin", "crbegin", true)
-        .Cases("end", "rend", "cend", "crend", true)
-        .Cases("c_str", "data", "get", true)
-        // Map and set types.
-        .Cases("find", "equal_range", "lower_bound", "upper_bound", true)
-        .Default(false);
-  } else if (Callee->getReturnType()->isReferenceType()) {
-    if (!Callee->getIdentifier()) {
-      auto OO = Callee->getOverloadedOperator();
-      return OO == OverloadedOperatorKind::OO_Subscript ||
-             OO == OverloadedOperatorKind::OO_Star;
-    }
-    return llvm::StringSwitch<bool>(Callee->getName())
-        .Cases("front", "back", "at", true)
-        .Default(false);
-  }
-  return false;
+  if (!isRecordWithAttr<PointerAttr>(Callee->getReturnType()) &&
+      !Callee->getReturnType()->isPointerType())
+    return false;
+  return llvm::StringSwitch<bool>(Callee->getName())
+      .Cases("begin", "rbegin", "cbegin", "crbegin", true)
+      .Cases("end", "rend", "cend", "crend", true)
+      .Cases("c_str", "data", "get", true)
+      .Default(false);
 }
 
 static void handleGslAnnotatedTypes(IndirectLocalPath &Path, Expr *Call,
@@ -6614,12 +6600,6 @@ static void handleGslAnnotatedTypes(Indi
     if (MD && shouldTrackImplicitObjectArg(MD))
       VisitPointerArg(MD, MCE->getImplicitObjectArgument());
     return;
-  } else if (auto *OCE = dyn_cast<CXXOperatorCallExpr>(Call)) {
-    FunctionDecl *Callee = OCE->getDirectCallee();
-    if (Callee->isCXXInstanceMember() &&
-        shouldTrackImplicitObjectArg(cast<CXXMethodDecl>(Callee)))
-      VisitPointerArg(Callee, OCE->getArg(0));
-    return;
   }
 
   if (auto *CCE = dyn_cast<CXXConstructExpr>(Call)) {

Modified: cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp?rev=368463&r1=368462&r2=368463&view=diff
==============================================================================
--- cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp (original)
+++ cfe/trunk/test/Sema/warn-lifetime-analysis-nocfg.cpp Fri Aug  9 12:01:23 2019
@@ -121,47 +121,24 @@ void initLocalGslPtrWithTempOwner() {
 
 namespace std {
 template <typename T>
-struct basic_iterator {
-  basic_iterator operator++();
-  T& operator*();
-};
-
-template<typename T>
-bool operator!=(basic_iterator<T>, basic_iterator<T>);
+struct basic_iterator {};
 
 template <typename T>
 struct vector {
   typedef basic_iterator<T> iterator;
   iterator begin();
-  iterator end();
   T *data();
-  T &at(int n);
-};
-
-template<typename T>
-struct basic_string_view {
-  basic_string_view(const T *);
-  const T *begin() const;
 };
 
 template<typename T>
 struct basic_string {
   const T *c_str() const;
-  operator basic_string_view<T> () const;
 };
 
-
 template<typename T>
 struct unique_ptr {
   T *get() const;
 };
-
-template<typename T>
-struct optional {
-  optional();
-  optional(const T&);
-  T &operator*();
-};
 }
 
 void modelIterators() {
@@ -191,29 +168,3 @@ int *danglingUniquePtrFromTemp() {
 int *danglingUniquePtrFromTemp2() {
   return std::unique_ptr<int>().get(); // expected-warning {{returning address of local temporary object}}
 }
-
-void danglingReferenceFromTempOwner() {
-  int &r = *std::optional<int>(); // expected-warning {{object backing the pointer will be destroyed at the end of the full-expression}}
-  int &r2 = *std::optional<int>(5); // expected-warning {{object backing the pointer will be destroyed at the end of the full-expression}}
-  int &r3 = std::vector<int>().at(3); // expected-warning {{object backing the pointer will be destroyed at the end of the full-expression}}
-}
-
-std::vector<int> getTempVec();
-std::optional<std::vector<int>> getTempOptVec();
-
-int &usedToBeFalsePositive(std::vector<int> &v) {
-  std::vector<int>::iterator it = v.begin();
-  int& value = *it;
-  return value; // ok
-}
-
-int &doNotFollowReferencesForLocalOwner() {
-  std::unique_ptr<int> localOwner;
-  int &p = *localOwner.get();
-  // In real world code localOwner is usually moved here.
-  return p; // ok
-}
-
-const char *trackThroughMultiplePointer() {
-  return std::basic_string_view<char>(std::basic_string<char>()).begin(); // expected-warning {{returning address of local temporary object}}
-}




More information about the cfe-commits mailing list