Merged to 8.0 in r353031.
On Sun, Jan 27, 2019 at 8:23 AM Bill Wendling via cfe-commits <cfe-commits@lists.llvm.org> wrote: > > Author: void > Date: Sat Jan 26 23:24:03 2019 > New Revision: 352307 > > URL: http://llvm.org/viewvc/llvm-project?rev=352307&view=rev > Log: > Remove Expr sugar decorating the CXXUuidofExpr node. > > Summary: Sugar, like ConstantExpr, causes an infinite expansion of the > template object. > > Reviewers: rsmith, aaron.ballman > > Reviewed By: aaron.ballman > > Subscribers: riccibruno, aaron.ballman, cfe-commits, tzik, rnk > > Differential Revision: https://reviews.llvm.org/D57114 > > Added: > cfe/trunk/test/SemaCXX/PR40395.cpp > Modified: > cfe/trunk/lib/Sema/SemaTemplate.cpp > > Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=352307&r1=352306&r2=352307&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) > +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Sat Jan 26 23:24:03 2019 > @@ -6308,7 +6308,7 @@ ExprResult Sema::CheckTemplateArgument(N > // -- a predefined __func__ variable > if (auto *E = Value.getLValueBase().dyn_cast<const Expr*>()) { > if (isa<CXXUuidofExpr>(E)) { > - Converted = TemplateArgument(ArgResult.get()); > + Converted = TemplateArgument(ArgResult.get()->IgnoreImpCasts()); > break; > } > Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) > > Added: cfe/trunk/test/SemaCXX/PR40395.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/PR40395.cpp?rev=352307&view=auto > ============================================================================== > --- cfe/trunk/test/SemaCXX/PR40395.cpp (added) > +++ cfe/trunk/test/SemaCXX/PR40395.cpp Sat Jan 26 23:24:03 2019 > @@ -0,0 +1,16 @@ > +// RUN: %clang_cc1 -std=c++17 -fms-extensions -triple=x86_64-pc-win32 > -verify %s > +// expected-no-diagnostics > + > +// PR40395 - ConstantExpr shouldn't cause the template object to infinitely > +// expand. > +struct _GUID {}; > +struct __declspec(uuid("{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}")) B {}; > + > +template <const _GUID* piid> > +struct A { > + virtual void baz() { A<piid>(); } > +}; > + > +void f() { > + A<&__uuidof(B)>(); > +} > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits