<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hello Clang developers,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I am back again with another patch to make Clang Lit tests C++11 compatible.<o:p></o:p></p>
<p class="MsoNormal">There are 26 tests in total. <o:p></o:p></p>
<p class="MsoNormal">These are mainly diagnostics verifications where C++98/03 and C++11 differ.<o:p></o:p></p>
<p class="MsoNormal">I tried to preserve as much coverage as possible. <o:p></o:p></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.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here are the description of what I did with each in the order as they appear in the patch.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/CXX/class.access/class.friend/p2-cxx03.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  "non-class friend type 'T' is a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p6.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  "explicit conversion functions are a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p3.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  "befriending enumeration type 'enum E' is a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3.cpp<o:p></o:p></p>
<p class="MsoNormal">  Verify for different diagnostic between C++03 and earlier vs C++11 and later<o:p></o:p></p>
<p class="MsoNormal">  C++03: conversion from string literal to 'char *' is deprecated<o:p></o:p></p>
<p class="MsoNormal">  C++11: ISO C++11 does not allow conversion from string literal to 'char *'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/CodeGen/ubsan-type-blacklist.cpp<o:p></o:p></p>
<p class="MsoNormal">  Relaxed FileCheck string to accommodate changes in LLVM-IR on actual argument type for “bar”.<o:p></o:p></p>
<p class="MsoNormal">  C++03: %class.Bar* @bar<o:p></o:p></p>
<p class="MsoNormal">  C++11: { i8** }* @bar<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/FixIt/fixit-vexing-parse.cpp<o:p></o:p></p>
<p class="MsoNormal">  Set this test to always run at C++98.<o:p></o:p></p>
<p class="MsoNormal">  C++11 coverage is provided by fixit-vexing-parse-cxx0x.cpp.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/addr-of-overloaded-function.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  "default template arguments for a function template are a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/const-cast.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  "rvalue references are a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/convert-to-bool.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  "explicit conversion functions are a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/copy-initialization.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  "rvalue references are a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/cxx0x-return-init-list.cpp<o:p></o:p></p>
<p class="MsoNormal">  Force this test to always run at C++03 (-std=c++98).<o:p></o:p></p>
<p class="MsoNormal">  This test verifies for very basic initializer return support in C++98.<o:p></o:p></p>
<p class="MsoNormal">  It checks for the following diagnostic at C++03<o:p></o:p></p>
<p class="MsoNormal">  "generalized initializer lists are a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/decltype-crash.cpp<o:p></o:p></p>
<p class="MsoNormal">  Force this test to always run at C++03 (-std=c++98).<o:p></o:p></p>
<p class="MsoNormal">  This test verifies against decltype crash back in 2009.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/gnu-flags.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></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”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/invalid-member-expr.cpp<o:p></o:p></p>
<p class="MsoNormal">  For code:  pair<int, int> z = minmax({});<o:p></o:p></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.<o:p></o:p></p>
<p class="MsoNormal">  Therefore, in C++03 and earlier, we check for diagnostic: “expected expression”<o:p></o:p></p>
<p class="MsoNormal">  In C++11 and later, we check for diagnostic: “use of undeclared identifier 'minmax'”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/member-expr.cpp<o:p></o:p></p>
<p class="MsoNormal">  In C++11, “template” can be used outside of a template.<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  “'template' keyword outside of a template”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/member-pointer.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  "use of enumeration in a nested name specifier is a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/new-array-size-conv.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following two diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  “implicit conversion from array size expression of type 'ValueInt' to integral type 'int' is a C++11 extension”<o:p></o:p></p>
<p class="MsoNormal">  “implicit conversion from array size expression of type 'ValueEnum' to enumeration type 'E' is a C++11 extension”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/offsetof.cpp<o:p></o:p></p>
<p class="MsoNormal">  Force this test to be C++98 only. Test offsetof-0x.cpp exists to verify for C++11 behavior<o:p></o:p></p>
<p class="MsoNormal">  Diagnostic change<o:p></o:p></p>
<p class="MsoNormal">  C++98: warning: offset of on non-POD type<o:p></o:p></p>
<p class="MsoNormal">  C++11: warning: offset of on non-standard-layout type<o:p></o:p></p>
<p class="MsoNormal">  <o:p></o:p></p>
<p class="MsoNormal">test/SemaCXX/printf-block.cpp<o:p></o:p></p>
<p class="MsoNormal">  This test verifies the diagnostic when trying to pass a non-POD struct then access its string value.<o:p></o:p></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<o:p></o:p></p>
<p class="MsoNormal">  Here are the different diagnostics we verify for.<o:p></o:p></p>
<p class="MsoNormal">  C++03: cannot pass non-POD object of type 'HasNoCStr' to variadic block; expected type from format string was 'char *'<o:p></o:p></p>
<p class="MsoNormal">  C++11: format specifies type 'char *' but the argument has type 'HasNoCStr'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaCXX/undefined-internal.cpp<o:p></o:p></p>
<p class="MsoNormal">  Verify for different diagnostics depending on the dialect.<o:p></o:p></p>
<p class="MsoNormal">  C++03: “C++98 requires an accessible copy constructor”<o:p></o:p></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”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaObjCXX/crash.mm<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  “variadic templates are a C++11 extension”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaObjCXX/vararg-non-pod.mm<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  “cannot pass object of non-POD type 'C' through variadic method; call will abort at runtime”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaTemplate/default-arguments.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  “default template arguments for a function template are a C++11 extension”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaTemplate/temp_class_spec_neg.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following diagnostic on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  "first declaration of class template partial specialization of 'A' outside namespace 'M' is a C++11 extension"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaTemplate/typename-specifier-4.cpp<o:p></o:p></p>
<p class="MsoNormal">  Keywords "template"and "typename" can be used outside a template in C++11.<o:p></o:p></p>
<p class="MsoNormal">  Only verify the following two diagnostics on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  'template' keyword outside of a template<o:p></o:p></p>
<p class="MsoNormal">  'typename' occurs outside of a template<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">test/SemaTemplate/typename-specifier.cpp<o:p></o:p></p>
<p class="MsoNormal">  Only verify all occurrences the following diagnostics on C++03 and earlier.<o:p></o:p></p>
<p class="MsoNormal">  'typename' occurs outside of a template<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Cheers,<o:p></o:p></p>
<p class="MsoNormal">Charles<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>