<div dir="ltr"><div>You use this pattern in a few places:</div><div><br></div><div>+#if (__cplusplus <= 199711L) // C or C++03 or earlier modes<br></div><div><br></div><div>Please remove the "C or" from the tests that are not actually run in C mode (most or all of these tests make no sense in C, so the comment is confusing). Also remove the parens.</div><div><br></div><div>Otherwise, this looks good to me, thank you!</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Nov 10, 2015 at 4:28 PM, Li, Charles via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal">Hello Clang developers,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I am back again with another patch to make Clang Lit tests C++11 compatible.<u></u><u></u></p>
<p class="MsoNormal">There are 26 tests in total. <u></u><u></u></p>
<p class="MsoNormal">These are mainly diagnostics verifications where C++98/03 and C++11 differ.<u></u><u></u></p>
<p class="MsoNormal">I tried to preserve as much coverage as possible. <u></u><u></u></p>
<p class="MsoNormal">Unless otherwise stated, these tests have their RUN line expanded to run at: default C++ dialect, C++98 and C++11.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Here are the description of what I did with each in the order as they appear in the patch.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/CXX/class.access/class.friend/p2-cxx03.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  "non-class friend type 'T' is a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p6.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  "explicit conversion functions are a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  "befriending enumeration type 'enum E' is a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3.cpp<u></u><u></u></p>
<p class="MsoNormal">  Verify for different diagnostic between C++03 and earlier vs C++11 and later<u></u><u></u></p>
<p class="MsoNormal">  C++03: conversion from string literal to 'char *' is deprecated<u></u><u></u></p>
<p class="MsoNormal">  C++11: ISO C++11 does not allow conversion from string literal to 'char *'<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/CodeGen/ubsan-type-blacklist.cpp<u></u><u></u></p>
<p class="MsoNormal">  Relaxed FileCheck string to accommodate changes in LLVM-IR on actual argument type for “bar”.<u></u><u></u></p>
<p class="MsoNormal">  C++03: %class.Bar* @bar<u></u><u></u></p>
<p class="MsoNormal">  C++11: { i8** }* @bar<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/FixIt/fixit-vexing-parse.cpp<u></u><u></u></p>
<p class="MsoNormal">  Set this test to always run at C++98.<u></u><u></u></p>
<p class="MsoNormal">  C++11 coverage is provided by fixit-vexing-parse-cxx0x.cpp.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/addr-of-overloaded-function.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  "default template arguments for a function template are a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/const-cast.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  "rvalue references are a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/convert-to-bool.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  "explicit conversion functions are a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/copy-initialization.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  "rvalue references are a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/cxx0x-return-init-list.cpp<u></u><u></u></p>
<p class="MsoNormal">  Force this test to always run at C++03 (-std=c++98).<u></u><u></u></p>
<p class="MsoNormal">  This test verifies for very basic initializer return support in C++98.<u></u><u></u></p>
<p class="MsoNormal">  It checks for the following diagnostic at C++03<u></u><u></u></p>
<p class="MsoNormal">  "generalized initializer lists are a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/decltype-crash.cpp<u></u><u></u></p>
<p class="MsoNormal">  Force this test to always run at C++03 (-std=c++98).<u></u><u></u></p>
<p class="MsoNormal">  This test verifies against decltype crash back in 2009.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/gnu-flags.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  “in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension”<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/invalid-member-expr.cpp<u></u><u></u></p>
<p class="MsoNormal">  For code:  pair<int, int> z = minmax({});<u></u><u></u></p>
<p class="MsoNormal">  Empty initializer list is valid in C++11, but since minmax is not defined anywhere in the program, compiler issues an error.<u></u><u></u></p>
<p class="MsoNormal">  Therefore, in C++03 and earlier, we check for diagnostic: “expected expression”<u></u><u></u></p>
<p class="MsoNormal">  In C++11 and later, we check for diagnostic: “use of undeclared identifier 'minmax'”</p></div></div></blockquote><div><br></div><div>I would prefer to add a declaration of 'minmax' to the test, but I'm OK with this approach too.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div>
<p class="MsoNormal">test/SemaCXX/member-expr.cpp<u></u><u></u></p>
<p class="MsoNormal">  In C++11, “template” can be used outside of a template.<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  “'template' keyword outside of a template”<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/member-pointer.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  "use of enumeration in a nested name specifier is a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/new-array-size-conv.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following two diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  “implicit conversion from array size expression of type 'ValueInt' to integral type 'int' is a C++11 extension”<u></u><u></u></p>
<p class="MsoNormal">  “implicit conversion from array size expression of type 'ValueEnum' to enumeration type 'E' is a C++11 extension”<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/offsetof.cpp<u></u><u></u></p>
<p class="MsoNormal">  Force this test to be C++98 only. Test offsetof-0x.cpp exists to verify for C++11 behavior<u></u><u></u></p>
<p class="MsoNormal">  Diagnostic change<u></u><u></u></p>
<p class="MsoNormal">  C++98: warning: offset of on non-POD type<u></u><u></u></p>
<p class="MsoNormal">  C++11: warning: offset of on non-standard-layout type<u></u><u></u></p>
<p class="MsoNormal">  <u></u><u></u></p>
<p class="MsoNormal">test/SemaCXX/printf-block.cpp<u></u><u></u></p>
<p class="MsoNormal">  This test verifies the diagnostic when trying to pass a non-POD struct then access its string value.<u></u><u></u></p>
<p class="MsoNormal">  C++11 allows passing non-POD objects via va_arg (5.2.2/7). But since the object does not have a c_str() method. So the compiler will issue a warning on that<u></u><u></u></p>
<p class="MsoNormal">  Here are the different diagnostics we verify for.<u></u><u></u></p>
<p class="MsoNormal">  C++03: cannot pass non-POD object of type 'HasNoCStr' to variadic block; expected type from format string was 'char *'<u></u><u></u></p>
<p class="MsoNormal">  C++11: format specifies type 'char *' but the argument has type 'HasNoCStr'<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaCXX/undefined-internal.cpp<u></u><u></u></p>
<p class="MsoNormal">  Verify for different diagnostics depending on the dialect.<u></u><u></u></p>
<p class="MsoNormal">  C++03: “C++98 requires an accessible copy constructor”<u></u><u></u></p>
<p class="MsoNormal">  C++03: “copying parameter of type 'PR9323::(anonymous namespace)::Uncopyable' when binding a reference to a temporary would invoke an inaccessible constructor in C++98”<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaObjCXX/<a href="http://crash.mm" target="_blank">crash.mm</a><u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  “variadic templates are a C++11 extension”<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaObjCXX/<a href="http://vararg-non-pod.mm" target="_blank">vararg-non-pod.mm</a><u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  “cannot pass object of non-POD type 'C' through variadic method; call will abort at runtime”<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaTemplate/default-arguments.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  “default template arguments for a function template are a C++11 extension”<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaTemplate/temp_class_spec_neg.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  "first declaration of class template partial specialization of 'A' outside namespace 'M' is a C++11 extension"<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaTemplate/typename-specifier-4.cpp<u></u><u></u></p>
<p class="MsoNormal">  Keywords "template"and "typename" can be used outside a template in C++11.<u></u><u></u></p>
<p class="MsoNormal">  Only verify the following two diagnostics on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  'template' keyword outside of a template<u></u><u></u></p>
<p class="MsoNormal">  'typename' occurs outside of a template<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">test/SemaTemplate/typename-specifier.cpp<u></u><u></u></p>
<p class="MsoNormal">  Only verify all occurrences the following diagnostics on C++03 and earlier.<u></u><u></u></p>
<p class="MsoNormal">  'typename' occurs outside of a template<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Cheers,<u></u><u></u></p>
<p class="MsoNormal">Charles<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>