Commit 4cd5da01 by Jan Hubicka Committed by Jan Hubicka

re PR ipa/87957 (ICE tree check: expected tree that contains ‘decl minimal’…

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
parent 7424b7c1
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
......
// 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;
}
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;
}
// { 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;
}
class a { // { dg-lto-message "a different type is defined in another translation unit" }
int *b() const;
};
int *a::b() const { return 0; }
// { 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; }
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; }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment