2016-05-29  Johannes Pfau  <johannespfau@gmail.com>

	* toir.cc (IRVisitor::visit(SwitchStatement)): Set correct type for the
	string table for switch(string) statements.

2016-05-24  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (convert_expr): Return empty constructor for null to
	associative array conversions.
	* expr.cc (ExprVisitor::visit(NullExp)): Likewise.

2016-05-21  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (build_struct_literal): Don't set TREE_STATIC.
	(build_boolop): Remove side effects from aggregate types only.
	* expr.cc (ExprVisitor::visit(ArrayLiteralExp)): Don't check
	initializer_constant_valid_p until after constructor is built.
	(ExprVisitor::visit(StructLiteralExp)): Likewise.

2016-05-16  Iain Buclaw  <ibuclaw@gdcproject.org>

	* expr.cc (ExprVisitor::visit(AssignExp)): Build the rhs constructor
	before the lhs declaration.
	(ExprVisitor::visit(DeclarationExp)): Compile the declaration and
	initializer before pushing it to vars_in_scope.
	(build_expr_dtor): Compound all dtors in reverse.

2016-05-16  Johannes Pfau  <johannespfau@gmail.com>

	* expr.cc (ExprVisitor::visit(IdentityExp*)): Remove side-effects
	before comparing two floating point types.
	* d-codegen.cc (build_struct_comparison): Remove side-effects
	before comparing two values.
	(build_boolop): Likewise.

2016-05-15  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-todt.cc (Expression::toDt): Remove function and all overrides.
	Update all callers to use build_expr.
	* expr.cc (ExprVisitor::visit(SymOffExp)): Move check for non-constant
	expressions in static initializer data to ...
	(build_expr): ... here.
	* toir.cc (IRVisitor::visit(SwitchStatement)): Build array of indexes
	directly using build_artificial_decl.

2016-05-15  Iain Buclaw  <ibuclaw@gdcproject.org>

	* expr.cc (ExprVisitor::visit(IdentityExp*)): Remove side-effects
	before comparing two dynamic arrays.

2016-05-14  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (get_decl_tree): First check if cfun is set.
	* d-todt.cc (StructLiteralExp::toDt): Update call to build_expr.
	(SymOffExp::toDt): Likewise.
	(VarExp::toDt): Likewise.
	(FuncExp::toDt): Likewise.
	(VectorExp::toDt): Likewise.
	* expr.cc (ExprVisitor::visit(SymbolExp)): Remove function.
	(ExprVisitor::visit(SymOffExp)): New function.
	(ExprVisitor::visit(VarExp)): New function.
	(ExprVisitor::visit(StructLiteralExp)): Don't return static
	initializer symbol if constant literal requested.

2016-05-13  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (build_struct_literal): Maybe set TREE_CONSTANT or
	TREE_STATIC on the returned constructor.
	Allow building struct literals with initializer list out of order.
	Add check and error when initializer overlaps previous field.
	Don't explicitly set empty initializers for anonymous aggregates or
	artificial fields.

2016-05-12  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (build_array_from_val): New function.
	* expr.cc (ExprVisitor::visit(StructLiteralExp)): Use it.

2016-05-11  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (convert_expr): Use build_nop to cast between two
	static arrays of the same size.
	* d-todt.cc (IntegerExp::toDt): Update call to build_expr.
	(RealExp::toDt): Likewise.
	(ComplexExp::toDt): Likewise.
	(StringExp::toDt): Likewise.
	(NullExp::toDt): Use build_expr to generate initializer.
	(ArrayLiteralExp::toDt): Likewise.
	(CastExp::toDt): Likewise.
	(ClassReferenceExp::toDt): Likewise.
	(ClassReferenceExp::toDtI): Remove function.
	* expr.cc (ExprVisitor::visit(CastExp)): Forward constp to the next
	leaf expression in the tree.
	(ExprVisitor::visit(AddrExp)): Likewise.
	(ExprVisitor::visit(FuncExp)): Likewise.
	(ExprVisitor::visit(ArrayLiteralExp)): Likewise.
	(ExprVisitor::visit(StructLiteralExp)): Likewise.
	(ExprVisitor::visit(VectorExp)): Likewise.
	(ExprVisitor::visit(ClassReferenceExp)): Adjust reference for constp.

