From: Mark Mitchell Date: Tue, 29 Oct 2002 21:12:36 +0000 (+0000) Subject: re PR c++/7363 (bogus __alignof__ implementation) X-Git-Tag: releases/gcc-3.2.1~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cd35cc87a5017da02ca779ef0ecaeedbe1b70f60;p=thirdparty%2Fgcc.git re PR c++/7363 (bogus __alignof__ implementation) PR c++/7363 * semantics.c (finish_alignof): Call complete_type before calling c_alignof. * decl2.c (build_expr_from_tree): Use finish_sizeof/finish_alignof. * g++.dg/template/alignof1.C: New test. From-SVN: r58634 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c9c1741b8603..eaba75521948 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2002-10-29 Mark Mitchell + + * semantics.c (finish_alignof): Call complete_type before calling + c_alignof. + * decl2.c (build_expr_from_tree): Use + finish_sizeof/finish_alignof. + 2002-10-10 Jim Wilson * decl.c (duplicate_decls): Don't call decl_attributes. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 43349631b4de..871fefc51302 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -3795,10 +3795,8 @@ build_expr_from_tree (t) case ALIGNOF_EXPR: { tree r = build_expr_from_tree (TREE_OPERAND (t, 0)); - if (!TYPE_P (r)) - return TREE_CODE (t) == SIZEOF_EXPR ? expr_sizeof (r) : c_alignof_expr (r); - else - return TREE_CODE (t) == SIZEOF_EXPR ? c_sizeof (r) : c_alignof (r); + return (TREE_CODE (t) == SIZEOF_EXPR + ? finish_sizeof (r) : finish_alignof (r)); } case MODOP_EXPR: diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 43d3074dca38..a4842036d8d3 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2117,7 +2117,7 @@ finish_alignof (t) if (processing_template_decl) return build_min_nt (ALIGNOF_EXPR, t); - return TYPE_P (t) ? c_alignof (t) : c_alignof_expr (t); + return TYPE_P (t) ? c_alignof (complete_type (t)) : c_alignof_expr (t); } /* Generate RTL for the statement T, and its substatements, and any diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 385e25c847f3..592de43a9530 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-10-29 Mark Mitchell + + * g++.dg/template/alignof1.C: New test. + 2002-10-28 Kaveh R. Ghazi * gcc.dg/20021014-1.c: Bypass errors on solaris2 and irix6. diff --git a/gcc/testsuite/g++.dg/template/alignof1.C b/gcc/testsuite/g++.dg/template/alignof1.C new file mode 100644 index 000000000000..50a32183cfc7 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/alignof1.C @@ -0,0 +1,13 @@ +template +int my_alignof() +{ + return __alignof__(T); +} + +template +struct X { }; + +int main() +{ + return my_alignof >(); +}