erichkeane added a comment.

Presumably this didn't break any tests, so I'm Ok with it.  The initial patch 
was to make sure that template specializations could clear certain attributes, 
so I think this properly gets that done.  The below test was apparently missed 
in the initial patch (and was the reason for the revert/restore), so perhaps 
this is something that could be validated still works as well.  See comments 
here: https://reviews.llvm.org/rL298410

class Mutex {
public:

  void Lock() __attribute__((exclusive_lock_function()));
  void Unlock() __attribute__((unlock_function()));

};

class A {
public:

  Mutex mu1, mu2;
  
  void foo() __attribute__((exclusive_locks_required(mu1))) 
__attribute__((exclusive_locks_required(mu2))) {}
  
  template <class T> void bar() __attribute__((exclusive_locks_required(mu1))) 
__attribute__((exclusive_locks_required(mu2))) {
    foo();
  }

};

void f() {

  A a;
  a.mu1.Lock();
  a.mu2.Lock();
  a.bar<int>();
  a.mu2.Unlock();
  a.mu1.Unlock();

}


Repository:
  rC Clang

https://reviews.llvm.org/D41736



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to