Always rebuild a DeclRefExpr if its FoundDecl would change.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 26 Sep 2019 22:28:32 +0000 (22:28 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 26 Sep 2019 22:28:32 +0000 (22:28 +0000)
Fixes a regression introduced by r369999.

llvm-svn: 373022

clang/lib/Sema/TreeTransform.h
clang/test/SemaTemplate/using-decl.cpp [new file with mode: 0644]

index 9218f9e..84e38c6 100644 (file)
@@ -9219,6 +9219,7 @@ TreeTransform<Derived>::TransformDeclRefExpr(DeclRefExpr *E) {
   if (!getDerived().AlwaysRebuild() &&
       QualifierLoc == E->getQualifierLoc() &&
       ND == E->getDecl() &&
+      Found == E->getFoundDecl() &&
       NameInfo.getName() == E->getDecl()->getDeclName() &&
       !E->hasExplicitTemplateArgs()) {
 
diff --git a/clang/test/SemaTemplate/using-decl.cpp b/clang/test/SemaTemplate/using-decl.cpp
new file mode 100644 (file)
index 0000000..1ef2a2d
--- /dev/null
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -std=c++2a -verify %s
+// expected-no-diagnostics
+
+namespace UsingInGenericLambda {
+  namespace a {
+    enum { b };
+  }
+  template<typename> void c() {
+    auto d = [](auto) {
+      using a::b;
+      (void)b;
+    };
+    d(0);
+  }
+  void e() { c<int>(); }
+}