Hi,

this patch fixes an assert in build_va_arg. Instead of testing for pointer equality, we use the same test as is used in std_canonical_va_list_type.

Bootstrapped and reg-tested on x86_64.

OK for trunk?

Thanks,
- Tom
Fix assert in build_va_arg, case 2b

2016-08-22  Tom de Vries  <t...@codesourcery.com>

	* c-common.c (build_va_arg): Fix type comparison assert.

---
 gcc/c-family/c-common.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index a289d2b..3b61e64 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -5894,7 +5894,10 @@ build_va_arg (location_t loc, tree expr, tree type)
     {
       /* Case 2b: va_list is pointer to array elem type.  */
       gcc_assert (POINTER_TYPE_P (va_type));
-      gcc_assert (TREE_TYPE (va_type) == TREE_TYPE (canon_va_type));
+
+      /* Comparison as in std_canonical_va_list_type.  */
+      gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (va_type))
+		  == TYPE_MAIN_VARIANT (TREE_TYPE (canon_va_type)));
 
       /* Don't take the address.  We've already got '&ap'.  */
       ;

Reply via email to