r352307 - Remove Expr sugar decorating the CXXUuidofExpr node.

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 4 01:52:14 PST 2019


Merged to 8.0 in r353031.

On Sun, Jan 27, 2019 at 8:23 AM Bill Wendling via cfe-commits
<cfe-commits at 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 at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list