[PATCH] PR fortran/100949 - [9/10/11/12 Regression] ICE in gfc_conv_expr_present, at fortran/trans-expr.c:1975

2021-07-13 Thread Harald Anlauf via Fortran
Hello world,

we rather shouldn't consider a presence check for a non-dummy variable.

Regtested on x86_64-pc-linux-gnu.  OK for all affected branches?

Thanks,
Harald


Fortran - ICE in gfc_conv_expr_present while initializing a non-dummy
class variable

gcc/fortran/ChangeLog:

PR fortran/100949
* trans-expr.c (gfc_trans_class_init_assign): Call
gfc_conv_expr_present only for dummy variables.

gcc/testsuite/ChangeLog:

PR fortran/100949
* gfortran.dg/pr100949.f90: New test.

diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index de406ad2e8f..9e0dcdefd25 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -1741,8 +1741,9 @@ gfc_trans_class_init_assign (gfc_code *code)
 	}
 }

-  if (code->expr1->symtree->n.sym->attr.optional
-  || code->expr1->symtree->n.sym->ns->proc_name->attr.entry_master)
+  if (code->expr1->symtree->n.sym->attr.dummy
+  && (code->expr1->symtree->n.sym->attr.optional
+	  || code->expr1->symtree->n.sym->ns->proc_name->attr.entry_master))
 {
   tree present = gfc_conv_expr_present (code->expr1->symtree->n.sym);
   tmp = build3_loc (input_location, COND_EXPR, TREE_TYPE (tmp),
diff --git a/gcc/testsuite/gfortran.dg/pr100949.f90 b/gcc/testsuite/gfortran.dg/pr100949.f90
new file mode 100644
index 000..6c736fd7f72
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr100949.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! PR fortran/100949 - ICE in gfc_conv_expr_present, at fortran/trans-expr.c:1975
+
+subroutine s
+entry f
+  type t
+  end type
+  class(t), allocatable :: y, z
+  allocate (z, mold=y)
+end


[PATCH 0/3] [PR libfortran/101305] Bind(C): Fix kind/size mappings

2021-07-13 Thread Sandra Loosemore
This set of patches is for PR libfortran/101305, about bugs in
ISO_Fortran_binding.h's type kind/size encodings, and also incorrect
kind/size mappings in CFI_establish.  For instance,
ISO_Fortran_binding.h had hard-wired encodings that ptrdiff_t and long
are 8 bytes that are clearly incorrect on a 32-bit target, and other
encodings like CFI_type_int_fast8_t and CFI_type_long_double were
incorrect on some 64-bit targets too.  So part of this patch involves
using sizeof in the CFI_type_* macro definitions, instead of literal
constants.

Another difficulty is that the 2018 Fortran standard requires that the
CFI_type_* macros for C types not supported by the Fortran processor
have negative values.  Tobias contributed some scripting to check for
that; now ISO_Fortran_binding.h is generated at build time from
fragments in the libgfortran source directory.

The remaining parts of the patch fix up related bugs in CFI_establish
for types whose size isn't directly encoded in the corresponding
CFI_type_* macro, and adjust include paths for ISO_Fortran_binding.h
in the test suite.

Jose has posted a patch that fixes some additional bugs in type/size encodings
in descriptors passed to and from C:

https://gcc.gnu.org/pipermail/fortran/2021-June/056154.html

and there remains a messy bug (PR fortran/100917) relating to
ambiguity in handling long double on some targets -- specifically, on
x86_64 targets that have both 80-bit long doubles with a storage size
of 16 and a true 128-bit floating-point format, the GFC descriptor
representation can't tell them apart.

I tested these patches on i686-pc-linux-gnu with both -m32 and -m64
multilibs.

Sandra Loosemore (3):
  [PR libfortran/101305] Bind(C): Fix type encodings in
ISO_Fortran_binding.h
  [PR libfortran/101305] Bind(C): Correct sizes of some types in
CFI_establish
  [PR libfortran/101305] Fix ISO_Fortran_binding.h paths in gfortran
testsuite

 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c  |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.c |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.c |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.c |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_16.c |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.c |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_18.c |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_3.c  |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_5.c  |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_6.c  |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_7.c  |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_8.c  |   2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_9.c  |   2 +-
 .../gfortran.dg/bind_c_array_params_3_aux.c|   2 +-
 .../iso_fortran_binding_uint8_array_driver.c   |   2 +-
 gcc/testsuite/gfortran.dg/pr93524.c|   2 +-
 libgfortran/ISO_Fortran_binding-1-tmpl.h   | 196 
 libgfortran/ISO_Fortran_binding-2-tmpl.h   |  42 +
 libgfortran/ISO_Fortran_binding-3-tmpl.h   |   5 +
 libgfortran/ISO_Fortran_binding.h  | 206 -
 libgfortran/Makefile.am|  15 +-
 libgfortran/Makefile.in|  16 +-
 libgfortran/mk-kinds-h.sh  |  25 ++-
 libgfortran/runtime/ISO_Fortran_binding.c  |  21 ++-
 25 files changed, 319 insertions(+), 241 deletions(-)
 create mode 100644 libgfortran/ISO_Fortran_binding-1-tmpl.h
 create mode 100644 libgfortran/ISO_Fortran_binding-2-tmpl.h
 create mode 100644 libgfortran/ISO_Fortran_binding-3-tmpl.h
 delete mode 100644 libgfortran/ISO_Fortran_binding.h

-- 
2.8.1



[PATCH 2/3] [PR libfortran/101305] Bind(C): Correct sizes of some types in CFI_establish

2021-07-13 Thread Sandra Loosemore
CFI_establish was failing to set the default elem_len correctly for
CFI_type_cptr, CFI_type_cfunptr, CFI_type_long_double, and
CFI_type_long_double_Complex.

2021-07-13  Sandra Loosemore  

libgfortran/
PR libfortran/101305
* runtime/ISO_Fortran_binding.c (CFI_establish): Special-case
CFI_type_cptr and CFI_type_cfunptr.  Correct size of long double
on targets where it has kind 10.
---
 libgfortran/runtime/ISO_Fortran_binding.c | 19 ++-
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/libgfortran/runtime/ISO_Fortran_binding.c 
b/libgfortran/runtime/ISO_Fortran_binding.c
index 28fa9f5..6b5f26c 100644
--- a/libgfortran/runtime/ISO_Fortran_binding.c
+++ b/libgfortran/runtime/ISO_Fortran_binding.c
@@ -341,9 +341,13 @@ int CFI_establish (CFI_cdesc_t *dv, void *base_addr, 
CFI_attribute_t attribute,
 
   dv->base_addr = base_addr;
 
-  if (type == CFI_type_char || type == CFI_type_ucs4_char ||
-  type == CFI_type_struct || type == CFI_type_other)
+  if (type == CFI_type_char || type == CFI_type_ucs4_char
+  || type == CFI_type_struct || type == CFI_type_other)
 dv->elem_len = elem_len;
+  else if (type == CFI_type_cptr)
+dv->elem_len = sizeof (void *);
+  else if (type == CFI_type_cfunptr)
+dv->elem_len = sizeof (void (*)(void));
   else
 {
   /* base_type describes the intrinsic type with kind parameter. */
@@ -351,16 +355,13 @@ int CFI_establish (CFI_cdesc_t *dv, void *base_addr, 
CFI_attribute_t attribute,
   /* base_type_size is the size in bytes of the variable as given by its
* kind parameter. */
   size_t base_type_size = (type - base_type) >> CFI_type_kind_shift;
-  /* Kind types 10 have a size of 64 bytes. */
+  /* Kind type 10 maps onto the 80-bit long double encoding on x86.
+Note that this has different storage size for -m32 than -m64.  */
   if (base_type_size == 10)
-   {
- base_type_size = 64;
-   }
+   base_type_size = sizeof (long double);
   /* Complex numbers are twice the size of their real counterparts. */
   if (base_type == CFI_type_Complex)
-   {
- base_type_size *= 2;
-   }
+   base_type_size *= 2;
   dv->elem_len = base_type_size;
 }
 
-- 
2.8.1



[PATCH 1/3] [PR libfortran/101305] Bind(C): Fix type encodings in ISO_Fortran_binding.h

2021-07-13 Thread Sandra Loosemore
ISO_Fortran_binding.h had many incorrect hardwired kind encodings in
the definitions of the CFI_type_* macros.  Additionally, not all
targets support all the defined type encodings, and the Fortran
standard requires those macros to have a negative value.

This patch changes ISO_Fortran_binding.h to use sizeof instead of
hard-coded sizes, and assembles it from fragments that reflect the
set of types supported by the target.

2021-07-13  Sandra Loosemore  
Tobias Burnus  

libgfortran/
PR libfortran/101305
* ISO_Fortran_binding.h: Fix hard-coded sizes and split into...
* ISO_Fortran_binding-1-tmpl.h: New file.
* ISO_Fortran_binding-2-tmpl.h: New file.
* ISO_Fortran_binding-3-tmpl.h: New file.
* Makefile.am: Add rule for generating ISO_Fortran_binding.h.
Adjust pathnames to that file.
* Makefile.in: Regenerated.
* mk-kinds-h.sh: New file.
* runtime/ISO_Fortran_binding.c: Fix include path.
---
 libgfortran/ISO_Fortran_binding-1-tmpl.h  | 196 
 libgfortran/ISO_Fortran_binding-2-tmpl.h  |  42 ++
 libgfortran/ISO_Fortran_binding-3-tmpl.h  |   5 +
 libgfortran/ISO_Fortran_binding.h | 206 --
 libgfortran/Makefile.am   |  15 ++-
 libgfortran/Makefile.in   |  16 ++-
 libgfortran/mk-kinds-h.sh |  25 +++-
 libgfortran/runtime/ISO_Fortran_binding.c |   2 +-
 8 files changed, 292 insertions(+), 215 deletions(-)
 create mode 100644 libgfortran/ISO_Fortran_binding-1-tmpl.h
 create mode 100644 libgfortran/ISO_Fortran_binding-2-tmpl.h
 create mode 100644 libgfortran/ISO_Fortran_binding-3-tmpl.h
 delete mode 100644 libgfortran/ISO_Fortran_binding.h

diff --git a/libgfortran/ISO_Fortran_binding-1-tmpl.h 
b/libgfortran/ISO_Fortran_binding-1-tmpl.h
new file mode 100644
index 000..dde7c3d
--- /dev/null
+++ b/libgfortran/ISO_Fortran_binding-1-tmpl.h
@@ -0,0 +1,196 @@
+/* Declarations for ISO Fortran binding.
+   Copyright (C) 2018-2021 Free Software Foundation, Inc.
+   Contributed by Daniel Celis Garza  
+
+This file is part of the GNU Fortran runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+Libgfortran is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+.  */
+
+#ifndef ISO_FORTRAN_BINDING_H
+#define ISO_FORTRAN_BINDING_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include   /* Standard ptrdiff_t tand size_t. */
+#include   /* Integer types. */
+
+/* Constants, defined as macros. */
+#define CFI_VERSION 1
+#define CFI_MAX_RANK 15
+
+/* Attributes. */
+#define CFI_attribute_pointer 0
+#define CFI_attribute_allocatable 1
+#define CFI_attribute_other 2
+
+/* Error codes.
+   CFI_INVALID_STRIDE should be defined in the standard because they are 
useful to the implementation of the functions.
+ */
+#define CFI_SUCCESS 0
+#define CFI_FAILURE 1
+#define CFI_ERROR_BASE_ADDR_NULL 2
+#define CFI_ERROR_BASE_ADDR_NOT_NULL 3
+#define CFI_INVALID_ELEM_LEN 4
+#define CFI_INVALID_RANK 5
+#define CFI_INVALID_TYPE 6
+#define CFI_INVALID_ATTRIBUTE 7
+#define CFI_INVALID_EXTENT 8
+#define CFI_INVALID_STRIDE 9
+#define CFI_INVALID_DESCRIPTOR 10
+#define CFI_ERROR_MEM_ALLOCATION 11
+#define CFI_ERROR_OUT_OF_BOUNDS 12
+
+/* CFI type definitions. */
+typedef ptrdiff_t CFI_index_t;
+typedef int8_t CFI_rank_t;
+typedef int8_t CFI_attribute_t;
+typedef int16_t CFI_type_t;
+
+/* CFI_dim_t. */
+typedef struct CFI_dim_t
+  {
+CFI_index_t lower_bound;
+CFI_index_t extent;
+CFI_index_t sm;
+  }
+CFI_dim_t;
+
+/* CFI_cdesc_t, C descriptors are cast to this structure as follows:
+   CFI_CDESC_T(CFI_MAX_RANK) foo;
+   CFI_cdesc_t * bar = (CFI_cdesc_t *) &foo;
+ */
+typedef struct CFI_cdesc_t
+ {
+void *base_addr;
+size_t elem_len;
+int version;
+CFI_rank_t rank;
+CFI_attribute_t attribute;
+CFI_type_t type;
+CFI_dim_t dim[];
+ }
+CFI_cdesc_t;
+
+/* CFI_CDESC_T with an explicit type. */
+#define CFI_CDESC_TYPE_T(r, base_type) \
+   struct { \
+   base_type *base_addr; \
+   size_t elem_len; \
+   int version; \
+   CFI_rank_t rank; \
+   CFI_attribu

[PATCH 3/3] [PR libfortran/101305] Fix ISO_Fortran_binding.h paths in gfortran testsuite

2021-07-13 Thread Sandra Loosemore
ISO_Fortran_binding.h is now generated in the libgfortran build
directory where it is on the default include path.  Adjust includes in
the gfortran testsuite not to include an explicit path pointing at the
source directory.

2021-07-13  Sandra Loosemore  

gcc/testsuite/
PR libfortran/101305
* gfortran.dg/ISO_Fortran_binding_1.c: Adjust include path.
* gfortran.dg/ISO_Fortran_binding_10.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_11.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_12.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_15.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_16.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_17.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_18.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_3.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_5.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_6.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_7.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_8.c: Likewise.
* gfortran.dg/ISO_Fortran_binding_9.c: Likewise.
* gfortran.dg/bind_c_array_params_3_aux.c: Likewise.
* gfortran.dg/iso_fortran_binding_uint8_array_driver.c: Likewise.
* gfortran.dg/pr93524.c: Likewise.
---
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c  | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.c | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.c | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.c | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_16.c | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_17.c | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_18.c | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_3.c  | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_5.c  | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_6.c  | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_7.c  | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_8.c  | 2 +-
 gcc/testsuite/gfortran.dg/ISO_Fortran_binding_9.c  | 2 +-
 gcc/testsuite/gfortran.dg/bind_c_array_params_3_aux.c  | 2 +-
 gcc/testsuite/gfortran.dg/iso_fortran_binding_uint8_array_driver.c | 2 +-
 gcc/testsuite/gfortran.dg/pr93524.c| 2 +-
 17 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c 
b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c
index a571459..9da5d85 100644
--- a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c
+++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_1.c
@@ -1,6 +1,6 @@
 /* Test F2008 18.5: ISO_Fortran_binding.h functions.  */
 
-#include "../../../libgfortran/ISO_Fortran_binding.h"
+#include "ISO_Fortran_binding.h"
 #include 
 #include 
 #include 
diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.c 
b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.c
index 9f06e2d..c3954e4 100644
--- a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.c
+++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_10.c
@@ -2,7 +2,7 @@
 
 /* Contributed by Reinhold Bader   */
 
-#include "../../../libgfortran/ISO_Fortran_binding.h"
+#include "ISO_Fortran_binding.h"
 #include 
 #include 
 #include 
diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.c 
b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.c
index ac17690..c2d4e11 100644
--- a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.c
+++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_11.c
@@ -5,7 +5,7 @@ Contributed by Reinhold Bader  #include  
*/
 #include 
 #include 
 #include 
-#include "../../../libgfortran/ISO_Fortran_binding.h"
+#include "ISO_Fortran_binding.h"
 
 typedef struct
 {
diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c 
b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c
index 279d9f6..078c5de 100644
--- a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c
+++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_12.c
@@ -2,7 +2,7 @@
 
 #include 
 #include 
-#include "../../../libgfortran/ISO_Fortran_binding.h"
+#include "ISO_Fortran_binding.h"
 
 /* Contributed by Reinhold Bader*/
 
diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.c 
b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.c
index f5c83c7..622f2de 100644
--- a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.c
+++ b/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_15.c
@@ -4,7 +4,7 @@
 
 #include 
 #include 
-#include "../../../libgfortran/ISO_Fortran_binding.h"
+#include "ISO_Fortran_binding.h"
 
 // Prototype for Fortran functions
 extern void Fsub(CFI_cdesc_t *);
diff --git a/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_16.c 
b/gcc/testsuite/gfortran.dg/ISO_Fortran_bin

Black Annealed Wire

2021-07-13 Thread JOYWINS HARDWARE INDUSTRY LIMITED
Black Annealed Wire is made of carbon steel wire(Q195), it's obtained by means 
of thermal annealing, endowing it with the properties it needs for its main use 
setting. and it's deployed both in civil construction and in agriculture in 
general. hence, in civil construction annealed wire, also known as "binding 
wire". We can provide all diameter of black annealed steel wire ,mainly BWG16 
black annealed wire.

 

 

Black Annealed Wire Details

Black Annealed Wire's colors are black and bright, color uniformity. Surface 
slightly oiled, enhanced rust resistance. 1.6mm black annealed wire is the most 
popular in our daliy use.

 

 

 

Black Annealed Wire Conventional packaging

Different national markets have different weight requirements. We can produce 
ordinary packaging from 0.8kg - 50kg for customers, and large roll of more than 
50kg are also possible.

Black Annealed Wire Processes

Black annealed iron wire is the raw material Q195 wire rod in the processing 
which is wound around the wire drawing plants, stretcher to a smaller wire 
diameter, and then firing, annealing, reduced hardness, improved toughness, 
after repeated stretching and calcined to achieve wire diameter and hardness 
customer requirements.

Common specifications

Silk number, also known as line number, wire gauge (wire gauge), according to 
these figures 1,2,3 order to identify, the larger the number, the thinner the 
wire diameter. 300 years ago, no rolling and extrusion technology, wire rod, 
forming forging technology is very primitive and simple measurement tools are 
very rough, so the printing on the number of times drawn as a wire thickness 
standards. One pull each time increase, compared to the blank line number 0. 
Because there are many workshops, craft and not the same, so the wire diameter 
is no uniform standard. Later, the prosperity of the global trade, 
internationally recognized standards began to take shape, in addition to the 
common metric units of measurement methods, American Wire Gauge (AWG), 
Birmingham Wire Gauge (BWG) and the British Empire Standard Gauge (SWG) are 
also recognized by the international trade measurement methods. If you want to 
get more information,Please click on Request a Quote.

Wire Gauge SWG mm BWG mm Metric system mm

8# 4.06 4.19 4.00

9# 3.66 3.76 -

10# 3.25 3.40 3.50

11# 2.95 3.05 3.00

12# 2.64 2.77 2.80

13# 2.34 2.41 2.50

14# 2.03 2.11 -

15# 1.83 1.83 1.80

16# 1.63 1.65 1.65

17# 1.42 1.47 1.40

18# 1.22 1.25 1.20

19# 1.02 1.07 1.00

20# 0.91 0.89 0.90

21# 0.81 0.813 0.80

22# 0.71 0.711 0.70

Black Annealed Wire Q&A

The use of black annealed wire

It can be used to bundle items, commonly used wire diameter range is between 
1.2 to 2.0. We will wire the second annealing treatment, so that the wire is 
more flexible, easy to operate.

The color of black annealed wire

Without any surface treatment, the surface is black. We can spray through the 
surface, let it become black and bright colors, and have a certain anti-rust 
performance.

The best weight of black annealed wire in single roll

General 15 to 30kg more appropriate, often do the weight is 20kg. Too heavy to 
use when inconvenient, too light will increase the production cost.

The volume of containers

\* According to the national customs, shipping companies on the container 
weight limit, generally not more than 25 tons.

Web 版本
https://sable.godaddy.com/c/360910?id=89071.351-55.1.3af67eb5e99e5fa92b10b2059495bc5e&p=eyIlN0IlN0JtaW1pLXNpZ25hdHVyZSU3RCU3RCI6IjE2Mzk3Nzk3MC0wMDYzMWQ2NC0xYmE3LTQ2NDMtOTg2MS1iYTc5NDg4YWE5OTEtNjM4NWM1NmY0ZmI1ZTdhZWRiOTEwMTgwYzdlYTMxYzIyZWYzYzg3YSIsIiU3QiU3QmVtYWlsSWQlN0QlN0QiOiI4OTA3MSJ9

退订
https://gem.godaddy.com/opt_out?pact=89071-163977970-00631d64-1ba7-4643-9861-ba79488aa991-6385c56f4fb5e7aedb910180c7ea31c22ef3c87a

JOYWINS HARDWARE INDUSTRY LIMITED | No 36 industry zone  anping hengshui city 
hebei province China