mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
c: Fix ICE related to tags and hardbool attribute [PR123856]
The hardbool attribute creates special enumeration types, but the tag is not set correctly, which causes broken diagnostics and an ICE with the new helper function to get the tag. PR c/123856 gcc/c-family/ChangeLog: * c-attribs.cc (handle_hardbool_attribute): Fix TYPE_NAME. gcc/testsuite/ChangeLog: * gcc.dg/pr123856.c: New test.
This commit is contained in:
committed by
Martin Uecker
parent
381af4e29b
commit
4edd2957ad
@@ -1229,13 +1229,14 @@ handle_hardbool_attribute (tree *node, tree name, tree args,
|
||||
|
||||
gcc_checking_assert (!TYPE_CACHED_VALUES_P (*node));
|
||||
TYPE_VALUES (*node) = values;
|
||||
TYPE_NAME (*node) = unqual;
|
||||
|
||||
if (TYPE_QUALS (orig) != TYPE_QUALS (*node))
|
||||
{
|
||||
*node = build_qualified_type (*node, TYPE_QUALS (orig));
|
||||
TYPE_NAME (*node) = orig;
|
||||
}
|
||||
*node = build_qualified_type (*node, TYPE_QUALS (orig));
|
||||
|
||||
if (TREE_CODE (orig) == TYPE_DECL)
|
||||
TYPE_NAME (*node) = TYPE_NAME (orig);
|
||||
else
|
||||
TYPE_NAME (*node) = NULL_TREE;
|
||||
|
||||
return NULL_TREE;
|
||||
}
|
||||
|
||||
19
gcc/testsuite/gcc.dg/pr123856.c
Normal file
19
gcc/testsuite/gcc.dg/pr123856.c
Normal file
@@ -0,0 +1,19 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wenum-conversion" } */
|
||||
|
||||
typedef __attribute__((__hardbool__)) int A, B;
|
||||
|
||||
B b;
|
||||
void bar(A) { }
|
||||
void foo() { bar(b); } /* { dg-warning "implicit conversion" } */
|
||||
|
||||
void bar2(__attribute__((__hardbool__)) int) { }
|
||||
void foo2() { bar2(b); } /* { dg-warning "implicit conversion" } */
|
||||
|
||||
__attribute__((__hardbool__)) int c;
|
||||
void bar3(__attribute__((__hardbool__)) int) { }
|
||||
void foo3() { bar2(c); } /* { dg-warning "implicit conversion" } */
|
||||
|
||||
void bar4(int) { }
|
||||
void foo4() { bar2(c); } /* { dg-warning "implicit conversion" } */
|
||||
|
||||
Reference in New Issue
Block a user