<div dir="auto">Thank you and everyone else who has helped to make this happen!</div><div class="gmail_extra"><br><div class="gmail_quote">On 9 Dec 2017 04:10, "Tim Northover via cfe-commits" <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: tnorthover<br>
Date: Sat Dec  9 04:09:54 2017<br>
New Revision: 320250<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=320250&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=320250&view=rev</a><br>
Log:<br>
Switch to gnu++14 as the default dialect.<br>
<br>
This is C++14 with conforming GNU extensions.<br>
<br>
Modified:<br>
    cfe/trunk/docs/ReleaseNotes.<wbr>rst<br>
    cfe/trunk/lib/Frontend/<wbr>CompilerInvocation.cpp<br>
    cfe/trunk/test/CodeGenCXX/new-<wbr>overflow.cpp<br>
    cfe/trunk/test/CodeGenCXX/new.<wbr>cpp<br>
    cfe/trunk/test/CodeGenCXX/<wbr>vtable-available-externally.<wbr>cpp<br>
    cfe/trunk/test/Lexer/cxx-<wbr>features.cpp<br>
    cfe/trunk/test/Lexer/half-<wbr>literal.cpp<br>
    cfe/trunk/test/OpenMP/<wbr>taskloop_reduction_codegen.cpp<br>
    cfe/trunk/test/OpenMP/<wbr>taskloop_simd_reduction_<wbr>codegen.cpp<br>
    cfe/trunk/test/Parser/cxx1z-<wbr>nested-namespace-definition.<wbr>cpp<br>
    cfe/trunk/test/SemaCXX/new-<wbr>array-size-conv.cpp<br>
    cfe/trunk/test/SemaCXX/new-<wbr>delete.cpp<br>
    cfe/trunk/test/SemaCXX/<wbr>unknown-type-name.cpp<br>
    cfe/trunk/test/SemaTemplate/<wbr>class-template-decl.cpp<br>
    cfe/trunk/test/SemaTemplate/<wbr>explicit-instantiation.cpp<br>
<br>
Modified: cfe/trunk/docs/ReleaseNotes.<wbr>rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ReleaseNotes.rst?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/docs/<wbr>ReleaseNotes.rst?rev=320250&<wbr>r1=320249&r2=320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/docs/ReleaseNotes.<wbr>rst (original)<br>
+++ cfe/trunk/docs/ReleaseNotes.<wbr>rst Sat Dec  9 04:09:54 2017<br>
@@ -176,7 +176,10 @@ C11 Feature Support<br>
 C++ Language Changes in Clang<br>
 -----------------------------<br>
<br>
-...<br>
+- Clang's default C++ dialect is now ``gnu++14`` instead of ``gnu++98``. This<br>
+  means Clang will by default accept code using features from C++14 and<br>
+  conforming GNU extensions. Projects incompatible with C++14 can add<br>
+  ``-std=gnu++98`` to their build settings to restore the previous behaviour.<br>
<br>
 C++1z Feature Support<br>
 ^^^^^^^^^^^^^^^^^^^^^<br>
<br>
Modified: cfe/trunk/lib/Frontend/<wbr>CompilerInvocation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/lib/<wbr>Frontend/CompilerInvocation.<wbr>cpp?rev=320250&r1=320249&r2=<wbr>320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/Frontend/<wbr>CompilerInvocation.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/<wbr>CompilerInvocation.cpp Sat Dec  9 04:09:54 2017<br>
@@ -1729,11 +1729,7 @@ void CompilerInvocation::<wbr>setLangDefaults<br>
       break;<br>
     case InputKind::CXX:<br>
     case InputKind::ObjCXX:<br>
-      // The PS4 uses C++11 as the default C++ standard.<br>
-      if (T.isPS4())<br>
-        LangStd = LangStandard::lang_gnucxx11;<br>
-      else<br>
-        LangStd = LangStandard::lang_gnucxx98;<br>
+      LangStd = LangStandard::lang_gnucxx14;<br>
       break;<br>
     case InputKind::RenderScript:<br>
       LangStd = LangStandard::lang_c99;<br>
<br>
Modified: cfe/trunk/test/CodeGenCXX/new-<wbr>overflow.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/new-overflow.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>CodeGenCXX/new-overflow.cpp?<wbr>rev=320250&r1=320249&r2=<wbr>320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/CodeGenCXX/new-<wbr>overflow.cpp (original)<br>
+++ cfe/trunk/test/CodeGenCXX/new-<wbr>overflow.cpp Sat Dec  9 04:09:54 2017<br>
@@ -85,9 +85,7 @@ namespace test4 {<br>
<br>
   // CHECK:    define [[A:%.*]]* @_ZN5test44testEs(i16 signext<br>
   // CHECK:      [[N:%.*]] = sext i16 {{%.*}} to i32<br>
-  // CHECK-NEXT: [[T0:%.*]] = icmp slt i32 [[N]], 0<br>
-  // CHECK-NEXT: [[T1:%.*]] = select i1 [[T0]], i32 -1, i32 [[N]]<br>
-  // CHECK-NEXT: call i8* @_Znaj(i32 [[T1]])<br>
+  // CHECK-NEXT: call i8* @_Znaj(i32 [[N]])<br>
   // CHECK:      getelementptr inbounds {{.*}}, i32 [[N]]<br>
   elt *test(short s) {<br>
     return new elt[s];<br>
@@ -104,9 +102,7 @@ namespace test5 {<br>
<br>
   // CHECK:    define [[A:%.*]]* @_ZN5test54testEi(i32<br>
   // CHECK:      [[N:%.*]] = load i32, i32*<br>
-  // CHECK-NEXT: [[T0:%.*]] = icmp slt i32 [[N]], 0<br>
-  // CHECK-NEXT: [[T1:%.*]] = select i1 [[T0]], i32 -1, i32 [[N]]<br>
-  // CHECK-NEXT: call i8* @_Znaj(i32 [[T1]])<br>
+  // CHECK-NEXT: call i8* @_Znaj(i32 [[N]])<br>
   // CHECK:      getelementptr inbounds {{.*}}, i32 [[N]]<br>
   elt *test(int s) {<br>
     return new elt[s];<br>
@@ -169,13 +165,11 @@ namespace test8 {<br>
<br>
   // CHECK:    define [[A:%.*]]* @_ZN5test84testEx(i64<br>
   // CHECK:      [[N:%.*]] = load i64, i64*<br>
-  // CHECK-NEXT: [[T0:%.*]] = icmp uge i64 [[N]], 4294967296<br>
   // CHECK-NEXT: [[T1:%.*]] = trunc i64 [[N]] to i32<br>
   // CHECK-NEXT: [[T2:%.*]] = call { i32, i1 } @llvm.umul.with.overflow.i32(<wbr>i32 [[T1]], i32 4)<br>
   // CHECK-NEXT: [[T3:%.*]] = extractvalue { i32, i1 } [[T2]], 1<br>
-  // CHECK-NEXT: [[T4:%.*]] = or i1 [[T0]], [[T3]]<br>
   // CHECK-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T2]], 0<br>
-  // CHECK-NEXT: [[T6:%.*]] = select i1 [[T4]], i32 -1, i32 [[T5]]<br>
+  // CHECK-NEXT: [[T6:%.*]] = select i1 [[T3]], i32 -1, i32 [[T5]]<br>
   // CHECK-NEXT: call i8* @_Znaj(i32 [[T6]])<br>
   // CHECK:      getelementptr inbounds {{.*}}, i32 [[T1]]<br>
   elt *test(long long s) {<br>
@@ -194,13 +188,11 @@ namespace test9 {<br>
<br>
   // CHECK:    define [[A:%.*]]* @_ZN5test94testEy(i64<br>
   // CHECK:      [[N:%.*]] = load i64, i64*<br>
-  // CHECK-NEXT: [[T0:%.*]] = icmp uge i64 [[N]], 4294967296<br>
   // CHECK-NEXT: [[T1:%.*]] = trunc i64 [[N]] to i32<br>
   // CHECK-NEXT: [[T2:%.*]] = call { i32, i1 } @llvm.umul.with.overflow.i32(<wbr>i32 [[T1]], i32 4)<br>
   // CHECK-NEXT: [[T3:%.*]] = extractvalue { i32, i1 } [[T2]], 1<br>
-  // CHECK-NEXT: [[T4:%.*]] = or i1 [[T0]], [[T3]]<br>
   // CHECK-NEXT: [[T5:%.*]] = extractvalue { i32, i1 } [[T2]], 0<br>
-  // CHECK-NEXT: [[T6:%.*]] = select i1 [[T4]], i32 -1, i32 [[T5]]<br>
+  // CHECK-NEXT: [[T6:%.*]] = select i1 [[T3]], i32 -1, i32 [[T5]]<br>
   // CHECK-NEXT: call i8* @_Znaj(i32 [[T6]])<br>
   // CHECK:      getelementptr inbounds {{.*}}, i32 [[T1]]<br>
   elt *test(unsigned long long s) {<br>
<br>
Modified: cfe/trunk/test/CodeGenCXX/new.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/new.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>CodeGenCXX/new.cpp?rev=320250&<wbr>r1=320249&r2=320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/CodeGenCXX/new.<wbr>cpp (original)<br>
+++ cfe/trunk/test/CodeGenCXX/new.<wbr>cpp Sat Dec  9 04:09:54 2017<br>
@@ -255,8 +255,6 @@ namespace test15 {<br>
   // CHECK-LABEL:    define void @_ZN6test155test2EPvi(<br>
   // CHECK:      [[N:%.*]] = load i32, i32*<br>
   // CHECK-NEXT: [[T0:%.*]] = sext i32 [[N]] to i64<br>
-  // CHECK-NEXT: [[T1:%.*]] = icmp slt i64 [[T0]], 0<br>
-  // CHECK-NEXT: [[T2:%.*]] = select i1 [[T1]], i64 -1, i64 [[T0]]<br>
   // CHECK-NEXT: [[P:%.*]] = load i8*, i8**<br>
   // CHECK:      [[BEGIN:%.*]] = bitcast i8* [[P]] to [[A:%.*]]*<br>
   // CHECK-NEXT: [[ISEMPTY:%.*]] = icmp eq i64 [[T0]], 0<br>
<br>
Modified: cfe/trunk/test/CodeGenCXX/<wbr>vtable-available-externally.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/vtable-available-externally.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>CodeGenCXX/vtable-available-<wbr>externally.cpp?rev=320250&r1=<wbr>320249&r2=320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/CodeGenCXX/<wbr>vtable-available-externally.<wbr>cpp (original)<br>
+++ cfe/trunk/test/CodeGenCXX/<wbr>vtable-available-externally.<wbr>cpp Sat Dec  9 04:09:54 2017<br>
@@ -1,5 +1,5 @@<br>
-// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -o %t<br>
-// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -O2 -disable-llvm-passes -emit-llvm -o %t.opt<br>
+// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -std=c++98 -emit-llvm -o %t<br>
+// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -std=c++98 -O2 -disable-llvm-passes -emit-llvm -o %t.opt<br>
 // RUN: FileCheck --check-prefix=CHECK-TEST1 %s < %t<br>
 // RUN: FileCheck --check-prefix=CHECK-TEST2 %s < %t<br>
 // RUN: FileCheck --check-prefix=CHECK-TEST5 %s < %t<br>
<br>
Modified: cfe/trunk/test/Lexer/cxx-<wbr>features.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/cxx-features.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/Lexer/<wbr>cxx-features.cpp?rev=320250&<wbr>r1=320249&r2=320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Lexer/cxx-<wbr>features.cpp (original)<br>
+++ cfe/trunk/test/Lexer/cxx-<wbr>features.cpp Sat Dec  9 04:09:54 2017<br>
@@ -4,8 +4,8 @@<br>
 // RUN: %clang_cc1 -std=c++14 -fcxx-exceptions -fsized-deallocation -verify %s<br>
 // RUN: %clang_cc1 -std=c++1z -fcxx-exceptions -fsized-deallocation -verify %s<br>
 // RUN: %clang_cc1 -std=c++1z -fcxx-exceptions -fsized-deallocation -fconcepts-ts -DCONCEPTS_TS=1 -verify %s<br>
-// RUN: %clang_cc1 -fno-rtti -fno-threadsafe-statics -verify %s -DNO_EXCEPTIONS -DNO_RTTI -DNO_THREADSAFE_STATICS<br>
-// RUN: %clang_cc1 -fcoroutines-ts -DNO_EXCEPTIONS -DCOROUTINES -verify %s<br>
+// RUN: %clang_cc1 -fno-rtti -fno-threadsafe-statics -verify %s -DNO_EXCEPTIONS -DNO_RTTI -DNO_THREADSAFE_STATICS -fsized-deallocation<br>
+// RUN: %clang_cc1 -fcoroutines-ts -DNO_EXCEPTIONS -DCOROUTINES -verify -fsized-deallocation %s<br>
<br>
 // expected-no-diagnostics<br>
<br>
<br>
Modified: cfe/trunk/test/Lexer/half-<wbr>literal.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/half-literal.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/Lexer/<wbr>half-literal.cpp?rev=320250&<wbr>r1=320249&r2=320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Lexer/half-<wbr>literal.cpp (original)<br>
+++ cfe/trunk/test/Lexer/half-<wbr>literal.cpp Sat Dec  9 04:09:54 2017<br>
@@ -1,5 +1,5 @@<br>
 // RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s<br>
-float a = 1.0h; // expected-error{{invalid suffix 'h' on floating constant}}<br>
+float a = 1.0h; // expected-error{{no matching literal operator for call to 'operator""h' with argument of type 'long double' or 'const char *', and no matching literal operator template}}<br>
 float b = 1.0H; // expected-error{{invalid suffix 'H' on floating constant}}<br>
<br>
 _Float16 c = 1.f166; // expected-error{{invalid suffix 'f166' on floating constant}}<br>
<br>
Modified: cfe/trunk/test/OpenMP/<wbr>taskloop_reduction_codegen.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/taskloop_reduction_codegen.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/OpenMP/<wbr>taskloop_reduction_codegen.<wbr>cpp?rev=320250&r1=320249&r2=<wbr>320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/OpenMP/<wbr>taskloop_reduction_codegen.cpp (original)<br>
+++ cfe/trunk/test/OpenMP/<wbr>taskloop_reduction_codegen.cpp Sat Dec  9 04:09:54 2017<br>
@@ -1,4 +1,4 @@<br>
-// RUN: %clang_cc1 -fopenmp -x c++ %s -verify -debug-info-kind=limited -emit-llvm -o - -triple powerpc64le-unknown-linux-gnu | FileCheck %s<br>
+// RUN: %clang_cc1 -fopenmp -x c++ %s -verify -debug-info-kind=limited -emit-llvm -o - -triple powerpc64le-unknown-linux-gnu -std=c++98 | FileCheck %s<br>
 // expected-no-diagnostics<br>
<br>
 struct S {<br>
<br>
Modified: cfe/trunk/test/OpenMP/<wbr>taskloop_simd_reduction_<wbr>codegen.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/taskloop_simd_reduction_codegen.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/OpenMP/<wbr>taskloop_simd_reduction_<wbr>codegen.cpp?rev=320250&r1=<wbr>320249&r2=320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/OpenMP/<wbr>taskloop_simd_reduction_<wbr>codegen.cpp (original)<br>
+++ cfe/trunk/test/OpenMP/<wbr>taskloop_simd_reduction_<wbr>codegen.cpp Sat Dec  9 04:09:54 2017<br>
@@ -1,4 +1,4 @@<br>
-// RUN: %clang_cc1 -fopenmp -x c++ %s -verify -debug-info-kind=limited -emit-llvm -o - -triple powerpc64le-unknown-linux-gnu | FileCheck %s<br>
+// RUN: %clang_cc1 -fopenmp -x c++ %s -verify -debug-info-kind=limited -emit-llvm -o - -triple powerpc64le-unknown-linux-gnu -std=c++98 | FileCheck %s<br>
 // expected-no-diagnostics<br>
<br>
 struct S {<br>
<br>
Modified: cfe/trunk/test/Parser/cxx1z-<wbr>nested-namespace-definition.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/cxx1z-nested-namespace-definition.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/Parser/<wbr>cxx1z-nested-namespace-<wbr>definition.cpp?rev=320250&r1=<wbr>320249&r2=320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/Parser/cxx1z-<wbr>nested-namespace-definition.<wbr>cpp (original)<br>
+++ cfe/trunk/test/Parser/cxx1z-<wbr>nested-namespace-definition.<wbr>cpp Sat Dec  9 04:09:54 2017<br>
@@ -1,5 +1,5 @@<br>
 // RUN: cp %s %t<br>
-// RUN: %clang_cc1 -fsyntax-only -verify %s<br>
+// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++98<br>
 // RUN: not %clang_cc1 -x c++ -fixit %t -Werror -DFIXIT<br>
 // RUN: %clang_cc1 -x c++ %t -DFIXIT<br>
 // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++17 -Wc++14-compat<br>
<br>
Modified: cfe/trunk/test/SemaCXX/new-<wbr>array-size-conv.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/new-array-size-conv.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>SemaCXX/new-array-size-conv.<wbr>cpp?rev=320250&r1=320249&r2=<wbr>320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/SemaCXX/new-<wbr>array-size-conv.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/new-<wbr>array-size-conv.cpp Sat Dec  9 04:09:54 2017<br>
@@ -1,4 +1,4 @@<br>
-// RUN: %clang_cc1 -fsyntax-only -pedantic -verify %s<br>
+// RUN: %clang_cc1 -fsyntax-only -pedantic -verify -std=gnu++98 %s<br>
 // RUN: %clang_cc1 -fsyntax-only -pedantic -verify -std=c++98 %s<br>
 // RUN: %clang_cc1 -fsyntax-only -pedantic -verify -std=c++11 %s<br>
<br>
<br>
Modified: cfe/trunk/test/SemaCXX/new-<wbr>delete.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/new-delete.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>SemaCXX/new-delete.cpp?rev=<wbr>320250&r1=320249&r2=320250&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/SemaCXX/new-<wbr>delete.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/new-<wbr>delete.cpp Sat Dec  9 04:09:54 2017<br>
@@ -80,12 +80,21 @@ void bad_news(int *ip)<br>
   (void)new int[1.1];<br>
 #if __cplusplus <= 199711L<br>
   // expected-error@-2 {{array size expression must have integral or enumeration type, not 'double'}}<br>
-#else<br>
+#elif __cplusplus <= 201103L<br>
   // expected-error@-4 {{array size expression must have integral or unscoped enumeration type, not 'double'}}<br>
+#else<br>
+  // expected-warning@-6 {{implicit conversion from 'double' to 'unsigned int' changes value from 1.1 to 1}}<br>
 #endif<br>
<br>
-  (void)new int[1][i]; // expected-error {{only the first dimension}} expected-note {{read of non-const variable 'i' is not allowed in a constant expression}}<br>
-  (void)new (int[1][i]); // expected-error {{only the first dimension}} expected-note {{read of non-const variable 'i' is not allowed in a constant expression}}<br>
+  (void)new int[1][i];  // expected-note {{read of non-const variable 'i' is not allowed in a constant expression}}<br>
+  (void)new (int[1][i]); // expected-note {{read of non-const variable 'i' is not allowed in a constant expression}}<br>
+#if __cplusplus <= 201103L<br>
+  // expected-error@-3 {{only the first dimension}}<br>
+  // expected-error@-3 {{only the first dimension}}<br>
+#else<br>
+  // expected-error@-6 {{array size is not a constant expression}}<br>
+  // expected-error@-6 {{array size is not a constant expression}}<br>
+#endif<br>
   (void)new (int[i]); // expected-warning {{when type is in parentheses}}<br>
   (void)new int(*(S*)0); // expected-error {{no viable conversion from 'S' to 'int'}}<br>
   (void)new int(1, 2); // expected-error {{excess elements in scalar initializer}}<br>
@@ -94,13 +103,20 @@ void bad_news(int *ip)<br>
   (void)new const int; // expected-error {{default initialization of an object of const type 'const int'}}<br>
   (void)new float*(ip); // expected-error {{cannot initialize a new value of type 'float *' with an lvalue of type 'int *'}}<br>
   // Undefined, but clang should reject it directly.<br>
-  (void)new int[-1]; // expected-error {{array size is negative}}<br>
+  (void)new int[-1];<br>
+#if __cplusplus <= 201103L<br>
+  // expected-error@-2 {{array size is negative}}<br>
+#else<br>
+  // expected-error@-4 {{array is too large}}<br>
+#endif<br>
   (void)new int[2000000000]; // expected-error {{array is too large}}<br>
   (void)new int[*(S*)0];<br>
 #if __cplusplus <= 199711L<br>
   // expected-error@-2 {{array size expression must have integral or enumeration type, not 'S'}}<br>
-#else<br>
+#elif __cplusplus <= 201103L<br>
   // expected-error@-4 {{array size expression must have integral or unscoped enumeration type, not 'S'}}<br>
+#else<br>
+  // expected-error@-6 {{converting 'S' to incompatible type}}<br>
 #endif<br>
<br>
   (void)::S::new int; // expected-error {{expected unqualified-id}}<br>
<br>
Modified: cfe/trunk/test/SemaCXX/<wbr>unknown-type-name.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/unknown-type-name.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>SemaCXX/unknown-type-name.cpp?<wbr>rev=320250&r1=320249&r2=<wbr>320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/SemaCXX/<wbr>unknown-type-name.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/<wbr>unknown-type-name.cpp Sat Dec  9 04:09:54 2017<br>
@@ -95,7 +95,10 @@ template<typename T> int A<T>::h(T::type<br>
 template<typename T> int h(T::type, int); // expected-error{{missing 'typename'}}<br>
 template<typename T> int h(T::type x, char); // expected-error{{missing 'typename'}}<br>
<br>
-template<typename T> int junk1(T::junk); // expected-warning{{variable templates are a C++14 extension}}<br>
+template<typename T> int junk1(T::junk);<br>
+#if __cplusplus <= 201103L<br>
+// expected-warning@-2 {{variable templates are a C++14 extension}}<br>
+#endif<br>
 template<typename T> int junk2(T::junk) throw(); // expected-error{{missing 'typename'}}<br>
 template<typename T> int junk3(T::junk) = delete; // expected-error{{missing 'typename'}}<br>
 #if __cplusplus <= 199711L<br>
@@ -106,7 +109,11 @@ template<typename T> int junk4(T::junk j<br>
<br>
 // FIXME: We can tell this was intended to be a function because it does not<br>
 //        have a dependent nested name specifier.<br>
-template<typename T> int i(T::type, int()); // expected-warning{{variable templates are a C++14 extension}}<br>
+template<typename T> int i(T::type, int());<br>
+#if __cplusplus <= 201103L<br>
+// expected-warning@-2 {{variable templates are a C++14 extension}}<br>
+#endif<br>
+<br>
<br>
 // FIXME: We know which type specifier should have been specified here. Provide<br>
 //        a fix-it to add 'typename A<T>::type'<br>
<br>
Modified: cfe/trunk/test/SemaTemplate/<wbr>class-template-decl.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/class-template-decl.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>SemaTemplate/class-template-<wbr>decl.cpp?rev=320250&r1=320249&<wbr>r2=320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/SemaTemplate/<wbr>class-template-decl.cpp (original)<br>
+++ cfe/trunk/test/SemaTemplate/<wbr>class-template-decl.cpp Sat Dec  9 04:09:54 2017<br>
@@ -57,8 +57,7 @@ void f() {<br>
   template<typename T> class X; // expected-error{{expression}}<br>
 }<br>
<br>
-template<typename T> class X1 var; // expected-warning{{variable templates are a C++14 extension}} \<br>
-                                   // expected-error {{variable has incomplete type 'class X1'}} \<br>
+template<typename T> class X1 var; // expected-error {{variable has incomplete type 'class X1'}} \<br>
                                    // expected-note {{forward declaration of 'X1'}}<br>
<br>
 namespace M {<br>
<br>
Modified: cfe/trunk/test/SemaTemplate/<wbr>explicit-instantiation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/explicit-instantiation.cpp?rev=320250&r1=320249&r2=320250&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>SemaTemplate/explicit-<wbr>instantiation.cpp?rev=320250&<wbr>r1=320249&r2=320250&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/SemaTemplate/<wbr>explicit-instantiation.cpp (original)<br>
+++ cfe/trunk/test/SemaTemplate/<wbr>explicit-instantiation.cpp Sat Dec  9 04:09:54 2017<br>
@@ -124,10 +124,10 @@ namespace PR10086 {<br>
 namespace undefined_static_data_member {<br>
   template<typename T> struct A {<br>
     static int a; // expected-note {{here}}<br>
-    template<typename U> static int b; // expected-note {{here}} expected-warning {{extension}}<br>
+    template<typename U> static int b; // expected-note {{here}} expected-warning 0+ {{extension}}<br>
   };<br>
   struct B {<br>
-    template<typename U> static int c; // expected-note {{here}} expected-warning {{extension}}<br>
+    template<typename U> static int c; // expected-note {{here}} expected-warning 0+ {{extension}}<br>
   };<br>
<br>
   template int A<int>::a; // expected-error {{explicit instantiation of undefined static data member 'a' of class template 'undefined_static_data_member:<wbr>:A<int>'}}<br>
@@ -137,14 +137,14 @@ namespace undefined_static_data_member {<br>
<br>
   template<typename T> struct C {<br>
     static int a;<br>
-    template<typename U> static int b; // expected-warning {{extension}}<br>
+    template<typename U> static int b; // expected-warning 0+ {{extension}}<br>
   };<br>
   struct D {<br>
-    template<typename U> static int c; // expected-warning {{extension}}<br>
+    template<typename U> static int c; // expected-warning 0+ {{extension}}<br>
   };<br>
   template<typename T> int C<T>::a;<br>
-  template<typename T> template<typename U> int C<T>::b; // expected-warning {{extension}}<br>
-  template<typename U> int D::c; // expected-warning {{extension}}<br>
+  template<typename T> template<typename U> int C<T>::b; // expected-warning 0+ {{extension}}<br>
+  template<typename U> int D::c; // expected-warning 0+ {{extension}}<br>
<br>
   template int C<int>::a;<br>
   template int C<int>::b<int>;<br>
<br>
<br>
______________________________<wbr>_________________<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/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div>