diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/c-family/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr77427.C | 17 |
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index d7b95de..d8f1808 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,4 +1,10 @@ 2016-09-13 Jason Merrill <jason@redhat.com> + Tom de Vries <tom@codesourcery.com> + + PR c++/77427 + * c-common.c (set_underlying_type): Don't treat array as builtin type. + +2016-09-13 Jason Merrill <jason@redhat.com> * c-common.c (check_cxx_fundamental_alignment_constraints): Don't limit types at all. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 9fec2cf..73bd43f8 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -12298,7 +12298,7 @@ set_underlying_type (tree x) { if (x == error_mark_node) return; - if (DECL_IS_BUILTIN (x)) + if (DECL_IS_BUILTIN (x) && TREE_CODE (TREE_TYPE (x)) != ARRAY_TYPE) { if (TYPE_NAME (TREE_TYPE (x)) == 0) TYPE_NAME (TREE_TYPE (x)) = x; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d9d6825..2ebe9e6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-09-13 Jason Merrill <jason@redhat.com> + Tom de Vries <tom@codesourcery.com> + + PR c++/77427 + * g++.dg/pr77427.C: New test. + 2016-09-13 Martin Liska <mliska@suse.cz> * g++.dg/gcov/gcov-threads-1.C: Use profile_update_atomic diff --git a/gcc/testsuite/g++.dg/pr77427.C b/gcc/testsuite/g++.dg/pr77427.C new file mode 100644 index 0000000..544946d --- /dev/null +++ b/gcc/testsuite/g++.dg/pr77427.C @@ -0,0 +1,17 @@ +// { dg-do compile } + +void bar (__builtin_va_list &); + +struct c +{ + operator const __builtin_va_list &(); + operator __builtin_va_list &(); +}; + +void +foo (void) +{ + struct c c1; + + bar (c1); +} |