forked from OSchip/llvm-project
Merge transparent union types using member's unqualified type
llvm-svn: 120736
This commit is contained in:
parent
9e618ed1c9
commit
19b961d5f9
|
@ -4736,7 +4736,7 @@ QualType ASTContext::mergeTransparentUnionType(QualType T, QualType SubType,
|
|||
if (UD->hasAttr<TransparentUnionAttr>()) {
|
||||
for (RecordDecl::field_iterator it = UD->field_begin(),
|
||||
itend = UD->field_end(); it != itend; ++it) {
|
||||
QualType ET = getCanonicalParamType(it->getType());
|
||||
QualType ET = it->getType().getUnqualifiedType();
|
||||
QualType MT = mergeTypes(ET, SubType, OfBlockPointer, Unqualified);
|
||||
if (!MT.isNull())
|
||||
return MT;
|
||||
|
|
|
@ -3,6 +3,7 @@ typedef union {
|
|||
int *ip;
|
||||
float *fp;
|
||||
long *__restrict rlp;
|
||||
void *vpa[1];
|
||||
} TU __attribute__((transparent_union));
|
||||
|
||||
void f(TU); // expected-note{{passing argument to parameter here}}
|
||||
|
@ -39,6 +40,9 @@ void fsp(short *s) {} // expected-error{{conflicting types}}
|
|||
void fi(TU); // expected-note{{previous declaration is here}}
|
||||
void fi(int i) {} // expected-error{{conflicting types}}
|
||||
|
||||
void fvpp(TU); // expected-note{{previous declaration is here}}
|
||||
void fvpp(void **v) {} // expected-error{{conflicting types}}
|
||||
|
||||
/* FIXME: we'd like to just use an "int" here and align it differently
|
||||
from the normal "int", but if we do so we lose the alignment
|
||||
information from the typedef within the compiler. */
|
||||
|
|
Loading…
Reference in New Issue