<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: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;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 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;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:Consolas;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:Consolas;}
.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="MsoPlainText">Hi Everyone,<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">I am continuing with updating Lit tests to be C++11 compatible.<o:p></o:p></p>
<p class="MsoPlainText">Here is the fifth patch. This patch contains 20 tests.<o:p></o:p></p>
<p class="MsoPlainText">These are mostly diagnostics changes due to new C++11 features and changes in the standard.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Here are the explanations for each test in the order that they appear in the patch.
<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">CXX/class/class.nest/p1.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Sizeof has been extended to apply to non-static data members without an object [n2253].<o:p></o:p></p>
<p class="MsoPlainText">  Restrict the following to C++98/03.<o:p></o:p></p>
<p class="MsoPlainText">    error: invalid use of non-static data member 'x'<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Parser/cxx-casting.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Restrict Digraph errors to C++98/03.<o:p></o:p></p>
<p class="MsoPlainText">    C++98 error: found '<::' after a template name which forms the digraph '<:' (aka '[') and a ':', did you mean '< ::'?<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Parser/cxx-reference.cpp<o:p></o:p></p>
<p class="MsoPlainText">  rvalue references is now support<o:p></o:p></p>
<p class="MsoPlainText">  Restrict the following to C++98/03.<o:p></o:p></p>
<p class="MsoPlainText">    C++98 Warning rvalue references are a C++11 extension<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Parser/cxx-template-argument.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Consecutive right angle brackets is no longer a syntax error in C++11<o:p></o:p></p>
<p class="MsoPlainText">  Restrict the following to C++98/03<o:p></o:p></p>
<p class="MsoPlainText">    C++98: error: a space is required between consecutive right angle brackets (use '> >')<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Parser/cxx-typeof.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Using __typeof to derive the type of a non-static data member was an Error in C++98/03. It is now accepted in in C++11.<o:p></o:p></p>
<p class="MsoPlainText">  Note 1: I could not find GCC documentation on this change,
<o:p></o:p></p>
<p class="MsoPlainText">          but given C++11 has decltype now works on non-static data members, this appears logical.<o:p></o:p></p>
<p class="MsoPlainText">  Note 2: This test uses GNU extension "typeof". <o:p></o:p></p>
<p class="MsoPlainText">          Therefore the Runs line are expanded with -std=gnu++98 and "-std=gnu++11"
<o:p></o:p></p>
<p class="MsoPlainText">          instead of the usual "-std=c++98" and "-std=c++11"<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Parser/objc-init.m<o:p></o:p></p>
<p class="MsoPlainText">  Added C++11 error and note diagnostics on narrowing conversion.<o:p></o:p></p>
<p class="MsoPlainText">  Error: non-constant-expression cannot be narrowed from type 'unsigned int' to 'int' in initializer list<o:p></o:p></p>
<p class="MsoPlainText">  Note: insert an explicit cast to silence this issue<o:p></o:p></p>
<p class="MsoPlainText">  *Please Note: Since this is an Objective-C test, the Run line has not been changed.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Parser/objcxx-lambda-expressions-neg.mm<o:p></o:p></p>
<p class="MsoPlainText">  []{}; is now an valid Lambda expression.<o:p></o:p></p>
<p class="MsoPlainText">  Restrict "warning: expected expression" to C++98/03.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaCXX/decl-expr-ambiguity.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Change in ambiguity diagnostics due to introduction of initializer list.<o:p></o:p></p>
<p class="MsoPlainText">  C++11 has 1 extra Note following the pre-existing warning<o:p></o:p></p>
<p class="MsoPlainText">    warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]<o:p></o:p></p>
<p class="MsoPlainText">    note: replace parentheses with an initializer to declare a variable<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">  *Note: The Run lines are left as-is because this test verifies for default diagnostic for "typeof"<o:p></o:p></p>
<p class="MsoPlainText">         Diagnostics will change if I explicitly specify any dialect.<o:p></o:p></p>
<p class="MsoPlainText">           Default (no -std=<dialect> flag): error: extension used [-Werror,-Wlanguage-extension-token]<o:p></o:p></p>
<p class="MsoPlainText">           C++ (-std=c++<number> flag): error: expected '(' for function-style cast or type construction<o:p></o:p></p>
<p class="MsoPlainText">           GNU++ (-std=gnu++<number> flag): No diagnostic.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaCXX/overload-call.cpp<o:p></o:p></p>
<p class="MsoPlainText">  This change has 3 separate issues. First two are overload resolutions. Last one is C++98/03 specific diagnostic.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">1. When the actual arg is a string literal and 2 candidate functions exist. One with formal argument “char *”, the other with “bool”<o:p></o:p></p>
<p class="MsoPlainText">   In C++98/03, Clang picks "char *" and issues a deprecated writable wring diagnostics.<o:p></o:p></p>
<p class="MsoPlainText">   In C++11   , Clang uses picks the "bool" candidate and issues a return type miss match diagnostics.<o:p></o:p></p>
<p class="MsoPlainText">      Default converstion from "const char *" to "bool" came from C++11 standard 4.12\1 [conv.bool]<o:p></o:p></p>
<p class="MsoPlainText">      Reference: <a href="http://stackoverflow.com/questions/26413951/overloaded-bool-string-ambiguity">
http://stackoverflow.com/questions/26413951/overloaded-bool-string-ambiguity</a><o:p></o:p></p>
<p class="MsoPlainText">   The difference in diagnostics are as follows:<o:p></o:p></p>
<p class="MsoPlainText">     C++98 (argument type mismatch): conversion from string literal to 'char *' is deprecated<o:p></o:p></p>
<p class="MsoPlainText">     C++11 (return type mismatch):   cannot initialize a variable of type 'int *' with an rvalue of type 'double *'<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">2. Similar to point 1. This time the 2 overloaded functions have formal args "char *" and "void *".<o:p></o:p></p>
<p class="MsoPlainText">   In this case Clang picks "char *" but issues a slightly different error:<o:p></o:p></p>
<p class="MsoPlainText">     C++98 warning: conversion from string literal to 'char *' is deprecated
<o:p></o:p></p>
<p class="MsoPlainText">     C++11 warning: ISO C++11 does not allow conversion from string literal to 'char *'<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">3. Restrict the following diagnostics to C++98/03<o:p></o:p></p>
<p class="MsoPlainText">    Warning: rvalue references are a C++11 extension<o:p></o:p></p>
<p class="MsoPlainText">    Warning: deleted function definitions are a C++11 extension<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaCXX/pragma-init_seg.cpp<o:p></o:p></p>
<p class="MsoPlainText">  In C++11 Clang issues an additional note follow pre-existing error.<o:p></o:p></p>
<p class="MsoPlainText">  Add the following Note to C++11.<o:p></o:p></p>
<p class="MsoPlainText">    Error: initializer for thread-local variable must be a constant expression<o:p></o:p></p>
<p class="MsoPlainText">    Note: use 'thread_local' to allow this<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaCXX/typo-correction-delayed.cpp<o:p></o:p></p>
<p class="MsoPlainText">  C++11 allows initializer list to be pass as actual arguments.<o:p></o:p></p>
<p class="MsoPlainText">  Restrict the following to C++98<o:p></o:p></p>
<p class="MsoPlainText">    error: expected expression<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaCXX/unknown-type-name.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Restrict the following to C++98<o:p></o:p></p>
<p class="MsoPlainText">    Warning: deleted function definitions are a C++11 extension<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaCXX/writable-strings-deprecated.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Writable strings generates different diagnostics between C++98/03 and C++11.
<o:p></o:p></p>
<p class="MsoPlainText">  By default, at both dialects issues warning. <o:p></o:p></p>
<p class="MsoPlainText">    C++98: warning: conversion from string literal to 'char *' is deprecated [-Werror,-Wc++11-compat-deprecated-writable-strings]<o:p></o:p></p>
<p class="MsoPlainText">    C++11: warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wwritable-strings]<o:p></o:p></p>
<p class="MsoPlainText">  This test verifies for -W flag's modifications to the severity level of the above diagnostics.<o:p></o:p></p>
<p class="MsoPlainText">  I have refectories the preprocessor code The expected Warning or Error now corresponds to the C++ dialect level.<o:p></o:p></p>
<p class="MsoPlainText">  I have made the C++ dialect on the RUN lines explicit. <o:p>
</o:p></p>
<p class="MsoPlainText">  In the process I added 2 RUN lines, default with no -W switches and C98 with no -W switches.<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaObjCXX/message.mm<o:p></o:p></p>
<p class="MsoPlainText">  Tyename can now be used outside of tempalte<o:p></o:p></p>
<p class="MsoPlainText">  Restrict the following to C++98<o:p></o:p></p>
<p class="MsoPlainText">    warning: 'typename' occurs outside of a template<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaTemplate/instantiate-function-2.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Restrict the following to C++98<o:p></o:p></p>
<p class="MsoPlainText">    warning: alias declarations are a C++11 extension<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaTemplate/instantiate-static-var.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Diagnostic changes in C++11 with the introduction of "constexpr"<o:p></o:p></p>
<p class="MsoPlainText">    C++98: warning: in-class initializer for static data member of type 'const float' is a GNU extension<o:p></o:p></p>
<p class="MsoPlainText">    C++11: error: in-class initializer for static data member of type 'const float' requires 'constexpr' specifier<o:p></o:p></p>
<p class="MsoPlainText">    C++11: note: add 'constexpr'<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaTemplate/nested-name-spec-template.cpp<o:p></o:p></p>
<p class="MsoPlainText">  The keyword “template” can now be used outside of templates.<o:p></o:p></p>
<p class="MsoPlainText">  Restrict warning to C++98/03.<o:p></o:p></p>
<p class="MsoPlainText">    Warning: 'template' keyword outside of a template<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaTemplate/overload-candidates.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Only checks the following diagnostics for C++98/03<o:p></o:p></p>
<p class="MsoPlainText">    warning: default template arguments for a function template are a C++11 extension<o:p></o:p></p>
<p class="MsoPlainText">    warning: alias declarations are a C++11 extension<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaTemplate/partial-spec-instantiate.cpp<o:p></o:p></p>
<p class="MsoPlainText">  problem/9169404 tests for narrowing -1 to bool<o:p></o:p></p>
<p class="MsoPlainText">  Narrowing conversion is now an error in C++11<o:p></o:p></p>
<p class="MsoPlainText">  Added verification for the following at C++11<o:p></o:p></p>
<p class="MsoPlainText">    Error: non-type template argument evaluates to -1, which cannot be narrowed to type 'bool'<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">SemaTemplate/temp_arg_template.cpp<o:p></o:p></p>
<p class="MsoPlainText">  Restrict digraph and variadic template diagnostics to C++98<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>