2016-05-09  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-objfile.cc (get_unique_name): Remove function.
	(build_artificial_decl): New function.
	(d_finish_symbol): Use build_artificial_decl.
	(build_moduleinfo): Likewise.
	* d-decls.cc (StructLiteralExp::toSymbol): Likewise.
	(ClassReferenceExp::toSymbol): Likewise.

2016-05-07  Iain Buclaw  <ibuclaw@gdcproject.org>

	* expr.cc (ExprVisitor::visit(BinExp)): New function.
	(ExprVisitor::visit(XorExp)): Remove function.
	(ExprVisitor::visit(OrExp)): Likewise.
	(ExprVisitor::visit(AndExp)): Likewise.
	(ExprVisitor::visit(UshrExp)): Likewise.
	(ExprVisitor::visit(ShrExp)): Likewise.
	(ExprVisitor::visit(ShlExp)): Likewise.
	(ExprVisitor::visit(ModExp)): Likewise.
	(ExprVisitor::visit(DivExp)): Likewise.
	(ExprVisitor::visit(MulExp)): Likewise.
	(ExprVisitor::visit(MinExp)): Likewise.
	(ExprVisitor::visit(AddExp)): Likewise.
	(ExprVisitor::visit(BinAssignExp)): New function.
	(ExprVisitor::visit(XorAssignExp)): Remove function.
	(ExprVisitor::visit(OrAssignExp)): Likewise.
	(ExprVisitor::visit(AndAssignExp)): Likewise.
	(ExprVisitor::visit(ShrAssignExp)): Likewise.
	(ExprVisitor::visit(ShlAssignExp)): Likewise.
	(ExprVisitor::visit(ModAssignExp)): Likewise.
	(ExprVisitor::visit(DivAssignExp)): Likewise.
	(ExprVisitor::visit(MulAssignExp)): Likewise.
	(ExprVisitor::visit(PowAssignExp)): Likewise.
	(ExprVisitor::visit(MinAssignExp)): Likewise.
	(ExprVisitor::visit(AddAssignExp)): Likewise.

2016-05-06  Iain Buclaw  <ibuclaw@gdcproject.org>

	* expr.cc (ExprVisitor::ExprVisitor): Update signature.
	(ExprVisitor::visit(AddrExp)): Handle constant expressions.
	(ExprVisitor::visit(FuncExp)): Likewise.
	(ExprVisitor::visit(ComplexExp)): Likewise.
	(ExprVisitor::visit(StringExp)): Likewise.
	(ExprVisitor::visit(ArrayLiteralExp)): Likewise.
	(ExprVisitor::visit(StructLiteralExp)): Likewise.
	(ExprVisitor::visit(NullExp)): Likewise.
	(ExprVisitor::visit(ClassReferenceExp)): Likewise.
	(build_expr): Update signature.

2016-05-05  Iain Buclaw  <ibuclaw@gdcproject.org>

	* Make-lang.in (D_GLUE_OBJS): Add d/expr.o.
	Remove d/d-elem.o
	* d-codegen.cc (size_mult_expr): New function.
	* d-tree.h (build_expr): New function, update all callers to toElem.
	(build_expr_dtor): New function, update all callers to toElemDtor.
	* expr.cc: New file.
	* d-elem.cc: Remove file.

2016-05-03  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-target.cc (Target::init): Target::realpad value should be size
	minus precision.

2016-04-29  Iain Buclaw  <ibuclaw@gdcproject.org>

       * d-todt.cc (TypeSArray::toDtElem): Remove special handling for
       arrays of vectors.

2016-04-23  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-builtins.cc (build_dtype): Make function static.
	* d-lang.cc (d_init_exceptions): Remove function.
	* d-codegen.h: Move visitor declarations to ...
	* d-tree.h: ... here.
	(lang_decl): Remove `d_` prefix from fields.
	(lang_type): Likewise.
	* d-lang.cc (build_d_type_lang_specific): Rename to build_lang_type.
	(build_d_decl_lang_specific): Rename to build_lang_decl.
	* imports.cc: Update includes.

2016-03-29  Johannes Pfau  <johannespfau@gmail.com>

	* d-objfile.cc (d_comdat_linkage): Rewrite template duplicate
	handling to generate only one backend tree for all duplicates.
	(FuncDeclaration::toObjFile): Likewise.
	(VarDeclaration::toObjFile): Likewise.
	* d-decls.cc (FuncDeclaration::toSymbol): Likewise.
	(VarDeclaration::toSymbol): Likewise.
	* d-objfile.cc (get_template_storage_info): Extract function from
	setup_symbol_storage.
	(setup_symbol_storage): Likewise.
	* d-tree.h (lang_identifier): Add field for Dsymbol.
	(IDENTIFIER_LANG_SPECIFIC): New macro.
	(IDENTIFIER_DSYMBOL): Likewise.

