Jakub Jelinek
5c2f94b4f5
re PR c/48742 (Internal error in gimplify_expr)
...
PR c/48742
* c-typeck.c (build_binary_op): Don't wrap arguments if
int_operands is true.
* gcc.c-torture/compile/pr48742.c: New test.
From-SVN: r173011
2011-04-27 09:04:25 +02:00
Jason Merrill
a4bd198cee
re PR c++/42687 (The prevention of ADL with the help of parentheses doesn't work)
...
PR c++/42687
* parser.c (cp_parser_primary_expression): Set *idk to
CP_ID_KIND_NONE for a parenthesized identifier.
From-SVN: r173007
2011-04-27 01:17:20 -04:00
Jason Merrill
a0dc5e4ac9
ptree.c (cxx_print_type): Dump fullname.
...
* ptree.c (cxx_print_type) [TYPENAME_TYPE]: Dump fullname.
(cxx_print_identifier): Correct indentation.
From-SVN: r173006
2011-04-27 01:17:10 -04:00
Jason Merrill
36a9902dcd
* g++.dg/cpp0x/initlist48.C: New.
...
From-SVN: r173005
2011-04-27 01:17:01 -04:00
Ian Lance Taylor
6d69c02ecb
Use backend interface for struct types.
...
* go-gcc.cc (Gcc_backend::struct_type): Implement.
From-SVN: r173004
2011-04-27 00:49:54 +00:00
GCC Administrator
dcd83a8176
Daily bump.
...
From-SVN: r173002
2011-04-27 00:19:23 +00:00
Kaz Kojima
57a944d784
sh.c (sh_gimplify_va_arg_expr): Don't call targetm.calls.must_pass_in_stack for void type.
...
* config/sh/sh.c (sh_gimplify_va_arg_expr): Don't call
targetm.calls.must_pass_in_stack for void type.
From-SVN: r172991
2011-04-26 22:25:59 +00:00
Thomas Koenig
3a1fd30c8a
decl.c (gfc_match_end): Check that the block name starts with "block@".
...
2011-04-26 Thomas Koenig <tkoenig@gcc.gnu.org>
* decl.c (gfc_match_end): Check that the block name starts
with "block@".
* parse.c (gfc_build_block_ns): Make block names unique by
numbering them.
From-SVN: r172990
2011-04-26 22:07:11 +00:00
Jan Hubicka
898b892746
cgraphbuild.c (build_cgraph_edges): Update call of cgraph_create_edge and cgraph_create_indirect_edge.
...
* cgraphbuild.c (build_cgraph_edges): Update call
of cgraph_create_edge and cgraph_create_indirect_edge.
* cgraph.c (cgraph_create_edge_including_clones,
cgraph_create_edge_1, cgraph_allocate_init_indirect_info,
cgraph_update_edges_for_call_stmt_node): Do not take nest
argument; do not initialize call_stmt_size/time.
(dump_cgraph_node): Do not dump nest.
(cgraph_clone_edge): Do not take loop_nest argument;
do not propagate it; do not clone call_stmt_size/time.
(cgraph_clone_node): Likewise.
(cgraph_create_virtual_clone): Update.
* cgraph.h (struct cgraph_edge): Remove
call_stmt_size/call_stmt_time/loop_nest.
(cgraph_create_edge, cgraph_create_indirect_edge,
cgraph_create_edge_including_clones, cgraph_clone_node): Update
prototype.
* tree-emutls.c (gen_emutls_addr): Update.
* ipa-inline-transform.c (update_noncloned_frequencies): Do not handle
loop_nest; handle indirect calls, too.
(clone_inlined_nodes): Do not care about updating inline summaries.
* cgraphunit.c (cgraph_copy_node_for_versioning): Update.
* lto-cgraph.c (lto_output_edge, input_node, input_edge): Do not
stream call_stmt_size/call_stmt_time/loop_nest.
* ipa-inline.c (edge_badness): Update.
(ipa_inline): dump summaries after inlining.
* ipa-inline.h (struct inline_edge_summary, inline_edge_summary_t):
new.
(inline_edge_summary): New function.
* ipa-inline-analysis.c (edge_duplication_hook_holder): New holder.
(inline_edge_removal_hook): Handle edge summaries.
(inline_edge_duplication_hook): New hook.
(inline_summary_alloc): Alloc hooks.
(initialize_growth_caches): Do not register removal hooks.
(free_growth_caches); Do not free removal hook.
(dump_inline_edge_summary): New function.
(dump_inline_summary): Use it.
(estimate_function_body_sizes, estimate_edge_size_and_time): Update.
(inline_update_callee_summaries): New function.
(inline_merge_summary): Use it.
(do_estimate_edge_time, do_estimate_edge_growth): Update.
(read_inline_edge_summary): New function.
(inline_read_section): Use it.
(write_inline_edge_summary): New function.
(inline_write_summary): Use it.
(inline_free_summary): Free edge new holders.
* tree-inline.c (copy_bb): Update.
From-SVN: r172989
2011-04-26 22:05:50 +00:00
Jason Merrill
ffa037724f
tree-eh.c (lower_try_finally_switch): Create the label along with the CASE_LABEL_EXPR.
...
* tree-eh.c (lower_try_finally_switch): Create the label along with
the CASE_LABEL_EXPR.
From-SVN: r172988
2011-04-26 21:22:55 +00:00
Jason Merrill
3982d356b2
objc-act.c (objc_fold_objc_type_ref): Remove.
...
* objc-act.c (objc_fold_objc_type_ref): Remove.
* objc-act.h: Remove prototype.
From-SVN: r172986
2011-04-26 17:12:57 -04:00
Jason Merrill
574cfaa47d
re PR c++/48530 ([C++0x][SFINAE] Hard errors with deleted d'tors)
...
PR c++/48530
* decl.c (cxx_maybe_build_cleanup): Add complain parm.
* tree.c (force_target_expr): Add complain parm.
(build_target_expr_with_type): Likewise.
(get_target_expr_sfinae): Split out.
(build_vec_init_expr, bot_manip): Adjust.
* init.c (build_vec_delete, build_vec_delete_1): Add complain parm.
(build_delete, build_dtor_call): Likewise.
(perform_direct_initialization_if_possible): Adjust.
(build_vec_init): Handle error return.
* cvt.c (force_rvalue): Add complain parm.
Call build_special_member_call directly.
* decl2.c (delete_sanity): Add complain parm.
(build_cleanup): Adjust.
* pt.c (tsubst_copy_and_build, tsubst_expr): Adjust.
* semantics.c (finish_stmt_expr_expr): Adjust.
(finish_compound_literal): Adjust.
* parser.c (cp_parser_delete_expression): Adjust.
* typeck2.c (build_functional_cast): Adjust.
* cp-tree.h: Adjust.
From-SVN: r172985
2011-04-26 15:28:25 -04:00
Thomas Koenig
5a87ca71c8
frontend-passes.c (inserted_block): New variable.
...
2011-04-26 Thomas Koenig <tkoenig@gcc.gnu.org>
* frontend-passes.c (inserted_block): New variable.
(changed_statement): Likewise.
(create_var): Encase statement to be operated on in a BLOCK.
Adjust code insertion for BLOCK.
(cfe_code): Set inserted_block and changed_statement to NULL.
From-SVN: r172983
2011-04-26 18:39:55 +00:00
David S. Miller
6d7b45ad64
configure.ac (gcc_cv_as_sparc_gotdata_op): Specify alignment.
...
2011-04-26 David S. Miller <davem@davemloft.net>
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* configure.ac (gcc_cv_as_sparc_gotdata_op): Specify alignment.
* configure: Regenerate.
Co-Authored-By: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
From-SVN: r172982
2011-04-26 18:29:11 +00:00
Michael Meissner
df10b6d444
PR target/48258, improve vector reduction on power7
...
From-SVN: r172981
2011-04-26 17:48:29 +00:00
Joseph Myers
35a5db0448
fr30.h (inhibit_libc): Don't define.
...
* config/fr30/fr30.h (inhibit_libc): Don't define.
* config/m32r/m32r-protos.h: Correct comment.
* config/v850/v850.h (GHS_default_section_names,
GHS_current_section_names): Use tree, not union tree_node *.
From-SVN: r172980
2011-04-26 17:35:51 +01:00
Rainer Orth
a14ce7d44d
Fixed gcc.dg/binop-xor[1-5].c filenames.
...
From-SVN: r172979
2011-04-26 16:18:04 +00:00
Xinliang David Li
2f964ad6d4
Implement -Wno-maybe-uninitialized
...
From-SVN: r172978
2011-04-26 16:06:09 +00:00
Martin Jambor
86262bb186
class.c (cp_fold_obj_type_ref): Remove.
...
2011-04-26 Martin Jambor <mjambor@suse.cz>
* class.c (cp_fold_obj_type_ref): Remove.
* cp-tree.h (cp_fold_obj_type_ref): Remove declaration.
From-SVN: r172977
2011-04-26 17:49:22 +02:00
Rainer Orth
9c7bd91af7
iris6.h (LOCAL_LABEL_PREFIX): Don't test TARGET_NEWABI.
...
* config/mips/iris6.h (LOCAL_LABEL_PREFIX): Don't test
TARGET_NEWABI.
(WINT_TYPE_SIZE): Use INT_TYPE_SIZE.
(TARGET_OS_CPP_BUILTINS): Remove TARGET_IRIX6 guards.
From-SVN: r172976
2011-04-26 15:42:17 +00:00
Rainer Orth
c2f36e21b2
mips.h (DBX_OUTPUT_SOURCE_LINE): Remove.
...
* config/mips/mips.h (DBX_OUTPUT_SOURCE_LINE): Remove.
* config/mips/mips.opt (mmips-tfile): Remove.
* doc/install.texi (Specific, mips-*-*): Move mips-tfile,
mips-tdump reference to ...
(Specific, alpha*-dec-osf5.1): ... here.
Adapt for Tru64 UNIX.
* doc/trouble.texi (Cross-Compiler Problems): Replace MIPS
reference by Tru64 UNIX.
From-SVN: r172975
2011-04-26 15:33:10 +00:00
Joseph Myers
0921678355
* de.po: Update.
...
From-SVN: r172973
2011-04-26 15:56:51 +01:00
Jakub Jelinek
0c5f6539ad
re PR debug/48768 (ICE in get_expr_operands())
...
PR debug/48768
* tree-ssa.c (insert_debug_temp_for_var_def): If degenerate_phi_result
is error_mark_node, set value to NULL.
* gcc.dg/pr48768.c: New test.
From-SVN: r172968
2011-04-26 15:35:21 +02:00
Jakub Jelinek
2c9da85bf0
re PR tree-optimization/48734 (ICE in eliminate_redundant_comparison, at tree-ssa-reassoc.c:1321)
...
PR tree-optimization/48734
* tree-ssa-reassoc.c (eliminate_redundant_comparison): Give up
if return value from maybe_fold_*_comparsions isn't something
the code is prepared to handle.
* gcc.c-torture/compile/pr48734.c: New test.
From-SVN: r172967
2011-04-26 15:33:49 +02:00
Jakub Jelinek
ac6fdeacaf
re PR testsuite/48753 (FAIL: gcc.dg/tree-prof/val-prof-2.c)
...
PR testsuite/48753
* gcc.dg/tree-prof/val-prof-2.c: Adjust for 32-bit HWI.
From-SVN: r172966
2011-04-26 15:31:17 +02:00
Uros Bizjak
77fa1d54b9
predicates.md (ext_QIreg_operand): Remove extra mode check.
...
* config/i386/predicates.md (ext_QIreg_operand): Remove extra
mode check.
(ext_QIreg_nomode_operands): Remove.
* config/i386/i386.md (*anddi_1): Use ext_QIreg_operand.
(*andsi_1): Ditto.
(*andhi_1): Ditto.
From-SVN: r172965
2011-04-26 15:02:55 +02:00
Richard Guenther
e6e26e59a3
re PR c/48731 (regression: __attribute__((flatten)) produces error with function calling variadic functions)
...
2011-04-26 Richard Guenther <rguenther@suse.de>
PR tree-optimization/48731
* gcc.dg/torture/pr48731.c: New testcase.
From-SVN: r172964
2011-04-26 13:00:53 +00:00
Andrew Stubbs
0e2a6c2b23
arm.c (arm_gen_constant): Remove can_negate_initial.
...
2011-04-26 Andrew Stubbs <ams@codesourcery.com>
gcc/
* config/arm/arm.c (arm_gen_constant): Remove can_negate_initial.
From-SVN: r172962
2011-04-26 10:51:04 +00:00
Paolo Carlini
12e35602e8
2011-04-26 Paolo Carlini <paolo.carlini@oracle.com>
...
Tweak recent ChangeLog entry.
From-SVN: r172960
2011-04-26 10:34:44 +00:00
Richard Guenther
304dfbe364
re PR preprocessor/48248 (Wrong error message location when compiling preprocessed code)
...
2011-04-26 Richard Guenther <rguenther@suse.de>
PR preprocessor/48248
* c-ppoutput.c (maybe_print_line): Always optimize newlines
for output size with -P.
From-SVN: r172959
2011-04-26 10:14:34 +00:00
Richard Biener
e73a83fc7c
c-typeck.c (build_unary_op): Do not expand array-refs via pointer arithmetic.
...
2011-04-26 Richard Guenther <rguenther@suse.de>
* c-typeck.c (build_unary_op): Do not expand array-refs via
pointer arithmetic. Only adjust qualifiers for function types.
From-SVN: r172958
2011-04-26 10:12:34 +00:00
Richard Biener
961562d8d8
re PR tree-optimization/48694 (possible memory hog bug)
...
2011-04-26 Richard Guenther <rguenther@suse.de>
PR middle-end/48694
* tree.h (OEP_CONSTANT_ADDRESS_OF): New operand_equal_flag.
* fold-const.c (operand_equal_p): For TREE_CONSTANT ADDR_EXPRs
compare the operands with OEP_CONSTANT_ADDRESS_OF. Treat
trees with TREE_SIDE_EFFECTS equal when OEP_CONSTANT_ADDRESS_OF
is set.
* gcc.dg/torture/pr48694-1.c: New testcase.
* gcc.dg/torture/pr48694-2.c: Likewise.
From-SVN: r172957
2011-04-26 10:12:14 +00:00
Richard Guenther
ce3ba3827f
re PR testsuite/48753 (FAIL: gcc.dg/tree-prof/val-prof-2.c)
...
2011-04-26 Richard Guenther <rguenther@suse.de>
PR testsuite/48753
* gcc.dg/tree-prof/val-prof-2.c: Adjust.
From-SVN: r172955
2011-04-26 10:03:12 +00:00
Richard Guenther
ad0e2567d6
re PR tree-optimization/48694 (possible memory hog bug)
...
2011-04-26 Richard Guenther <rguenther@suse.de>
PR middle-end/48694
* tree.h (OEP_CONSTANT_ADDRESS_OF): New operand_equal_flag.
* fold-const.c (operand_equal_p): For TREE_CONSTANT ADDR_EXPRs
compare the operands with OEP_CONSTANT_ADDRESS_OF. Treat
trees with TREE_SIDE_EFFECTS equal when OEP_CONSTANT_ADDRESS_OF
is set.
* gcc.dg/torture/pr48694-1.c: New testcase.
* gcc.dg/torture/pr48694-2.c: Likewise.
From-SVN: r172954
2011-04-26 09:21:44 +00:00
GCC Administrator
0d467c0bf2
Daily bump.
...
From-SVN: r172950
2011-04-26 00:19:11 +00:00
Paolo Carlini
74e883ce8c
c-common.c (struct c_common_resword): Add __underlying_type.
...
/gcc
2011-04-25 Paolo Carlini <paolo.carlini@oracle.com>
* c-family/c-common.c (struct c_common_resword): Add
__underlying_type.
* c-family/c-common.h (enum rid): Add RID_UNDERLYING_TYPE.
* doc/extend.texi: Document __underlying_type.
/cp
2011-04-25 Paolo Carlini <paolo.carlini@oracle.com>
* cp-tree.def: Add a new UNDERLYING_TYPE tree code.
* cp-tree.h (enum cp_trait_kind): Add CPTK_UNDERLYING_TYPE, tidy.
(UNDERLYING_TYPE_TYPE): Add.
* cp-objcp-common.c (cp_common_init_ts): Mark UNDERLYING_TYPE
as TS_COMMON.
* parser.c (cp_lexer_next_token_is_decl_specifier_keyword,
cp_parser_simple_type_specifier): Handle UNDERLYING_TYPE.
(cp_parser_trait_expr): Deal with RID_UNDERLYING_TYPE; tidy.
* semantics.c (finish_underlying_type): New.
* typeck.c (structural_comptypes): Handle UNDERLYING_TYPE.
* error.c (dump_type, dump_type_prefix, dump_type_suffix): Likewise.
* cxx-pretty-print.c (p_cxx_type_id): Likewise.
* tree.c (cp_walk_subtrees): Likewise.
* pt.c (for_each_template_parm_r, tsubst, unify,
dependent_type_p_r): Likewise.
* mangle.c (write_type): Sorry for __underlying_type.
/testsuite
2011-04-25 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/ext/underlying_type1.C: New.
* g++.dg/ext/underlying_type2.C: Likewise.
* g++.dg/ext/underlying_type3.C: Likewise.
* g++.dg/ext/underlying_type4.C: Likewise.
* g++.dg/ext/underlying_type5.C: Likewise.
* g++.dg/ext/underlying_type6.C: Likewise.
* g++.dg/ext/underlying_type7.C: Likewise.
* g++.dg/ext/underlying_type8.C: Likewise.
* g++.dg/ext/underlying_type9.C: Likewise.
* g++.dg/ext/underlying_type10.C: Likewise.
From-SVN: r172945
2011-04-25 23:50:35 +00:00
Paolo Carlini
a47407f631
type_traits (struct underlying_type): Add.
...
2011-04-25 Paolo Carlini <paolo.carlini@oracle.com>
* include/std/type_traits (struct underlying_type): Add.
* testsuite/20_util/underlying_type/requirements/typedefs-1.cc: New.
* testsuite/20_util/underlying_type/requirements/typedefs-2.cc:
Likewise.
* testsuite/20_util/underlying_type/requirements/
explicit_instantiation.cc: Likewise.
* testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error
line number.
From-SVN: r172944
2011-04-25 23:04:16 +00:00
Paolo Carlini
a0d260fcc5
c-common.c (struct c_common_resword): Add __underlying_type.
...
/gcc
2011-04-25 Paolo Carlini <paolo.carlini@oracle.com>
* c-family/c-common.c (struct c_common_resword): Add
__underlying_type.
* c-family/c-common.h (enum rid): Add RID_UNDERLYING_TYPE.
/cp
2011-04-25 Paolo Carlini <paolo.carlini@oracle.com>
* cp-tree.def: Add a new UNDERLYING_TYPE tree code.
* cp-tree.h (enum cp_trait_kind): Add CPTK_UNDERLYING_TYPE, tidy.
(UNDERLYING_TYPE_TYPE): Add.
* cp-objcp-common.c (cp_common_init_ts): Mark UNDERLYING_TYPE
as TS_COMMON.
* parser.c (cp_lexer_next_token_is_decl_specifier_keyword,
cp_parser_simple_type_specifier): Handle UNDERLYING_TYPE.
(cp_parser_trait_expr): Deal with RID_UNDERLYING_TYPE; tidy.
* semantics.c (finish_underlying_type): New.
* typeck.c (structural_comptypes): Handle UNDERLYING_TYPE.
* error.c (dump_type, dump_type_prefix, dump_type_suffix): Likewise.
* cxx-pretty-print.c (p_cxx_type_id): Likewise.
* tree.c (cp_walk_subtrees): Likewise.
* pt.c (for_each_template_parm_r, tsubst, unify,
dependent_type_p_r): Likewise.
* mangle.c (write_type): Sorry for __underlying_type.
* doc/extend.texi: Document __underlying_type.
/testsuite
2011-04-25 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/ext/underlying_type1.C: New.
* g++.dg/ext/underlying_type2.C: Likewise.
* g++.dg/ext/underlying_type3.C: Likewise.
* g++.dg/ext/underlying_type4.C: Likewise.
* g++.dg/ext/underlying_type5.C: Likewise.
* g++.dg/ext/underlying_type6.C: Likewise.
* g++.dg/ext/underlying_type7.C: Likewise.
* g++.dg/ext/underlying_type8.C: Likewise.
* g++.dg/ext/underlying_type9.C: Likewise.
* g++.dg/ext/underlying_type10.C: Likewise.
From-SVN: r172943
2011-04-25 22:27:19 +00:00
Jason Merrill
d95f258e90
re PR c++/48707 ([c++0x] ICE initializing static const int)
...
PR c++/48707
* decl.c (type_dependent_init_p): New.
(cp_finish_decl): Check it.
* pt.c (any_type_dependent_elements_p): New.
* cp-tree.h: Declare it.
From-SVN: r172941
2011-04-25 17:51:33 -04:00
Segher Boessenkool
4d583bb9fc
titan.md (automata_option "progress"): Remove.
...
2011-04-25 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/titan.md (automata_option "progress"): Remove.
From-SVN: r172940
2011-04-25 22:00:02 +02:00
Jeff Law
f49ad34456
Typo in test
...
From-SVN: r172939
2011-04-25 13:59:46 -06:00
Jeff Law
1f3fcdc3a9
tree-vrp.c (identify_jump_threads): Handle GIMPLE_SWITCH too.
...
* tree-vrp.c (identify_jump_threads): Handle GIMPLE_SWITCH too.
* gcc.dg/tree-ssa/vrp56.c: new test.
From-SVN: r172938
2011-04-25 13:55:13 -06:00
Rainer Orth
328db4501e
* go.test/go-test.exp (go-set-goarch): Accept mips*-*-*.
...
From-SVN: r172937
2011-04-25 19:44:48 +00:00
Ian Lance Taylor
eb864be48f
libgo/time: Support Irix 6 location of zoneinfo files.
...
From-SVN: r172936
2011-04-25 19:42:33 +00:00
Ian Lance Taylor
9f3b1e6c60
libgo: Irix 6 patches.
...
From Rainer Orth.
From-SVN: r172935
2011-04-25 19:36:12 +00:00
Jan Kratochvil
e5b0dad8fd
ansidecl.h (ENUM_BITFIELD): New, from gcc/system.h.
...
include/
* ansidecl.h (ENUM_BITFIELD): New, from gcc/system.h.
contrib/
* paranoia.cc (ENUM_BITFIELD): Remove.
gcc/
* system.h (ENUM_BITFIELD): Remove.
libcpp/
* system.h (ENUM_BITFIELD): Remove.
From-SVN: r172933
2011-04-25 18:05:37 +00:00
Ian Lance Taylor
482829acf2
Use backend interface for function types.
...
Drop type_tree() functions for Float_type and Complex_type.
Don't define builtin functions until gogo is created.
* go-gcc.cc (Gcc_backend::error_type): Implement.
(Gcc_backend::string_type): Remove.
(Gcc_backend::function_type): Change signature and implement.
(Gcc_backend::struct_type): Change signature.
(Gcc_backend::slice_type, Gcc_backend::map_type): Remove.
(Gcc_backend::channel_type, Gcc_backend::interface_type): Remove.
(Gcc_backend::pointer_type): Check for error.
* Make-lang.in (go/types.o): Depend on go/gofrontend/backend.h.
From-SVN: r172932
2011-04-25 17:21:28 +00:00
Evan Shaw
0aa5e7f22a
Use backend interface for basic types
...
* go-gcc.c (class Gcc_tree): Make get_tree const.
(Gcc_backend::void_type): Implement.
(Gcc_backend::bool_type): Implement.
(Gcc_backend::integer_type): Implement.
(Gcc_backend::float_type): Implement.
(Gcc_backend::complex_type): New function.
(Gcc_backend::pointer_type): New function.
(Gcc_backend::make_type): New function.
(type_to_tree): New function.
From-SVN: r172931
2011-04-25 16:39:24 +00:00
Maxim Kuvyrkov
5157a881bb
combine.c (combine_simplify_rtx): Avoid mis-simplifying conditionals for STORE_FLAG_VALUE==-1 case.
...
* combine.c (combine_simplify_rtx): Avoid mis-simplifying conditionals
for STORE_FLAG_VALUE==-1 case.
Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com>
From-SVN: r172930
2011-04-25 12:06:27 +00:00
GCC Administrator
0c289711f3
Daily bump.
...
From-SVN: r172929
2011-04-25 00:18:21 +00:00