aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2018-11-22 21:26:21 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2018-11-22 20:26:21 +0000
commit69a69df1e55a98e63c608ff5779189a00a5a1deb (patch)
treeedb2a9f39a4ed5fa22b0b20df4b82012ce76ecc5
parentb9207e90c010284d91771501024a23fe259c3925 (diff)
downloadgcc-69a69df1e55a98e63c608ff5779189a00a5a1deb.zip
gcc-69a69df1e55a98e63c608ff5779189a00a5a1deb.tar.gz
gcc-69a69df1e55a98e63c608ff5779189a00a5a1deb.tar.bz2
odr-2_0.C: Drop dg-lto-options.
* g++.dg/lto/odr-2_0.C: Drop dg-lto-options. * g++.dg/lto/odr-3_0.C: Likewise; harden for optimizing compilatoin. From-SVN: r266388
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/lto/odr-2_0.C1
-rw-r--r--gcc/testsuite/g++.dg/lto/odr-3_0.C30
-rw-r--r--gcc/testsuite/g++.dg/lto/odr-3_1.C17
4 files changed, 42 insertions, 11 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b8a793f..6ebb592 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-22 Jan Hubicka <hubicka@ucw.cz>
+
+ * g++.dg/lto/odr-2_0.C: Drop dg-lto-options.
+ * g++.dg/lto/odr-3_0.C: Likewise; harden for optimizing compilatoin.
+
2018-11-22 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/85794
diff --git a/gcc/testsuite/g++.dg/lto/odr-2_0.C b/gcc/testsuite/g++.dg/lto/odr-2_0.C
index 3ebb49e..09fcff5 100644
--- a/gcc/testsuite/g++.dg/lto/odr-2_0.C
+++ b/gcc/testsuite/g++.dg/lto/odr-2_0.C
@@ -1,5 +1,4 @@
// { dg-lto-do link }
-// { dg-lto-options { -O0 -flto } }
enum a {} b; // { dg-lto-warning "6: type 'a' violates the C\\+\\+ One Definition Rule" }
int
main(void)
diff --git a/gcc/testsuite/g++.dg/lto/odr-3_0.C b/gcc/testsuite/g++.dg/lto/odr-3_0.C
index bfa6c0b..9e0c25d 100644
--- a/gcc/testsuite/g++.dg/lto/odr-3_0.C
+++ b/gcc/testsuite/g++.dg/lto/odr-3_0.C
@@ -1,12 +1,32 @@
// { dg-lto-do link }
-// { dg-lto-options { -O0 -flto } }
typedef struct {
int a; // { dg-lto-message "the first difference of corresponding definitions is field 'a'" }
-} YYSTYPE; // { dg-lto-warning "3: warning: type ‘struct YYSTYPE’ violates the C\\+\\+ One Definition Rule" }
-union yyalloc { // { dg-lto-warning "7: type ‘union yyalloc’ violates the C\\+\\+ One Definition Rule" }
+} YYSTYPE; // { dg-lto-message "violates the C\\+\\+ One Definition Rule" 2 }
+ // Here we get warning and a note:
+ // warning: type 'struct YYSTYPE' violates the C++ One Definition Rule
+ // note: type 'struct YYSTYPE' itself violates the C++ One Definition Rule
+union yyalloc { // { dg-lto-warning "7: type 'union yyalloc' violates the C\\+\\+ One Definition Rule" }
short yyss;
- YYSTYPE yyvs; // { dg-lto-message "the first difference of corresponding definitions is field ‘yyvs’" }
+ YYSTYPE yyvs; // { dg-lto-message "the first difference of corresponding definitions is field 'yyvs'" }
};
-void b() { yyalloc c; }
+extern yyalloc a; // { dg-lto-warning "16: 'a' violates the C\\+\\+ One Definition Rule" }
+int
+main (void) {return a.yyss;}
+/* Match warnings as follows:
+ odr-3_0.C:5:3: warning: type 'struct YYSTYPE' violates the C++ One Definition Rule [-Wodr]
+ odr-3_1.C:1:16: note: a different type is defined in another translation unit^
+ odr-3_0.C:4:7: note: the first difference of corresponding definitions is field 'a'
+ odr-3_1.C:1:16: note: a type with different number of fields is defined in another translation unit
+ odr-3_0.C:9:7: warning: type 'union yyalloc' violates the C++ One Definition Rule [-Wodr]
+ odr-3_1.C:6:7: note: a different type is defined in another translation unit
+ odr-3_0.C:11:11: note: the first difference of corresponding definitions is field 'yyvs'
+ odr-3_1.C:11:11: note: a field of same name but different type is defined in another translation unit
+ odr-3_0.C:5:3: note: type 'struct YYSTYPE' itself violates the C++ One Definition Rule
+ odr-3_0.C:13:16: warning: 'a' violates the C++ One Definition Rule [-Wodr]
+ odr-3_1.C:6:7: note: type 'union yyalloc' itself violates the C++ One Definition Rule
+ odr-3_0.C:9:7: note: the incompatible type is defined here
+ odr-3_1.C:15:9: note: 'a' was previously declared here
+ odr-3_1.C:15:9: note: code may be misoptimized unless -fno-strict-aliasing is used
+*/
diff --git a/gcc/testsuite/g++.dg/lto/odr-3_1.C b/gcc/testsuite/g++.dg/lto/odr-3_1.C
index 8a44486..99d7bac 100644
--- a/gcc/testsuite/g++.dg/lto/odr-3_1.C
+++ b/gcc/testsuite/g++.dg/lto/odr-3_1.C
@@ -1,9 +1,16 @@
-typedef struct YYSTYPE { // { dg-lto-message ":16 a different type is defined in another translation unit" }
+typedef struct YYSTYPE { // { dg-lto-message "type" 2 }
+ // We get two notes here:
+ // note: a different type is defined in another translation unit
+ // note: a type with different number of fields is defined in another translation unit
} YYSTYPE;
-union yyalloc {
+union yyalloc { // { dg-lto-message "type" 2 }
+ // We get here three notes:
+ // note: a different type is defined in another translation unit
+ // note: type 'union yyalloc' itself violates the C++ One Definition Rule
short yyss;
- YYSTYPE yyvs; // { dg-lto-message "the first difference of corresponding definitions is field ‘yyvs’" }
+ YYSTYPE yyvs; // { dg-lto-message "field of same name but different type is defined in another translation unit" }
-};
-void a() { yyalloc b; }
+};
+
+yyalloc a; // { dg-lto-message "'a' was previously declared here" }