diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-01-07 12:10:53 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2013-01-07 12:10:53 +0100 |
commit | 6838c1371dea868b5f2ff44d279d3620bfbb6d9a (patch) | |
tree | ed809dda5007ff305c3a618bea6216aa7467a12f /gcc/fortran/expr.c | |
parent | a8c4c75a4a5062687fa08d1d6273cef4a0ce22fe (diff) | |
download | gcc-6838c1371dea868b5f2ff44d279d3620bfbb6d9a.zip gcc-6838c1371dea868b5f2ff44d279d3620bfbb6d9a.tar.gz gcc-6838c1371dea868b5f2ff44d279d3620bfbb6d9a.tar.bz2 |
re PR fortran/55852 (internal compiler error: in gfc_build_intrinsic_call, at fortran/expr.c:4647)
2013-01-07 Tobias Burnus <burnus@net-b.de>
Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/55852
* expr.c (gfc_build_intrinsic_call): Avoid clashes
with user's procedures.
* gfortran.h (gfc_build_intrinsic_call): Update prototype.
* simplify.c (gfc_simplify_size): Update call.
* class.c (finalization_scalarizer, finalization_get_offset,
finalizer_insert_packed_call, generate_finalization_wrapper):
Clean up by using gfc_build_intrinsic_call.
2013-01-07 Tobias Burnus <burnus@net-b.de>
PR fortran/55852
* gfortran.dg/intrinsic_size_3.f90: New.
Co-Authored-By: Thomas Koenig <tkoenig@gcc.gnu.org>
From-SVN: r194966
Diffstat (limited to 'gcc/fortran/expr.c')
-rw-r--r-- | gcc/fortran/expr.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 2610784..74a17eb 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -4622,28 +4622,34 @@ gfc_is_simply_contiguous (gfc_expr *expr, bool strict) want to add arguments but with a NULL-expression. */ gfc_expr* -gfc_build_intrinsic_call (const char* name, locus where, unsigned numarg, ...) +gfc_build_intrinsic_call (gfc_namespace *ns, gfc_isym_id id, const char* name, + locus where, unsigned numarg, ...) { gfc_expr* result; gfc_actual_arglist* atail; gfc_intrinsic_sym* isym; va_list ap; unsigned i; + const char *mangled_name = gfc_get_string (GFC_PREFIX ("%s"), name); - isym = gfc_find_function (name); + isym = gfc_intrinsic_function_by_id (id); gcc_assert (isym); result = gfc_get_expr (); result->expr_type = EXPR_FUNCTION; result->ts = isym->ts; result->where = where; - result->value.function.name = name; + result->value.function.name = mangled_name; result->value.function.isym = isym; - result->symtree = gfc_find_symtree (gfc_current_ns->sym_root, name); + gfc_get_sym_tree (mangled_name, ns, &result->symtree, false); + gfc_commit_symbol (result->symtree->n.sym); gcc_assert (result->symtree && (result->symtree->n.sym->attr.flavor == FL_PROCEDURE || result->symtree->n.sym->attr.flavor == FL_UNKNOWN)); + result->symtree->n.sym->intmod_sym_id = id; + result->symtree->n.sym->attr.flavor = FL_PROCEDURE; + result->symtree->n.sym->attr.intrinsic = 1; va_start (ap, numarg); atail = NULL; |