2016-03-29  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (fill_alignment_field): Call layout_decl on field.
	(finish_aggregate_type): Add assertion that TYPE_MODE is equal.

2016-03-29  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (convert_expr): Replace call build_integer_cst with
	size_int.
	(convert_for_assignment): Likewise.
	(build_struct_comparison): Likewise.
	(d_assert_call): Likewise.
	* d-elem.cc (IdentityExp::toElem): Likewise.
	(AssignExp::toElem): Likewise.
	(IndexExp::toElem): Likewise.
	(SymbolExp::toElem): Likewise.
	(NewExp::toElem): Likewise.
	(ArrayLiteralExp::toElem): Likewise.
	(AssocArrayLiteralExp::toElem): Likewise.

2016-03-28  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-tree.h (CLASS_TYPE_P): New macro.
	* d-codegen.cc (build_struct_literal): Check RECORD_OR_UNION_TYPE_P
	before testing ANON_AGGR_TYPE_P.
	(fill_alignment_field): New function.
	(fill_alignment_holes): New function.
	(finish_aggregate_type): Call fill_alignment_holes before computing
	backend type mode.

2016-03-28  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-tree.h (D_METHOD_CALL_EXPR): Removed `D_' prefix from macro,
	updated all callers.
	(D_TYPE_IMAGINARY_FLOAT): Likewise.
	(D_LABEL_VARIABLE_CASE): Likewise.
	* d-codegen.cc (build_delegate_cst): Always return valid constructor.
	(get_object_method): Remove function.
	(build_vindex_ref): New function.
	* d-elem.cc (FuncExp::toElem): Use the real function pointer type when
	converting to delegate.
	(CallExp::toElem): Handle setting up virtual functions directly.
	(DelegateExp::toElem): Likewise.
	(DotVarExp::toElem): Remove handling of virtual functions.

2016-03-28  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.h (lang_dtype): Remove function.
	(lang_ddecl): Remove function.
	* d-tree.h (TYPE_LANG_FRONTEND): New macro, replace all uses of
	lang_dtype function.
	(DECL_LANG_FRONTEND): New macro.
	* d-attribs.c: Update includes.
	* d-builtins.cc: Likewise.
	* d-codegen.cc: Likewise.
	* d-incpath.cc: Likewise.
	* d-lang.cc: Likewise.
	* d-objfile.cc: Likewise.

2016-03-27  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.h (function_type_p): Remove function.
	* d-codegen.cc (d_build_call): Use FUNC_OR_METHOD_P macro.
	(build_bounds_condition): Update signature.
	(d_assert_call): Likewise.
	(insert_aggregate_field): Likewise.
	* d-objfile.cc (get_linemap): Likewise.
	* d-lang.h: Remove file, updated all includes.  Moved forward
	declarations of types and functions to ...
	* d-tree.h: ... here.

2016-03-20  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (d_checked_index): Remove function.
	(d_bounds_condition): Remove function.
	(build_bounds_condition): New function.
	* d-elem.cc (IndexExp::toElem): Use build_bounds_condition.
	(SliceExp::toElem): Likewise.
	(EqualExp::toElem): Convert expressions to dynamic arrays when
	inlining comparison.  Don't pass zero length arrays to memcmp.

2016-03-19  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (d_array_convert): New function overload.
	* d-elem.cc (CatExp::toElem): Call new runtime function _d_arraycatnTX
	when flattening multiple concatenations.
	(NewExp::toElem): Update call construction for new signatures of
	runtime functions _d_newarraymTX and _d_newarraymiTX.
	* runtime.def (NEWARRAYMTX): Update signature.
	(NEWARRAYMITX): Likewise,
	(ARRAYCATNT): Remove runtime function.
	(ARRAYCATNTX): New runtime function.

2016-03-07  Iain Buclaw  <ibuclaw@gdcproject.org>

	* imports.cc (ImportVisitor::visit(Declaration)): Don't assume toSymbol
	method will cache it's result.

2016-03-06  Iain Buclaw  <ibuclaw@gdcproject.org>

	* dfrontend: Update root library to 2.068.
	* Make-lang.in (D_DMD_OBJS): Add newdelete.o
	* d-target.cc (Target::classinfosize): New variable, replaces all uses
	of global CLASSINFO_SIZE.
	(Target::init): Initialize it.
	* d-decls.cc (ClassInfoDeclaration::toSymbol): Remove function.

2016-03-05  Iain Buclaw  <ibuclaw@gdcproject.org>

	* dfrontend: Update to D front-end version 2.067.
	* Make-lang.in (D_DMD_OBJS): Add new frontend sources.
	* d-builtins.cc (d_build_builtins_module): Update signature.
	(maybe_set_builtin): Rename to d_maybe_set_builtin, update signature.
	(d_gcc_magic_module): Remove function.
	* d-codegen.cc (expand_volatile_load): New function.
	(expand_volatile_store): New function.
	(expand_intrinsic): Handle volatileLoad and volatileStore intrinsics.
	* d-decls.cc (Module::toModuleAssert): Remove function.
	(Module::toModuleUnittest): Remove function.
	(Module::toModuleArray): Remove function.
	(TypeAArray::aaGetSymbol): Remove function.
	* d-elem.cc (AssignExp::toElem): Call _d_arrayassign_{l,r} when
	generating dynamic array assignment.
	(IndexExp::toElem): Call _aaGetY when indexing an associative array.
	(SliceExp::toElem): Use known CTFE result to check whether bounds
	checks are necessary.
	(DeleteExp::toElem): Call _d_delstruct when deleting a struct pointer.
	(Expression::toElemDtor): Don't run cleanup of temporary if it's
	constructor thrown an exception.
	(NewExp::toElem): Handle special construction of new() arguments.
	* d-glue.cc (Loc::Loc): Update signature.
	(error): Likewise.
	(toInitializer): New function.
	* d-lang.cc (d_handle_option): Replace deprecated handlers.
	(d_post_options): Set flag_max_errors.
	(d_parse_file): Process any modules marked as builtin.
	* d-objfile.cc (ClassDeclaration::toObjFile): Don't write out ctors
	in the vtable marked @disable.
	* d-target.cc (Target::loadModule): New function.
	(Target::checkVectorType): New function.
	* d-specs.c (lang_specific_driver): Handle -v option.
	* lang-specs.h: Pass -v option to to frontend.

2016-03-04  Iain Buclaw  <ibuclaw@gdcproject.org>

	* imports.cc: New file.
	* d-decls.cc (Dsymbol::toImport): Remove function, update all callers
	to use build_import_decl.

2016-03-03  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-objfile.cc (gcc_attribute_p): New function.
	(output_declaration_p): Inline into FuncDeclaration::ObjFile.
	(unnest_function): Likewise.
	(FuncDeclaration::toObjFile): Remove named parameter, update all
	callers to ignore it.
	(d_comdat_group): Use DECL_ASSEMBLER_NAME for the comdat group.
	(d_comdat_linkage): Catch duplicate instantiations of templates, put
	them in the same comdat group.
	(setup_symbol_storage): Mark templates not to be written as abstract.
	(d_finish_function): Don't send DECL_ABSTRACT_P functions to backend.
	(d_finish_compilation): Mark all symbols as needed.

	* d-objfile.cc: Remove redundant bool parameter from all lowering
	routines for symbols, update all callers.

2016-02-20  Iain Buclaw  <ibuclaw@gdcproject.org>

	* intrinsics.def: Split signature macros into three groups.
	Attributes, types, and helper generators.
	* d-elem.cc (needsPostblit): Change signature to return boolean,
	updated all callers.
	(AssignExp::toElem): Don't assign destination to a temporary in
	arraycopy call.
	* toir.cc (IRVisior::visit(ThrowStatement)): Use NOP_EXPR cast to
	convert thrown exception to Object.
	(IRVisitor::visit(TryCatchStatement)): Use NOP_EXPR cast to convert
	caught Object to thrown exception.
	* d-codegen.cc (void_okay_p): Lazily build the convert to type.
	* d-lang.cc (parse_int): Remove function.
	(d_handle_option): Use integral_argument to parse numbers.

	* d-codegen.cc (lower_struct_comparison): Built custom type if
	lang_hooks.types.type_for_mode returns nothing.
	* d-lang.cc (d_type_for_mode): Always support cent/ucent modes.
	(d_type_for_size): Add support for cent/ucent precision types.
	(d_signed_or_unsigned_type): Always support cent/ucent precisions.

	* d-codegen.cc (d_build_call): Remove type promotion handling for
	variadic arguments.
	(expand_intrinsic_vaarg): Likewise.
	* d-lang.cc (d_type_promotes_to): Likewise.

	* d-elem.cc (AddrExp::toElem): Take address of the static const symbol
	for the struct literal,  not the const constructor.
	(CallExp::toElem): Don't pass generated static struct literal symbol
	as the object parameter for DotVar call expressions.

	* d-codegen.cc (type_va_array): New function.
	(declaration_type_kind): Remove function.
	(declaration_reference_p): New function, update all callers of
	declaration_type_kind.
	(argument_type_kind): Remove function.
	(argument_reference_p): New function, update all callers of
	argument_type_kind.
	(build_address): Remove special handling of static array va_list.
	* d-codegen.h (type_kind): Remove enum.

2016-02-18  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (build_condition): New function.  Update all callers
	that generate a COND_EXPR that returns a value to use it.
	(build_vcondition): New function.  Update all callers that generate a
	void COND_EXPR to use it.
	* toir.cc (IRVisitor::visit(DoStatement)): Build a COND_EXPR instead
	of an EXIT_EXPR to break from the loop.
	(IRVisitor::visit(ForStatement)): Likewise.

2016-02-14  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-elem.cc: Remove redundant IRState parameter from all lowering
	routines for expressions, update all callers.

2016-02-07  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (build_array_set): Use POSTINCREMENT_EXPR to adjust
	array pointer.
	(identity_compare_p): New function.
	(build_struct_memcmp): Refactor into ...
	(lower_struct_comparison): ... New function.
	(build_struct_comparison): New function.
	(build_array_struct_comparison): New function.
	* d-elem.cc (IdentityExp::toElem): Use build_struct_comparison for
	RECORD_TYPE values.
	(EqualExp::toElem): Likewise.
	Use memcmp for array of structs that pass test for identity_compare_p,
	or fallback to build_array_struct_comparison.
	(NewExp::toElem): Remove setting of StructLiteralExp::fillHoles.
	(StructLiteralExp::toElem): Ignore StructLiteralExp::fillHoles, unless
	building a union literal.

2016-02-03  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-elem.cc (AssignExp::toElem): Pass parameters for arraycopy and
	arrayassign in the correct order.

2016-01-31  Iain Buclaw  <ibuclaw@gdcproject.org>

	* longdouble.h (longdouble): Use one contiguous array for the
	real_value data payload.

2016-01-23  Iain Buclaw  <ibuclaw@gdcproject.org>

	* toir.cc (IRVisitor::visit (ExtAsmStatement): Do validation of input
	and output constraints, marking operands as addressable if requested.

2016-01-10  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (empty_aggregate_p): New function.
	(d_build_call): Don't pass empty aggregates by value.
	(build_struct_memcmp): Don't compare empty aggregates by value.
	* d-elem.cc (IdentityExp::toElem): Likewise.
	(EqualExp::toElem): Likewise.
	* (StructLiteralExp::toElem): Don't create temporaries or initialize
	holes for empty	aggregates.
	* d-lang.cc (empty_modify_p): New function.
	(d_gimplify_expr): Remove assignments that involve empty aggregates.

2016-01-09  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-builtins.cc (d_builtin_type): Define DEF_FUNCTION_TYPE_9,
	DEF_FUNCTION_TYPE_10, and DEF_FUNCTION_TYPE_11.
	(d_init_builtins): Likewise.
	* d-longdouble.cc (machineMode): Remove function.
	(longdouble::init): Don't use initialize real format by reference.
	(longdouble::operator+): Use real_arithmetic instead of
	REAL_ARITHMETIC.
	(longdouble::operator-): Likewise.
	(longdouble::operator*): Likewise.
	(longdouble::operator/): Likewise.
	(longdouble::operator%): Likewise.
	* d-port.cc (Port::isSignallingNan): Use REAL_VALUE_ISSIGNALING_NAN.
	(Port::fequal): Use real_identical instead of REAL_VALUES_IDENTICAL.
	* d-target.cc: Include stor-layout.h header.
	* lang.opt: Remove documentation for switches defined elsewhere.

2016-01-09  Iain Buclaw  <ibuclaw@gdcproject.org>

	* d-codegen.cc (get_libcall): Use set_call_expr_flags to apply runtime
	function attributes.
	* d-codegen.h (LibCallFlag): Remove type.
	* runtime.def: Replace LibCallFlag with ECF everywhere.


Copyright (C) 2016 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
