stbuehler added a comment.

Just for the record: substitution doesn't work yet (it should add available 
tags from the substitution, but doesn't).

This example shows the difference: my patch mangles `T::F()` as 
`N::Name(N::__test::Result)::T::F[abi:test](N::__test::Result)`, but actually 
shouldn't emit the abi tag.

  namespace N {
    inline namespace __test
    __attribute__((abi_tag("test"))) {
      struct Result {
        const char *str;
      };
    }
  
    inline Result Name(Result p1) {
      struct T {
        Result F(Result p2) {
          struct S {
            Result F(Result p3) {
              static Result s3 = p3;
              return s3;
            }
          };
          static Result s2 = S().F(p2);
          return s2;
        }
      };
      static Result s1 = T().F(p1);
      return s1;
    }
  
    void F() {
      // instantiate Name()
      Name(Result());
    }
  }


Repository:
  rL LLVM

http://reviews.llvm.org/D12834



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

Reply via email to