forked from OSchip/llvm-project
Add -Wc++11-compat warning for an inline specifier on an explicit instantiation.
llvm-svn: 142333
This commit is contained in:
parent
4c42be5b32
commit
83c19296ff
|
@ -2428,6 +2428,8 @@ def note_explicit_instantiation_candidate : Note<
|
|||
"explicit instantiation candidate function template here %0">;
|
||||
def err_explicit_instantiation_inline : Error<
|
||||
"explicit instantiation cannot be 'inline'">;
|
||||
def warn_explicit_instantiation_inline_0x : Warning<
|
||||
"explicit instantiation cannot be 'inline'">, InGroup<CXX11Compat>;
|
||||
def err_explicit_instantiation_constexpr : Error<
|
||||
"explicit instantiation cannot be 'constexpr'">;
|
||||
def ext_explicit_instantiation_without_qualified_id : Extension<
|
||||
|
|
|
@ -6157,9 +6157,11 @@ DeclResult Sema::ActOnExplicitInstantiation(Scope *S,
|
|||
// inline or constexpr specifiers.
|
||||
// Presumably, this also applies to member functions of class templates as
|
||||
// well.
|
||||
if (D.getDeclSpec().isInlineSpecified() && getLangOptions().CPlusPlus0x)
|
||||
if (D.getDeclSpec().isInlineSpecified())
|
||||
Diag(D.getDeclSpec().getInlineSpecLoc(),
|
||||
diag::err_explicit_instantiation_inline)
|
||||
getLangOptions().CPlusPlus0x ?
|
||||
diag::err_explicit_instantiation_inline :
|
||||
diag::warn_explicit_instantiation_inline_0x)
|
||||
<< FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());
|
||||
if (D.getDeclSpec().isConstexprSpecified())
|
||||
// FIXME: Add a fix-it to remove the 'constexpr' and add a 'const' if one is
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace M {
|
|||
template void ::g<char>(char); // expected-warning {{explicit instantiation of 'g' must occur at global scope}}
|
||||
}
|
||||
|
||||
template inline void g<double>(double); // expected-warning {{explicit instantiation cannot be 'inline'}}
|
||||
|
||||
void g() {
|
||||
auto int n = 0; // expected-warning {{'auto' storage class specifier is redundant and incompatible with C++11}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue