constexpr.c (ensure_literal_type_for_constexpr_object): Use DECL_SOURCE_LOCATION...
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 15 Nov 2018 18:03:54 +0000 (18:03 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 15 Nov 2018 18:03:54 +0000 (18:03 +0000)
/cp
2018-11-15  Paolo Carlini  <paolo.carlini@oracle.com>

* constexpr.c (ensure_literal_type_for_constexpr_object): Use
DECL_SOURCE_LOCATION in error_at calls.

/testsuite
2018-11-15  Paolo Carlini  <paolo.carlini@oracle.com>

* g++.dg/cpp0x/constexpr-diag3.C: Check locations too.
* g++.dg/cpp0x/constexpr-ice19.C: Likewise.
* g++.dg/cpp0x/constexpr-nonlit2.C: Likewise.
* g++.dg/cpp1z/constexpr-lambda15.C: Likewise.
* g++.dg/ext/constexpr-vla5.C: Likewise.
* g++.dg/gomp/pr85134.C: Likewise.

From-SVN: r266192

gcc/cp/ChangeLog
gcc/cp/constexpr.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/constexpr-diag3.C
gcc/testsuite/g++.dg/cpp0x/constexpr-ice19.C
gcc/testsuite/g++.dg/cpp0x/constexpr-nonlit2.C
gcc/testsuite/g++.dg/cpp1z/constexpr-lambda15.C
gcc/testsuite/g++.dg/ext/constexpr-vla5.C
gcc/testsuite/g++.dg/gomp/pr85134.C

index d6ee781d730b0b6155cca9e9482cb3bb64960ac7..6d87c293dd60ae000cd3a9efe8603e0f7afdb98d 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-15  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * constexpr.c (ensure_literal_type_for_constexpr_object): Use
+       DECL_SOURCE_LOCATION in error_at calls.
+
 2018-11-15  Nathan Sidwell  <nathan@acm.org>
 
        DR 2336
index a50e186148d93edcb20740aa0a3472a6e5d2fa99..c9e1e0cbdcb387753dfa5d23747ecea04d7b7f5a 100644 (file)
@@ -98,8 +98,9 @@ ensure_literal_type_for_constexpr_object (tree decl)
          if (DECL_DECLARED_CONSTEXPR_P (decl))
            {
              auto_diagnostic_group d;
-             error ("the type %qT of %<constexpr%> variable %qD "
-                    "is not literal", type, decl);
+             error_at (DECL_SOURCE_LOCATION (decl),
+                       "the type %qT of %<constexpr%> variable %qD "
+                       "is not literal", type, decl);
              explain_non_literal_class (type);
              decl = error_mark_node;
            }
@@ -108,8 +109,9 @@ ensure_literal_type_for_constexpr_object (tree decl)
              if (!is_instantiation_of_constexpr (current_function_decl))
                {
                  auto_diagnostic_group d;
-                 error ("variable %qD of non-literal type %qT in %<constexpr%> "
-                        "function", decl, type);
+                 error_at (DECL_SOURCE_LOCATION (decl),
+                           "variable %qD of non-literal type %qT in "
+                           "%<constexpr%> function", decl, type);
                  explain_non_literal_class (type);
                  decl = error_mark_node;
                }
@@ -119,8 +121,9 @@ ensure_literal_type_for_constexpr_object (tree decl)
       else if (DECL_DECLARED_CONSTEXPR_P (decl)
               && variably_modified_type_p (type, NULL_TREE))
        {
-         error ("%<constexpr%> variable %qD has variably-modified type %qT",
-                decl, type);
+         error_at (DECL_SOURCE_LOCATION (decl),
+                   "%<constexpr%> variable %qD has variably-modified "
+                   "type %qT", decl, type);
          decl = error_mark_node;
        }
     }
index 2842a7b2b89430e72bfc09e20e49343c64f9ba1d..24ea36ec91242947f61574bad9175d5a8f21cc2c 100644 (file)
@@ -1,3 +1,12 @@
+2018-11-15  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       * g++.dg/cpp0x/constexpr-diag3.C: Check locations too.
+       * g++.dg/cpp0x/constexpr-ice19.C: Likewise.
+       * g++.dg/cpp0x/constexpr-nonlit2.C: Likewise.
+       * g++.dg/cpp1z/constexpr-lambda15.C: Likewise.
+       * g++.dg/ext/constexpr-vla5.C: Likewise.
+       * g++.dg/gomp/pr85134.C: Likewise.
+
 2018-11-15  Nathan Sidwell  <nathan@acm.org>
 
        DR 2336
index fc5a721085333cfb9d0fd480521a38cf602c678f..e54b26c7f6afd39138a25f9770655e38c21dad7f 100644 (file)
@@ -24,7 +24,7 @@ private:
   double im;
 };
 
-constexpr complex co1(0, 1);      // { dg-error "not literal" }
+constexpr complex co1(0, 1);      // { dg-error "19:the type .const complex. of .constexpr. variable .co1. is not literal" }
 constexpr double dd2 = co1.real(); // { dg-error "|in .constexpr. expansion of " }
 
 // --------------------
index f62a0d995c2cd54b1ac01a56bd4dc6647e4f6f28..6475c39b806d774a137b440843e0420d48dfff26 100644 (file)
@@ -9,5 +9,6 @@ struct A
 
 struct B
 {
-  static constexpr A a {};  // { dg-error "not literal|in-class initialization" }
+  static constexpr A a {};  // { dg-error "22:the type .const A. of .constexpr. variable .B::a. is not literal" }
+// { dg-error "in-class initialization" "" { target c++11 } .-1 }
 };
index 2d712b64a52a768f05838cbc38de6db5b2549b3a..0717f06a9779239c2030b822ca62e2cd096e0ed3 100644 (file)
@@ -16,4 +16,4 @@ template <class T>
 constexpr W<T> make_w(T& w) { return W<T>(w); }
 
 A a;
-constexpr auto w = make_w(a);  // { dg-error "" }
+constexpr auto w = make_w(a);  // { dg-error "16:the type .const W<A>. of .constexpr. variable .w. is not literal" }
index 358d4aaed8fcaed0b1e2fae36cdb8e3878bfccec..0420ebb25313e0374079a22c8208a54c7fcec35c 100644 (file)
@@ -3,7 +3,7 @@
 
 struct S {
   constexpr S(int i) {
-    auto f = [i]{};            // { dg-error "literal" "" { target c++14_only } }
+    auto f = [i]{};            // { dg-error "10:variable .f. of non-literal type" "" { target c++14_only } }
   }
 };
 int main() {}
index 565d40ab07725578d36d2522af2e390d7adc0010..5f19d3c4fd72f33ce3bf77630904d768cb9eee4b 100644 (file)
@@ -3,5 +3,6 @@
 
 void foo(int i)
 {
-  constexpr char x[i] = "";    // { dg-error "" }
+  constexpr char x[i] = "";    // { dg-error "18:.constexpr. variable .x. has variably-modified type" }
+// { dg-error "ISO C\\+\\+ forbids variable length array .x" "" { target c++11 } .-1 }  
 }
index 9872ae53a92db43c04cf937a383e14a4aed1427d..01f5574fcc7a87b99c9f28ca935fb05bd4f775c8 100644 (file)
@@ -5,7 +5,7 @@
 void
 foo (int i)
 {
-  constexpr int x[i] = {};     // { dg-error "'constexpr' variable 'x' has variably-modified type" }
+  constexpr int x[i] = {};     // { dg-error "17:'constexpr' variable 'x' has variably-modified type" }
 #pragma omp parallel shared(x)
   ;
 }