From afcfe58c3860cc80d80c82de080afc1711d8beed Mon Sep 17 00:00:00 2001 From: Marcus Meissner Date: Thu, 29 Oct 1998 21:37:24 +0000 Subject: [PATCH] i386.c (i386_valid_type_attribute_p): Return nonzero for mismatched "stdcall" and "cdecl" attributes. * i386.c (i386_valid_type_attribute_p): Return nonzero for mismatched "stdcall" and "cdecl" attributes. From-SVN: r23436 --- gcc/ChangeLog | 5 +++++ gcc/config/i386/i386.c | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 22c38bc8c11..ee5085d0249 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Thu Oct 29 22:30:54 1998 Marcus Meissner + + * i386.c (i386_valid_type_attribute_p): Return nonzero for mismatched + "stdcall" and "cdecl" attributes. + Thu Oct 29 19:05:17 1998 Jim Wilson * sched.c (update_flow_info): Add code to ! found_orig_dest case to diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 70cfcdc500b..3729553bd21 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -622,9 +622,19 @@ i386_valid_type_attribute_p (type, attributes, identifier, args) int i386_comp_type_attributes (type1, type2) - tree type1 ATTRIBUTE_UNUSED; - tree type2 ATTRIBUTE_UNUSED; + tree type1; + tree type2; { + /* Check for mismatch of non-default calling convention. */ + char *rtdstr = TARGET_RTD ? "cdecl" : "stdcall"; + + if (TREE_CODE (type1) != FUNCTION_TYPE) + return 1; + + /* Check for mismatched return types (cdecl vs stdcall). */ + if (lookup_attribute (rtdstr, TYPE_ATTRIBUTES (type1)) + != lookup_attribute (rtdstr, TYPE_ATTRIBUTES (type2))) + return 0; return 1; }