<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Aug 18, 2015 at 12:20 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">Hi Justin and Richard,<br>
<span class=""><br>
>> +// RUN: %clang_cc1 -E -C -P -triple x86_64-apple-darwin10 %s > %t1.c<br>
>> +// RUN: %clang_cc1 -fsyntax-only -verify -triple<br>
</span>>> +x86_64-apple-darwin10 %t1.c<br>
<span class=""><br>
> I think you forgot to switch this one to stop preprocessing first.<br>
<br>
</span>Thank you for catching this. I have removed it for this patch.<br>
<span class=""><br>
<br>
> +#if (!defined(__cplusplus)) || (__cplusplus <= 199711L) // C or C++03 or earlier modes<br>
</span><span class="">> You can simplify that to:<br>
> #if __cplusplus <= 199711L<br>
</span>> Otherwise, this LGTM.<br>
<br>
Thank you, I have made the simplifications<br>
<span class=""><br>
<br>
> __cplusplus will expand to 0 inside a #if in C (as will any un#defined identifier).<br>
<br>
</span>As an aside, I did a "-E -dM" and __cplusplus is not in the macro dump.<br>
Likewise, having __cplusplus stand alone inside a t.c file will not cause preprocessor to replace it with 0.<br>
It appears the macro replacement of __cplusplus is context sensitive.<br></blockquote><div><br></div><div>This happens for any identifier used in the condition of a #if that is not #defined; this is a standard feature of the C preprocessor.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Cheers,<br>
Charles<br>
<span class=""><br>
-----Original Message-----<br>
From: Justin Bogner [mailto:<a href="mailto:justin@justinbogner.com">justin@justinbogner.com</a>] On Behalf Of Justin Bogner<br>
Sent: Monday, August 17, 2015 9:28 PM<br>
To: Li, Charles<br>
</span><div><div class="h5">Cc: Richard Smith; <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
Subject: Re: Second Lit tests C++11 compatibility patch: using preprocessor to filter expected-error<br>
<br>
"Li, Charles" <<a href="mailto:charles_li@playstation.sony.com">charles_li@playstation.sony.com</a>> writes:<br>
> Hi Richard,<br>
><br>
> I have modified the “expected-“ lines as you requested.<br>
><br>
> Cheers,<br>
><br>
> Charles<br>
><br>
> From: <a href="mailto:metafoo@gmail.com">metafoo@gmail.com</a> [mailto:<a href="mailto:metafoo@gmail.com">metafoo@gmail.com</a>] On Behalf Of<br>
> Richard Smith<br>
> Sent: Monday, August 17, 2015 5:41 PM<br>
> To: Li, Charles<br>
> Cc: Justin Bogner; <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
> Subject: Re: Second Lit tests C++11 compatibility patch: using<br>
> preprocessor to filter expected-error<br>
><br>
> On Mon, Aug 17, 2015 at 5:15 PM, Li, Charles via cfe-commits <<br>
> <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br>
><br>
> Hi Richard and Justin,<br>
><br>
>> What's the upside to this approach? AFAICT it makes the test harder<br>
>> to read<br>
> and errors less informative due to pointing at the wrong lines, but<br>
> (at least in switch-1.c) it doesn't actually reduce any code<br>
> duplication or anything like that. What is this gaining us apart from<br>
> not having to create one more file?<br>
><br>
> Thank you Justin.<br>
><br>
> Our original intention was to get the Lit tests to run at any default<br>
> C++ dialect.<br>
><br>
> We first discovered that FileCheck does not respect #ifdef since it<br>
> does not know about pre-defined macros.<br>
><br>
> So we figured if we preprocess the source first, the preprocessor will<br>
> filter the #ifdef sections and the output will feed nicely into FileCheck.<br>
><br>
> The upside is the test can run at the default dialect in addition to<br>
> explicitly specified dialect.<br>
><br>
> The downside is, as you mentioned, the errors diagnostics would point<br>
> to the wrong lines.<br>
><br>
>> The only thing novel about this approach is using the preprocessor to<br>
> achieve it. -verify *does* respect #ifdef, and we have a lot of tests<br>
> that rely on that.<br>
><br>
> Thank you Richard.<br>
><br>
> We erroneously assumed that “// CHECK:” and “// expected-error” work<br>
> the same way.<br>
><br>
> But now we realized that assumption was wrong.<br>
><br>
> In light this discussion, I have removed the preprocessing to<br>
> temporary step for all tests.<br>
><br>
> The attached patch (Lit_24.patch) revised 2 test fixes relative to the<br>
> previous patch (Lit_22.patch)<br>
><br>
>   test/Analysis/temp-obj-dtors-cfg-output.cpp<br>
><br>
>     This test uses FileCheck to check for CFG dump.<br>
><br>
>     Instead of using #ifdef for the dialect specific “// CHECK:”<br>
> lines,<br>
><br>
>     I have created 2 check-prefixes “CXX11” and “CXX98”.<br>
><br>
>     The pre-process step have been removed.<br>
><br>
>   test/Sema/switch-1.c<br>
><br>
>     This test uses –verify to check for integer overflows diagnostics.<br>
><br>
>     The pre-process step have been removed.<br>
><br>
>     The #ifdef is kept since it works with -verify.<br>
><br>
> Instead of duplicating the code, you can do this:<br>
><br>
> case blah:<br>
><br>
> #if __cplusplus >= 201103L<br>
><br>
> // expected-error@-2 {{error 2 lines above}}<br>
><br>
> #else<br>
><br>
> // expected-error@-4 {{error 4 lines above}}<br>
><br>
> #endif<br>
><br>
>     Please let me know how you feel about this patch.<br>
><br>
>     Sincerely,<br>
><br>
>     Charles<br>
><br>
>     From: <a href="mailto:metafoo@gmail.com">metafoo@gmail.com</a> [mailto:<a href="mailto:metafoo@gmail.com">metafoo@gmail.com</a>] On Behalf Of Richard<br>
>     Smith<br>
>     Sent: Monday, August 17, 2015 1:07 PM<br>
>     To: Li, Charles<br>
>     Cc: <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
>     Subject: Re: Second Lit tests C++11 compatibility patch: using<br>
>     preprocessor to filter expected-error<br>
><br>
>     On Mon, Aug 17, 2015 at 9:56 AM, Li, Charles via cfe-commits <<br>
>     <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br>
><br>
>     Hi Clang developers,<br>
><br>
>     We here at Sony are continuing to update the Lit tests for C++ dialects<br>
>     compatibility.<br>
><br>
>     Attached is the second patch. (As a reference, here is the link to the<br>
>     discussion on the previous Lit patch. <a href="http://lists.cs.uiuc.edu/pipermail/" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/pipermail/</a><br>
>     cfe-commits/Week-of-Mon-20150727/134667.html)<br>
><br>
>     In this second patch, there is 1 complicated change and 3 simple changes.<br>
><br>
>     Here is the complicated change first.<br>
><br>
>     test/Sema/switch-1.c<br>
><br>
>       This test verifies the diagnostics for integer overflows.<br>
><br>
>       Due to C++11’s more strict requirements on constant-expressions in<br>
>     5.19p2 [expr.const],<br>
><br>
>       The diagnostics have changed from “overflow in expression” to “not a<br>
>     constant expression”.<br>
><br>
>       Usually we would create a C++11 version of the switch-1.c file.<br>
><br>
>       But here we propose a novel approach to “#ifdef” the expected<br>
>     diagnostics. (We hope to use this approach for all similar cases in the<br>
>     future.)<br>
><br>
>       Normally ‘// expected-error’ does not honor any ‘#ifdef’.<br>
><br>
>       But if we first preprocess the source into a temporary file, only the<br>
>     valid ‘#ifdef’ sections remain.<br>
><br>
>       We then run the preprocessed file at the desired dialect.<br>
><br>
>       The main downside to this approach is If the test fails, the errors are<br>
>     reported on the temporary file, not on the original file, and the line<br>
>     numbers of these two files  do not match<br>
><br>
>     The only thing novel about this approach is using the preprocessor to<br>
>     achieve it. -verify *does* respect #ifdef, and we have a lot of tests that<br>
>     rely on that.<br>
><br>
>         Here are the simple changes.<br>
><br>
>         test/Analysis/temp-obj-dtors-cfg-output.cpp<br>
><br>
>           This test verifies CFG dump for temporary destructors<br>
><br>
>           C++11 no longer has the following implicit cast.<br>
><br>
>             (ImplicitCastExpr, NoOp, const struct D)<br>
><br>
>           We modified the test using the #ifdef approach to have the<br>
>         preprocessor generate the desired CHECK lines.<br>
><br>
>         test/CodeCompletion/ordinary-name.cpp<br>
><br>
>           This test verifies for code completion patterns.<br>
><br>
>           Since C++11 has more keywords than C++98,<br>
><br>
>           We made this test to be C++98 specific, and create a separate C++11<br>
>         version.<br>
><br>
>         test/CodeCompletion/ordinary-name-cxx11.cpp<br>
><br>
>           This is the C++11 specific version of the code completion.<br>
><br>
>           This test added patterns for the following keywords:<br>
><br>
>             char16, char32, noexcept, nullptr, sizeof...,<br>
><br>
>             auto, decltype, char16_t, char32_t<br>
><br>
>         test/Sema/thread-specifier.c<br>
><br>
>           Tests for __thread specifier at various C++ dialects<br>
><br>
>           We made the default RUN line explicit to be at –std=c++98<br>
><br>
>         If there is anything that seems confusing to you, please let me know.<br>
><br>
>         I would be more than happy to expand on the reasons for the these<br>
>         changes.<br>
><br>
>         Thanks,<br>
><br>
>         Charles<br>
><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>
>     _______________________________________________<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>
> diff --git test/Analysis/temp-obj-dtors-cfg-output.cpp<br>
> test/Analysis/temp-obj-dtors-cfg-output.cpp<br>
> index 491c68e..dc10e87 100644<br>
> --- test/Analysis/temp-obj-dtors-cfg-output.cpp<br>
> +++ test/Analysis/temp-obj-dtors-cfg-output.cpp<br>
> @@ -1,6 +1,8 @@<br>
>  // RUN: rm -f %t<br>
> -// RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG<br>
> -analyzer-config cfg-temporary-dtors=true %s > %t 2>&1 -// RUN:<br>
> FileCheck --input-file=%t %s<br>
> +// RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpCFG<br>
</div></div>> +-analyzer-config cfg-temporary-dtors=true -std=c++98 %s > %t 2>&1 //<br>
> +RUN: FileCheck --input-file=%t -check-prefix=CXX98<br>
> +-check-prefix=CHECK %s // RUN: %clang_cc1 -analyze<br>
> +-analyzer-checker=debug.DumpCFG -analyzer-config<br>
> +cfg-temporary-dtors=true -std=c++11 %s > %t 2>&1 // RUN: FileCheck<br>
> +--input-file=%t -check-prefix=CXX11 -check-prefix=CHECK %s<br>
<div><div class="h5">><br>
>  class A {<br>
>  public:<br>
> @@ -671,15 +673,23 @@ int testConsistencyNestedNormalReturn(bool value) {<br>
>  // CHECK:     Succs (1): B0<br>
>  // CHECK:   [B3]<br>
>  // CHECK:     1: D() (CXXConstructExpr, struct D)<br>
> -// CHECK:     2: [B3.1] (ImplicitCastExpr, NoOp, const struct D)<br>
> -// CHECK:     3: [B3.2]<br>
> -// CHECK:     4: [B3.3] (CXXConstructExpr, struct D)<br>
> -// CHECK:     5: D d = D();<br>
> -// CHECK:     6: d<br>
> -// CHECK:     7: [B3.6].operator bool<br>
> -// CHECK:     8: [B3.6]<br>
> -// CHECK:     9: [B3.8] (ImplicitCastExpr, UserDefinedConversion, _Bool)<br>
> -// CHECK:     T: if [B3.9]<br>
> +// CXX98:     2: [B3.1] (ImplicitCastExpr, NoOp, const struct D)<br>
> +// CXX98:     3: [B3.2]<br>
> +// CXX98:     4: [B3.3] (CXXConstructExpr, struct D)<br>
> +// CXX98:     5: D d = D();<br>
> +// CXX98:     6: d<br>
> +// CXX98:     7: [B3.6].operator bool<br>
> +// CXX98:     8: [B3.6]<br>
> +// CXX98:     9: [B3.8] (ImplicitCastExpr, UserDefinedConversion, _Bool)<br>
> +// CXX98:     T: if [B3.9]<br>
> +// CXX11:     2: [B3.1]<br>
> +// CXX11:     3: [B3.2] (CXXConstructExpr, struct D)<br>
> +// CXX11:     4: D d = D();<br>
> +// CXX11:     5: d<br>
> +// CXX11:     6: [B3.5].operator bool<br>
> +// CXX11:     7: [B3.5]<br>
> +// CXX11:     8: [B3.7] (ImplicitCastExpr, UserDefinedConversion, _Bool)<br>
> +// CXX11:     T: if [B3.8]<br>
>  // CHECK:     Preds (1): B4<br>
>  // CHECK:     Succs (2): B2 B1<br>
>  // CHECK:   [B0 (EXIT)]<br>
> diff --git test/CodeCompletion/ordinary-name.cpp<br>
> test/CodeCompletion/ordinary-name.cpp<br>
> index d0b09b5..03dbbca 100644<br>
> --- test/CodeCompletion/ordinary-name.cpp<br>
> +++ test/CodeCompletion/ordinary-name.cpp<br>
> @@ -4,7 +4,7 @@ typedef struct t TYPEDEF;<br>
><br>
>  void foo() {<br>
>    int y = 17;<br>
> -  // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions<br>
> -code-completion-patterns -code-completion-at=%s:6:14 %s -o - |<br>
> FileCheck -check-prefix=CHECK-CC1 %s<br>
> +  // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions<br>
</div></div>> + -code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++98<br>
> + %s -o - | FileCheck -check-prefix=CHECK-CC1 %s<br>
<span class="">>    // CHECK-CC1: COMPLETION: bool<br>
>    // CHECK-CC1-NEXT: COMPLETION: char<br>
>    // CHECK-CC1-NEXT: COMPLETION: class @@ -58,7 +58,7 @@ void foo() {<br>
>    // CHECK-CC1-NEXT: COMPLETION: y : [#int#]y<br>
>    // CHECK-CC1-NEXT: COMPLETION: z : [#void#]z(<#int#>)<br>
><br>
> -  // RUN: %clang_cc1 -fsyntax-only  -code-completion-patterns<br>
> -code-completion-at=%s:4:1 %s -o - | FileCheck -check-prefix=CHECK-CC2<br>
> %s<br>
> +  // RUN: %clang_cc1 -fsyntax-only  -code-completion-patterns<br>
</span>> + -code-completion-at=%s:4:1 -std=gnu++98 %s -o - | FileCheck<br>
> + -check-prefix=CHECK-CC2 %s<br>
<span class="">>    // CHECK-CC2: COMPLETION: Pattern : asm(<#string-literal#>)<br>
>    // CHECK-CC2-NEXT: COMPLETION: bool<br>
>    // CHECK-CC2-NEXT: COMPLETION: char @@ -95,7 +95,7 @@ void foo() {<br>
>    // CHECK-CC2-NEXT: COMPLETION: wchar_t<br>
>    // CHECK-CC2-NEXT: COMPLETION: X : X<br>
><br>
> -  // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns<br>
> -code-completion-at=%s:1:19 %s -o - | FileCheck<br>
> -check-prefix=CHECK-CC3 %s<br>
> +  // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns<br>
</span>> + -code-completion-at=%s:1:19 -std=gnu++98 %s -o - | FileCheck<br>
> + -check-prefix=CHECK-CC3 %s<br>
<span class="">>    // CHECK-CC3: COMPLETION: bool<br>
>    // CHECK-CC3-NEXT: COMPLETION: char<br>
>    // CHECK-CC3-NEXT: COMPLETION: class @@ -132,7 +132,7 @@ void foo()<br>
> {<br>
>    // CHECK-CC3-NEXT: COMPLETION: wchar_t<br>
>    // CHECK-CC3-NEXT: COMPLETION: X : X<br>
><br>
> -  // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions<br>
> -code-completion-patterns -code-completion-at=%s:6:11 %s -o - |<br>
> FileCheck -check-prefix=CHECK-CC4 %s<br>
> +  // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions<br>
</span>> + -code-completion-patterns -code-completion-at=%s:6:11 -std=gnu++98<br>
> + %s -o - | FileCheck -check-prefix=CHECK-CC4 %s<br>
<span class="">>    // CHECK-CC4: COMPLETION: bool<br>
>    // CHECK-CC4-NEXT: COMPLETION: char<br>
>    // CHECK-CC4-NEXT: COMPLETION: class @@ -174,7 +174,7 @@ void foo()<br>
> {<br>
>    // CHECK-CC4-NEXT: COMPLETION: y : [#int#]y<br>
>    // CHECK-CC4-NEXT: COMPLETION: z : [#void#]z(<#int#>)<br>
><br>
> -  // RUN: %clang_cc1 -fsyntax-only -fno-rtti<br>
> -code-completion-patterns -code-completion-at=%s:6:14 %s -o - |<br>
> FileCheck -check-prefix=CHECK-NO-RTTI %s<br>
> +  // RUN: %clang_cc1 -fsyntax-only -fno-rtti<br>
</span>> + -code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++98<br>
> + %s -o - | FileCheck -check-prefix=CHECK-NO-RTTI %s<br>
<span class="">>    // CHECK-NO-RTTI: COMPLETION: bool<br>
>    // CHECK-NO-RTTI-NEXT: COMPLETION: char<br>
>    // CHECK-NO-RTTI-NEXT: COMPLETION: class diff --git<br>
> test/Sema/switch-1.c test/Sema/switch-1.c index 5191c92..ae1bd9c<br>
> 100644<br>
> --- test/Sema/switch-1.c<br>
> +++ test/Sema/switch-1.c<br>
> @@ -1,18 +1,51 @@<br>
> -// RUN: %clang_cc1 -fsyntax-only -verify -triple<br>
> x86_64-apple-darwin10 %s<br>
> +// RUN: %clang_cc1 -E -C -P -triple x86_64-apple-darwin10 %s > %t1.c<br>
> +// RUN: %clang_cc1 -fsyntax-only -verify -triple<br>
</span>> +x86_64-apple-darwin10 %t1.c<br>
<span class=""><br>
I think you forgot to switch this one to stop preprocessing first.<br>
<br>
>  // RUN: %clang_cc1 -x c++ -fsyntax-only -verify -triple<br>
> x86_64-apple-darwin10 %s<br>
> +// RUN: %clang_cc1 -x c++ -fsyntax-only -verify -triple<br>
</span>> +x86_64-apple-darwin10 -std=c++98 %s // RUN: %clang_cc1 -x c++<br>
> +-fsyntax-only -verify -triple x86_64-apple-darwin10 -std=c++11 %s<br>
<span class="">>  // rdar://11577384<br>
>  // rdar://13423975<br>
><br>
>  int f(int i) {<br>
>    switch (i) {<br>
> -    case <a href="tel:2147483647" value="+12147483647">2147483647</a> + 2: // expected-warning {{overflow in expression; result is -<a href="tel:2147483647" value="+12147483647">2147483647</a> with type 'int'}}<br>
> +    case <a href="tel:2147483647" value="+12147483647">2147483647</a> + 2:<br>
> +#if (!defined(__cplusplus)) || (__cplusplus <= 199711L) // C or C++03 or earlier modes<br>
> +    // expected-warning@-2 {{overflow in expression; result is<br>
</span>> +-2147483647 with type 'int'}} #else<br>
<span class="">> +    // expected-error@-4 {{case value is not a constant expression}} \<br>
> +    // expected-note@-4 {{value <a href="tel:2147483649" value="+12147483649">2147483649</a> is outside the range of<br>
</span>> +representable values of type 'int'}} #endif<br>
<span class="">>        return 1;<br>
> -    case 9223372036854775807L * 4: // expected-warning {{overflow in expression; result is -4 with type 'long'}}<br>
> +    case 9223372036854775807L * 4:<br>
> +#if (!defined(__cplusplus)) || (__cplusplus <= 199711L)<br>
> +    // expected-warning@-2 {{overflow in expression; result is -4<br>
</span>> +with type 'long'}} #else<br>
<span class="">> +    // expected-error@-4 {{case value is not a constant expression}} \<br>
> +    // expected-note@-4 {{value 36893488147419103228 is outside the<br>
</span>> +range of representable values of type 'long'}} #endif<br>
<span class="">>        return 2;<br>
> -    case (123456 *789012) + 1:  // expected-warning {{overflow in expression; result is -1375982336 with type 'int'}}<br>
> +    case (123456 *789012) + 1:<br>
> +#if (!defined(__cplusplus)) || (__cplusplus <= 199711L)<br>
> +    // expected-warning@-2 {{overflow in expression; result is<br>
</span>> +-1375982336 with type 'int'}} #else<br>
<span class="">> +    // expected-error@-4 {{case value is not a constant expression}} \<br>
> +    // expected-note@-4 {{value 97408265472 is outside the range of<br>
</span>> +representable values of type 'int'}} #endif<br>
<span class="">>        return 3;<br>
> -    case <a href="tel:%282147483647" value="+12147483647">(2147483647</a>*4)/4:      // expected-warning {{overflow in expression; result is -4 with type 'int'}}<br>
> -    case <a href="tel:%282147483647" value="+12147483647">(2147483647</a>*4)%4:      // expected-warning {{overflow in expression; result is -4 with type 'int'}}<br>
> +    case <a href="tel:%282147483647" value="+12147483647">(2147483647</a>*4)/4:<br>
> +#if (!defined(__cplusplus)) || (__cplusplus <= 199711L)<br>
> +    // expected-warning@-2 {{overflow in expression; result is -4<br>
</span>> +with type 'int'}} #else<br>
<span class="">> +    // expected-error@-4 {{case value is not a constant expression}} \<br>
> +    // expected-note@-4 {{value <a href="tel:8589934588" value="+18589934588">8589934588</a> is outside the range of<br>
</span>> +representable values of type 'int'}} #endif<br>
<span class="">> +    case <a href="tel:%282147483647" value="+12147483647">(2147483647</a>*4)%4:<br>
> +#if (!defined(__cplusplus)) || (__cplusplus <= 199711L)<br>
> +    // expected-warning@-2 {{overflow in expression; result is -4<br>
</span>> +with type 'int'}} #else<br>
<span class="">> +    // expected-error@-4 {{case value is not a constant expression}} \<br>
> +    // expected-note@-4 {{value <a href="tel:8589934588" value="+18589934588">8589934588</a> is outside the range of<br>
</span>> +representable values of type 'int'}} #endif<br>
<span class="">>        return 4;<br>
>      case <a href="tel:2147483647" value="+12147483647">2147483647</a>:<br>
>        return 0;<br>
> diff --git test/Sema/thread-specifier.c test/Sema/thread-specifier.c<br>
> index 3968ae1..a93850d 100644<br>
> --- test/Sema/thread-specifier.c<br>
> +++ test/Sema/thread-specifier.c<br>
> @@ -1,7 +1,7 @@<br>
>  // RUN: %clang_cc1 -triple i686-pc-linux-gnu -fsyntax-only<br>
> -Wno-private-extern -verify -pedantic %s -DGNU -// RUN: %clang_cc1<br>
> -triple i686-pc-linux-gnu -fsyntax-only -Wno-private-extern -verify<br>
> -pedantic -x c++ %s -DGNU<br>
> +// RUN: %clang_cc1 -triple i686-pc-linux-gnu -fsyntax-only<br>
</span>> +-Wno-private-extern -verify -pedantic -x c++ %s -DGNU -std=c++98<br>
<span class="">>  // RUN: %clang_cc1 -triple i686-pc-linux-gnu -fsyntax-only<br>
> -Wno-private-extern -verify -pedantic %s -DC11<br>
> -D__thread=_Thread_local -// RUN: %clang_cc1 -triple i686-pc-linux-gnu<br>
> -fsyntax-only -Wno-private-extern -verify -pedantic -x c++ %s -DC11<br>
> -D__thread=_Thread_local<br>
> +// RUN: %clang_cc1 -triple i686-pc-linux-gnu -fsyntax-only<br>
</span>> +-Wno-private-extern -verify -pedantic -x c++ %s -DC11<br>
> +-D__thread=_Thread_local -std=c++98<br>
<span class="">>  // RUN: %clang_cc1 -triple i686-pc-linux-gnu -fsyntax-only<br>
> -Wno-private-extern -verify -pedantic -x c++ %s -DCXX11<br>
> -D__thread=thread_local -std=c++11 -Wno-deprecated  // RUN: %clang_cc1<br>
> -triple i686-pc-linux-gnu -fsyntax-only -Wno-private-extern -verify<br>
> -pedantic -x c++ %s -DC11 -D__thread=_Thread_local -std=c++11<br>
> -Wno-deprecated<br>
><br>
> diff --git test/CodeCompletion/ordinary-name-cxx11.cpp<br>
> test/CodeCompletion/ordinary-name-cxx11.cpp<br>
> new file mode 100644<br>
> index 0000000..8e6f383<br>
> --- /dev/null<br>
> +++ test/CodeCompletion/ordinary-name-cxx11.cpp<br>
> @@ -0,0 +1,252 @@<br>
> +struct X { int x; };<br>
> +void z(int);<br>
> +typedef struct t TYPEDEF;<br>
> +<br>
> +void foo() {<br>
> +  int y = 17;<br>
> +  // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions<br>
</span>> +-code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++11 %s<br>
> +-o - | FileCheck -check-prefix=CHECK-CC1 %s<br>
<span class="">> +  // CHECK-CC1: COMPLETION: bool<br>
> +  // CHECK-CC1-NEXT: COMPLETION: char<br>
> +  // CHECK-CC1-NEXT: COMPLETION: char16<br>
> +  // CHECK-CC1-NEXT: COMPLETION: char32<br>
> +  // CHECK-CC1-NEXT: COMPLETION: class<br>
> +  // CHECK-CC1-NEXT: COMPLETION: const<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +const_cast<<#type#>>(<#expression#>)<br>
<span class="">> +  // CHECK-CC1: COMPLETION: Pattern : [#void#]delete <#expression#><br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]delete []<br>
</span>> +<#expression#><br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : do{<#statements#><br>
> +  // CHECK-CC1: COMPLETION: double<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +dynamic_cast<<#type#>>(<#expression#>)<br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: enum<br>
> +  // CHECK-CC1-NEXT: COMPLETION: extern<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]false<br>
> +  // CHECK-CC1-NEXT: COMPLETION: float<br>
> +  // CHECK-CC1-NEXT: COMPLETION: foo : [#void#]foo()<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +for(<#init-statement#>;<#condition#>;<#inc-expression#>){<br>
<span class="">> +  // CHECK-CC1: COMPLETION: Pattern : goto <#label#><br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +if(<#condition#>){<#statements#><br>
<span class="">> +  // CHECK-CC1: COMPLETION: int<br>
> +  // CHECK-CC1-NEXT: COMPLETION: long<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : new<br>
</span>> +<#type#>(<#expressions#>)<br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : new<br>
</span>> +<#type#>[<#size#>](<#expressions#>)<br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +[#bool#]noexcept(<#expression#>)<br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr<br>
> +  // CHECK-CC1-NEXT: COMPLETION: operator<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +reinterpret_cast<<#type#>>(<#expression#>)<br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : return<br>
> +  // CHECK-CC1-NEXT: COMPLETION: short<br>
> +  // CHECK-CC1-NEXT: COMPLETION: signed<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +[#size_t#]sizeof(<#expression-or-type#>)<br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +[#size_t#]sizeof...(<#parameter-pack#>)<br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: static<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +static_cast<<#type#>>(<#expression#>)<br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: struct<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : switch(<#condition#>){<br>
> +  // CHECK-CC1: COMPLETION: t : t<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]throw<br>
</span>> +<#expression#><br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]true<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : try{<#statements#><br>
> +  // CHECK-CC1: COMPLETION: TYPEDEF : TYPEDEF<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#><br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +[#std::type_info#]typeid(<#expression-or-type#>)<br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : typename<br>
</span>> +<#qualifier#>::<#name#><br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof <#expression#><br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#type#>)<br>
> +  // CHECK-CC1-NEXT: COMPLETION: union<br>
> +  // CHECK-CC1-NEXT: COMPLETION: unsigned<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace<br>
</span>> +<#identifier#><br>
<span class="">> +  // CHECK-CC1-NEXT: COMPLETION: void<br>
> +  // CHECK-CC1-NEXT: COMPLETION: volatile<br>
> +  // CHECK-CC1-NEXT: COMPLETION: wchar_t<br>
> +  // CHECK-CC1-NEXT: COMPLETION: Pattern :<br>
</span>> +while(<#condition#>){<#statements#><br>
<span class="">> +  // CHECK-CC1: COMPLETION: X : X<br>
> +  // CHECK-CC1-NEXT: COMPLETION: y : [#int#]y<br>
> +  // CHECK-CC1-NEXT: COMPLETION: z : [#void#]z(<#int#>)<br>
> +<br>
> +  // RUN: %clang_cc1 -fsyntax-only  -code-completion-patterns<br>
</span>> + -code-completion-at=%s:4:1 -std=gnu++11 %s -o - | FileCheck<br>
> + -check-prefix=CHECK-CC2 %s  // CHECK-CC2: COMPLETION: Pattern :<br>
> + asm(<#string-literal#>)  // CHECK-CC2: COMPLETION: auto  //<br>
> + CHECK-CC2-NEXT: COMPLETION: bool  // CHECK-CC2-NEXT: COMPLETION:<br>
> + char  // CHECK-CC2-NEXT: COMPLETION: char16  // CHECK-CC2-NEXT:<br>
> + COMPLETION: char32  // CHECK-CC2-NEXT: COMPLETION: class  //<br>
> + CHECK-CC2-NEXT: COMPLETION: const  // CHECK-CC2-NEXT: COMPLETION:<br>
> + Pattern : decltype(<#expression#>)  // CHECK-CC2-NEXT: COMPLETION:<br>
> + double  // CHECK-CC2-NEXT: COMPLETION: enum  // CHECK-CC2-NEXT:<br>
> + COMPLETION: extern  // CHECK-CC2-NEXT: COMPLETION: float  //<br>
> + CHECK-CC2-NEXT: COMPLETION: inline  // CHECK-CC2-NEXT: COMPLETION:<br>
> + int  // CHECK-CC2-NEXT: COMPLETION: long  // CHECK-CC2-NEXT:<br>
> + COMPLETION: Pattern : namespace <#identifier#>{<#declarations#>  //<br>
> + CHECK-CC2: COMPLETION: Pattern : namespace <#name#> = <#namespace#><br>
> + // CHECK-CC2-NEXT: COMPLETION: operator  // CHECK-CC2-NEXT:<br>
> + COMPLETION: short  // CHECK-CC2-NEXT: COMPLETION: signed  //<br>
> + CHECK-CC2-NEXT: COMPLETION: static  // CHECK-CC2-NEXT: COMPLETION:<br>
> + struct  // CHECK-CC2-NEXT: COMPLETION: t : t  // CHECK-CC2-NEXT:<br>
> + COMPLETION: Pattern : template <#declaration#>  // CHECK-CC2-NEXT:<br>
> + COMPLETION: Pattern : template<<#parameters#>>  // CHECK-CC2-NEXT:<br>
> + COMPLETION: TYPEDEF : TYPEDEF  // CHECK-CC2-NEXT: COMPLETION:<br>
> + Pattern : typedef <#type#> <#name#>  // CHECK-CC2-NEXT: COMPLETION:<br>
> + Pattern : typename <#qualifier#>::<#name#>  // CHECK-CC2-NEXT:<br>
> + COMPLETION: Pattern : typeof <#expression#>  // CHECK-CC2-NEXT:<br>
> + COMPLETION: Pattern : typeof(<#type#>)  // CHECK-CC2-NEXT:<br>
> + COMPLETION: union  // CHECK-CC2-NEXT: COMPLETION: unsigned  //<br>
> + CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#><br>
<span class="">> + // CHECK-CC2-NEXT: COMPLETION: Pattern : using<br>
</span>> + <#qualifier#>::<#name#>  // CHECK-CC2-NEXT: COMPLETION: void  //<br>
> + CHECK-CC2-NEXT: COMPLETION: volatile  // CHECK-CC2-NEXT: COMPLETION:<br>
> + wchar_t  // CHECK-CC2-NEXT: COMPLETION: X : X<br>
<span class="">> +<br>
> +  // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns<br>
</span>> + -code-completion-at=%s:1:19 -std=gnu++11 %s -o - | FileCheck<br>
> + -check-prefix=CHECK-CC3 %s  // CHECK-CC3: COMPLETION: bool  //<br>
> + CHECK-CC3-NEXT: COMPLETION: char  // CHECK-CC3-NEXT: COMPLETION:<br>
> + char16_t  // CHECK-CC3-NEXT: COMPLETION: char32_t  //<br>
> + CHECK-CC3-NEXT: COMPLETION: class  // CHECK-CC3-NEXT: COMPLETION:<br>
> + const  // CHECK-CC3-NEXT: COMPLETION: Pattern :<br>
> + decltype(<#expression#>)  // CHECK-CC3-NEXT: COMPLETION: double  //<br>
> + CHECK-CC3-NEXT: COMPLETION: enum  // CHECK-CC3-NEXT: COMPLETION:<br>
> + explicit  // CHECK-CC3-NEXT: COMPLETION: extern  // CHECK-CC3-NEXT:<br>
> + COMPLETION: float  // CHECK-CC3-NEXT: COMPLETION: friend  //<br>
> + CHECK-CC3-NEXT: COMPLETION: inline  // CHECK-CC3-NEXT: COMPLETION:<br>
> + int  // CHECK-CC3-NEXT: COMPLETION: long  // CHECK-CC3-NEXT:<br>
> + COMPLETION: mutable  // CHECK-CC3-NEXT: COMPLETION: operator  //<br>
> + CHECK-CC3-NEXT: COMPLETION: Pattern : private:<br>
<span class="">> +  // CHECK-CC3-NEXT: COMPLETION: Pattern : protected:<br>
> +  // CHECK-CC3-NEXT: COMPLETION: Pattern : public:<br>
</span>> +  // CHECK-CC3-NEXT: COMPLETION: short  // CHECK-CC3-NEXT:<br>
> + COMPLETION: signed  // CHECK-CC3-NEXT: COMPLETION: static  //<br>
> + CHECK-CC3-NEXT: COMPLETION: struct  // CHECK-CC3-NEXT: COMPLETION:<br>
> + Pattern : template<<#parameters#>>  // CHECK-CC3-NEXT: COMPLETION:<br>
> + Pattern : typedef <#type#> <#name#>  // CHECK-CC3-NEXT: COMPLETION:<br>
> + Pattern : typename <#qualifier#>::<#name#>  // CHECK-CC3-NEXT:<br>
> + COMPLETION: Pattern : typeof <#expression#>  // CHECK-CC3-NEXT:<br>
> + COMPLETION: Pattern : typeof(<#type#>)  // CHECK-CC3-NEXT:<br>
> + COMPLETION: union  // CHECK-CC3-NEXT: COMPLETION: unsigned  //<br>
> + CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#><br>
> + // CHECK-CC3-NEXT: COMPLETION: virtual  // CHECK-CC3-NEXT:<br>
> + COMPLETION: void  // CHECK-CC3-NEXT: COMPLETION: volatile  //<br>
> + CHECK-CC3-NEXT: COMPLETION: wchar_t  // CHECK-CC3-NEXT: COMPLETION:<br>
> + X : X<br>
<span class="">> +<br>
> +  // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions<br>
</span>> + -code-completion-patterns -code-completion-at=%s:6:11 -std=gnu++11<br>
> + %s -o - | FileCheck -check-prefix=CHECK-CC4 %s  // CHECK-CC4:<br>
> + COMPLETION: bool  // CHECK-CC4-NEXT: COMPLETION: char  //<br>
> + CHECK-CC4-NEXT: COMPLETION: char16_t  // CHECK-CC4-NEXT: COMPLETION:<br>
> + char32_t  // CHECK-CC4-NEXT: COMPLETION: class  // CHECK-CC4-NEXT:<br>
> + COMPLETION: const  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
> + const_cast<<#type#>>(<#expression#>)<br>
<span class="">> +  // CHECK-CC4-NEXT: COMPLETION: Pattern : decltype(<#expression#>)<br>
> + // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete<br>
</span>> + <#expression#>  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
> + [#void#]delete [] <#expression#>  // CHECK-CC4-NEXT: COMPLETION:<br>
> + double  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
> + dynamic_cast<<#type#>>(<#expression#>)<br>
> +  // CHECK-CC4-NEXT: COMPLETION: enum  // CHECK-CC4-NEXT: COMPLETION:<br>
> + Pattern : [#bool#]false  // CHECK-CC4-NEXT: COMPLETION: float  //<br>
> + CHECK-CC4-NEXT: COMPLETION: foo : [#void#]foo()  // CHECK-CC4-NEXT:<br>
> + COMPLETION: int  // CHECK-CC4-NEXT: COMPLETION: long  //<br>
> + CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)<br>
<span class="">> + // CHECK-CC4-NEXT: COMPLETION: Pattern : new<br>
</span>> + <#type#>[<#size#>](<#expressions#>)<br>
<span class="">> +  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
</span>> + [#bool#]noexcept(<#expression#>)  // CHECK-CC4-NEXT: COMPLETION:<br>
> + Pattern : [#std::nullptr_t#]nullptr  // CHECK-CC4-NEXT: COMPLETION:<br>
> + operator  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
> + reinterpret_cast<<#type#>>(<#expression#>)<br>
> +  // CHECK-CC4-NEXT: COMPLETION: short  // CHECK-CC4-NEXT:<br>
> + COMPLETION: signed  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
> + [#size_t#]sizeof(<#expression-or-type#>)<br>
<span class="">> +  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
</span>> + [#size_t#]sizeof...(<#parameter-pack#>)<br>
<span class="">> +  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
</span>> + static_cast<<#type#>>(<#expression#>)<br>
> +  // CHECK-CC4-NEXT: COMPLETION: struct  // CHECK-CC4-NEXT:<br>
> + COMPLETION: t : t  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
> + [#void#]throw <#expression#>  // CHECK-CC4-NEXT: COMPLETION: Pattern<br>
> + : [#bool#]true  // CHECK-CC4-NEXT: COMPLETION: TYPEDEF : TYPEDEF  //<br>
> + CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
> + [#std::type_info#]typeid(<#expression-or-type#>)<br>
<span class="">> +  // CHECK-CC4-NEXT: COMPLETION: Pattern : typename<br>
</span>> + <#qualifier#>::<#name#>  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
> + typeof <#expression#>  // CHECK-CC4-NEXT: COMPLETION: Pattern :<br>
> + typeof(<#type#>)  // CHECK-CC4-NEXT: COMPLETION: union  //<br>
> + CHECK-CC4-NEXT: COMPLETION: unsigned  // CHECK-CC4-NEXT: COMPLETION:<br>
> + void  // CHECK-CC4-NEXT: COMPLETION: volatile  // CHECK-CC4-NEXT:<br>
> + COMPLETION: wchar_t  // CHECK-CC4-NEXT: COMPLETION: X : X  //<br>
> + CHECK-CC4-NEXT: COMPLETION: y : [#int#]y  // CHECK-CC4-NEXT:<br>
> + COMPLETION: z : [#void#]z(<#int#>)<br>
<span class="">> +<br>
> +  // RUN: %clang_cc1 -fsyntax-only -fno-rtti<br>
</span>> + -code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++11<br>
> + %s -o - | FileCheck -check-prefix=CHECK-NO-RTTI %s  //<br>
> + CHECK-NO-RTTI: COMPLETION: bool  // CHECK-NO-RTTI-NEXT: COMPLETION:<br>
> + char  // CHECK-NO-RTTI-NEXT: COMPLETION: char16_t  //<br>
> + CHECK-NO-RTTI-NEXT: COMPLETION: char32_t  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: class  // CHECK-NO-RTTI-NEXT: COMPLETION: const  //<br>
> + CHECK-NO-RTTI-NEXT: COMPLETION: Pattern :<br>
> + const_cast<<#type#>>(<#expression#>)<br>
<span class="">> +  // CHECK-NO-RTTI: COMPLETION: Pattern : [#void#]delete<br>
</span>> + <#expression#>  // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern :<br>
> + [#void#]delete [] <#expression#>  // CHECK-NO-RTTI-NEXT: COMPLETION:<br>
> + Pattern : do{<#statements#>  // CHECK-NO-RTTI: COMPLETION: double<br>
> + // CHECK-NO-RTTI-NOT: dynamic_cast  // CHECK-NO-RTTI: COMPLETION:<br>
> + enum  // CHECK-NO-RTTI-NEXT: COMPLETION: extern  //<br>
> + CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]false  //<br>
> + CHECK-NO-RTTI-NEXT: COMPLETION: float  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: foo : [#void#]foo()  // CHECK-NO-RTTI-NEXT: COMPLETION:<br>
> + Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){<br>
> +  // CHECK-NO-RTTI: COMPLETION: Pattern : goto <#label#>  //<br>
> + CHECK-NO-RTTI-NEXT: COMPLETION: Pattern :<br>
> + if(<#condition#>){<#statements#>  // CHECK-NO-RTTI: COMPLETION: int<br>
> + // CHECK-NO-RTTI-NEXT: COMPLETION: long  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: Pattern : new <#type#>(<#expressions#>)  //<br>
> + CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new<br>
> + <#type#>[<#size#>](<#expressions#>)<br>
<span class="">> +  // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern :<br>
</span>> + [#bool#]noexcept(<#expression#>)  // CHECK-NO-RTTI-NEXT: COMPLETION:<br>
> + Pattern : [#std::nullptr_t#]nullptr  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: operator  // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern :<br>
> + reinterpret_cast<<#type#>>(<#expression#>)<br>
> +  // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : return  //<br>
> + CHECK-NO-RTTI-NEXT: COMPLETION: short  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: signed  // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern :<br>
> + [#size_t#]sizeof(<#expression-or-type#>)<br>
<span class="">> +  // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern :<br>
</span>> + [#size_t#]sizeof...(<#parameter-pack#>)<br>
> +  // CHECK-NO-RTTI-NEXT: COMPLETION: static  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)<br>
> +  // CHECK-NO-RTTI-NEXT: COMPLETION: struct  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: Pattern : switch(<#condition#>){  // CHECK-NO-RTTI:<br>
> + COMPLETION: t : t  // CHECK-NO-RTTI-NOT: throw  // CHECK-NO-RTTI:<br>
> + COMPLETION: Pattern : [#bool#]true  // CHECK-NO-RTTI-NOT: try  //<br>
> + CHECK-NO-RTTI: COMPLETION: TYPEDEF : TYPEDEF  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: Pattern : typedef <#type#> <#name#>  //<br>
> + CHECK-NO-RTTI-NOT: typeid  // CHECK-NO-RTTI: COMPLETION: Pattern :<br>
> + typename <#qualifier#>::<#name#>  // CHECK-NO-RTTI-NEXT: COMPLETION:<br>
> + Pattern : typeof <#expression#>  // CHECK-NO-RTTI-NEXT: COMPLETION:<br>
> + Pattern : typeof(<#type#>)  // CHECK-NO-RTTI-NEXT: COMPLETION: union<br>
> + // CHECK-NO-RTTI-NEXT: COMPLETION: unsigned  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: Pattern : using namespace <#identifier#>  //<br>
> + CHECK-NO-RTTI-NEXT: COMPLETION: void  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: volatile  // CHECK-NO-RTTI-NEXT: COMPLETION: wchar_t  //<br>
> + CHECK-NO-RTTI-NEXT: COMPLETION: Pattern :<br>
> + while(<#condition#>){<#statements#><br>
> +  // CHECK-NO-RTTI: COMPLETION: X : X  // CHECK-NO-RTTI-NEXT:<br>
> + COMPLETION: y : [#int#]y  // CHECK-NO-RTTI-NEXT: COMPLETION: z :<br>
> + [#void#]z(<#int#>)<br>
<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>