re PR ipa/87957 (ICE tree check: expected tree that contains ‘decl minimal’ structure, have ‘identifier_node’ in warn_odr, at ipa-devirt.c:1051 since r265519)
PR lto/87957 * g++.dg/lto/odr-1_0.C: Extend by mismatched enum. * g++.dg/lto/odr-1_1.C: Extend by mismatched enum. * g++.dg/lto/odr-2_0.C: New. * g++.dg/lto/odr-2_0.C: New. * g++.dg/lto/odr-3_1.C: New. * g++.dg/lto/odr-3_1.C: New. From-SVN: r266351
This commit is contained in:
parent
7424b7c139
commit
4cd5da011d
7 changed files with 56 additions and 6 deletions
|
@ -1,3 +1,13 @@
|
|||
2018-11-21 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
PR lto/87957
|
||||
* g++.dg/lto/odr-1_0.C: Extend by mismatched enum.
|
||||
* g++.dg/lto/odr-1_1.C: Extend by mismatched enum.
|
||||
* g++.dg/lto/odr-2_0.C: New.
|
||||
* g++.dg/lto/odr-2_0.C: New.
|
||||
* g++.dg/lto/odr-3_1.C: New.
|
||||
* g++.dg/lto/odr-3_1.C: New.
|
||||
|
||||
2018-11-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/87839
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
// PR c++/82414
|
||||
// { dg-lto-do link }
|
||||
enum vals {aa,cc}; // { dg-lto-warning "6: type 'vals' violates the C\\+\\+ One Definition Rule" }
|
||||
struct a { // { dg-lto-warning "8: type 'struct a' violates the C\\+\\+ One Definition Rule" }
|
||||
struct b *ptr; // { dg-lto-message "13: the first difference of corresponding definitions is field 'ptr'" }
|
||||
enum vals vals;
|
||||
};
|
||||
void test(struct a *)
|
||||
void test(struct a *a)
|
||||
{
|
||||
a->vals = cc;
|
||||
}
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
namespace {
|
||||
struct b;
|
||||
struct b; // { dg-lto-message "type 'struct b' defined in anonymous namespace can not match across the translation unit boundary" }
|
||||
}
|
||||
struct a {
|
||||
struct b *ptr;
|
||||
};
|
||||
enum vals {aa,bb,cc}; // { dg-lto-message "an enum with different value name is defined in another translation unit" }
|
||||
struct a { // { dg-lto-message "a different type is defined in another translation unit" }
|
||||
struct b *ptr; // { dg-lto-message "a field of same name but different type is defined in another translation unit" }
|
||||
enum vals vals;
|
||||
} a;
|
||||
void test(struct a *);
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
test (0);
|
||||
test (&a);
|
||||
if (a.vals==aa)
|
||||
return 1;
|
||||
}
|
||||
|
|
8
gcc/testsuite/g++.dg/lto/odr-2_0.C
Normal file
8
gcc/testsuite/g++.dg/lto/odr-2_0.C
Normal file
|
@ -0,0 +1,8 @@
|
|||
// { 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)
|
||||
{
|
||||
return 0;
|
||||
}
|
4
gcc/testsuite/g++.dg/lto/odr-2_1.C
Normal file
4
gcc/testsuite/g++.dg/lto/odr-2_1.C
Normal file
|
@ -0,0 +1,4 @@
|
|||
class a { // { dg-lto-message "a different type is defined in another translation unit" }
|
||||
int *b() const;
|
||||
};
|
||||
int *a::b() const { return 0; }
|
12
gcc/testsuite/g++.dg/lto/odr-3_0.C
Normal file
12
gcc/testsuite/g++.dg/lto/odr-3_0.C
Normal file
|
@ -0,0 +1,12 @@
|
|||
// { 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" }
|
||||
short yyss;
|
||||
YYSTYPE yyvs; // { dg-lto-message "the first difference of corresponding definitions is field ‘yyvs’" }
|
||||
};
|
||||
void b() { yyalloc c; }
|
||||
|
9
gcc/testsuite/g++.dg/lto/odr-3_1.C
Normal file
9
gcc/testsuite/g++.dg/lto/odr-3_1.C
Normal file
|
@ -0,0 +1,9 @@
|
|||
typedef struct YYSTYPE { // { dg-lto-message ":16 a different type is defined in another translation unit" }
|
||||
} YYSTYPE;
|
||||
union yyalloc {
|
||||
short yyss;
|
||||
YYSTYPE yyvs; // { dg-lto-message "the first difference of corresponding definitions is field ‘yyvs’" }
|
||||
|
||||
};
|
||||
void a() { yyalloc b; }
|
||||
|
Loading…
Add table
Reference in a new issue