> On Oct 19, 2016, at 4:19 AM, Vassil Vassilev via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > Author: vvassilev > Date: Wed Oct 19 06:19:30 2016 > New Revision: 284577 > > URL: http://llvm.org/viewvc/llvm-project?rev=284577&view=rev > Log: > [modules] Do not report missing definitions of demoted constexpr variable > templates. > > This is a followup to regression introduced in r284284. > > This should fix our libstdc++ modules builds. > > https://reviews.llvm.org/D25678 > > Reviewed by Richard Smith! > > Added: > cfe/trunk/test/Modules/Inputs/merge-var-template-def/a.h > cfe/trunk/test/Modules/Inputs/merge-var-template-def/b1.h > cfe/trunk/test/Modules/Inputs/merge-var-template-def/b2.h > cfe/trunk/test/Modules/Inputs/merge-var-template-def/module.modulemap > cfe/trunk/test/Modules/merge-var-template-def.cpp > Modified: > cfe/trunk/lib/Sema/SemaDecl.cpp > > Modified: cfe/trunk/lib/Sema/SemaDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=284577&r1=284576&r2=284577&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Oct 19 06:19:30 2016 > @@ -10124,7 +10124,11 @@ void Sema::ActOnUninitializedDecl(Decl * > // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only > to > // the definition of a variable [...] or the declaration of a static data > // member. > - if (Var->isConstexpr() && !Var->isThisDeclarationADefinition()) { > + if (Var->isConstexpr() && !Var->isThisDeclarationADefinition() && > + !Var->isThisDeclarationADemotedDefinition()) { > + assert((!Var->isThisDeclarationADemotedDefinition() || > + getLangOpts().Modules) && > + "Demoting decls is only in the contest of modules!”);
Just noticed the mismatch between this commit and the last reviewed patch :] The assert is still here. Manman > if (Var->isStaticDataMember()) { > // C++1z removes the relevant rule; the in-class declaration is always > // a definition there. > > Added: cfe/trunk/test/Modules/Inputs/merge-var-template-def/a.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-var-template-def/a.h?rev=284577&view=auto > ============================================================================== > --- cfe/trunk/test/Modules/Inputs/merge-var-template-def/a.h (added) > +++ cfe/trunk/test/Modules/Inputs/merge-var-template-def/a.h Wed Oct 19 > 06:19:30 2016 > @@ -0,0 +1,8 @@ > +#ifndef A_H > +#define A_H > +template<typename T, T v> > +struct S { static constexpr T value = v; }; > +template<typename T, T v> > +constexpr T S<T, v>::value; > + > +#endif > > Added: cfe/trunk/test/Modules/Inputs/merge-var-template-def/b1.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-var-template-def/b1.h?rev=284577&view=auto > ============================================================================== > --- cfe/trunk/test/Modules/Inputs/merge-var-template-def/b1.h (added) > +++ cfe/trunk/test/Modules/Inputs/merge-var-template-def/b1.h Wed Oct 19 > 06:19:30 2016 > @@ -0,0 +1,9 @@ > +#ifndef B1_H > +#define B1_H > +template<typename T, T v> > +struct S { static constexpr T value = v; }; > +template<typename T, T v> > +constexpr T S<T, v>::value; > + > +#include "a.h" > +#endif > > Added: cfe/trunk/test/Modules/Inputs/merge-var-template-def/b2.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-var-template-def/b2.h?rev=284577&view=auto > ============================================================================== > --- cfe/trunk/test/Modules/Inputs/merge-var-template-def/b2.h (added) > +++ cfe/trunk/test/Modules/Inputs/merge-var-template-def/b2.h Wed Oct 19 > 06:19:30 2016 > @@ -0,0 +1,9 @@ > +#ifndef B2_H > +#define B2_H > + > +template<typename T, T v> > +struct S { static constexpr T value = v; }; > +template<typename T, T v> > +constexpr T S<T, v>::value; > + > +#endif > > Added: cfe/trunk/test/Modules/Inputs/merge-var-template-def/module.modulemap > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-var-template-def/module.modulemap?rev=284577&view=auto > ============================================================================== > --- cfe/trunk/test/Modules/Inputs/merge-var-template-def/module.modulemap > (added) > +++ cfe/trunk/test/Modules/Inputs/merge-var-template-def/module.modulemap Wed > Oct 19 06:19:30 2016 > @@ -0,0 +1,5 @@ > +module a { header "a.h" export * } > +module b { > + module b1 { header "b1.h" export * } > + module b2 { header "b2.h" export * } > +} > > Added: cfe/trunk/test/Modules/merge-var-template-def.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/merge-var-template-def.cpp?rev=284577&view=auto > ============================================================================== > --- cfe/trunk/test/Modules/merge-var-template-def.cpp (added) > +++ cfe/trunk/test/Modules/merge-var-template-def.cpp Wed Oct 19 06:19:30 2016 > @@ -0,0 +1,7 @@ > +// RUN: rm -rf %t > +// RUN: %clang_cc1 -I%S/Inputs/merge-var-template-def -std=c++11 -verify %s > +// RUN: %clang_cc1 -I%S/Inputs/merge-var-template-def -std=c++11 -verify > -fmodules -Werror=undefined-internal -fmodules-local-submodule-visibility > -fmodules-cache-path=%t -fimplicit-module-maps %s > +// expected-no-diagnostics > + > +#include "b2.h" > +const bool *y = &S<bool, false>::value; > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits