{"action":"created","comment":{"url":"https://api.github.com/repos/flang-compiler/f18/pulls/comments/236793691","pull_request_review_id":178930017,"id":236793691,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNjc5MzY5MQ==","diff_hunk":"@@ -210,14 +210,459 @@ int main() {\n       rank3d, extents);\n   MATCH(false,\n       dv_3darray->dim[2].extent == 2 + 66);  // extents was read\n+}\n+\n+static void check_CFI_address(\n+    const CFI_cdesc_t *dv, const CFI_index_t subscripts[]) {\n+  // 18.5.5.2\n+  void *addr = CFI_address(dv, subscripts);\n+  const Descriptor *desc = reinterpret_cast<const Descriptor *>(dv);\n+  void *addrCheck = desc->Element<void>(subscripts);\n+  MATCH(true, addr == addrCheck);\n+}\n+\n+// Helper function to set lower bound of descriptor\n+static void EstablishLowerBounds(CFI_cdesc_t *dv, CFI_index_t *sub) {\n+  for (int i{0}; i < dv->rank; ++i) {\n+    dv->dim[i].lower_bound = sub[i];\n+  }\n+}\n+\n+// Helper to get size without making internal compiler functions accessible\n+static std::size_t ByteSize(CFI_type_t ty, std::size_t size) {\n+  CFI_CDESC_T(0) storage;\n+  CFI_cdesc_t *dv = reinterpret_cast<CFI_cdesc_t *>(&storage);\n+  int retCode =\n+      CFI_establish(dv, nullptr, CFI_attribute_other, ty, size, 0, nullptr);\n+  return (retCode == CFI_SUCCESS) ? dv->elem_len : 0;\n+}\n+\n+static void run_CFI_address_tests() {\n+  // Test CFI_address defined in 18.5.5.2\n+  // Create test world\n+  CFI_index_t extents[CFI_MAX_RANK];\n+  CFI_CDESC_T(CFI_MAX_RANK) dv_storage;\n+  CFI_cdesc_t *dv{reinterpret_cast<CFI_cdesc_t *>(&dv_storage)};\n+  static char base;\n+  void *dummyAddr = reinterpret_cast<void *>(&base);\n+  CFI_attribute_t attrCases[]{\n+      CFI_attribute_pointer, CFI_attribute_allocatable, CFI_attribute_other};\n+  CFI_type_t validTypeCases[]{\n+      CFI_type_int, CFI_type_struct, CFI_type_double, CFI_type_char};\n+  CFI_index_t subscripts[CFI_MAX_RANK];\n+  CFI_index_t negativeLowerBounds[CFI_MAX_RANK];\n+  CFI_index_t zeroLowerBounds[CFI_MAX_RANK];\n+  CFI_index_t positiveLowerBounds[CFI_MAX_RANK];\n+  CFI_index_t *lowerBoundCases[] = {\n+      negativeLowerBounds, zeroLowerBounds, positiveLowerBounds};\n+  for (int i{0}; i < CFI_MAX_RANK; ++i) {\n+    negativeLowerBounds[i] = -1;\n+    zeroLowerBounds[i] = 0;\n+    positiveLowerBounds[i] = 1;\n+    extents[i] = i + 2;\n+    subscripts[i] = i + 1;\n+  }\n+\n+  // test for scalar\n+  for (CFI_attribute_t attribute : attrCases) {\n+    for (CFI_type_t type : validTypeCases) {\n+      CFI_establish(dv, dummyAddr, attribute, type, 42, 0, nullptr);\n+      check_CFI_address(dv, nullptr);\n+    }\n+  }\n+  // test for arrays\n+  CFI_establish(dv, dummyAddr, CFI_attribute_other, CFI_type_int, 0,\n+      CFI_MAX_RANK, extents);\n+  for (CFI_index_t *lowerBounds : lowerBoundCases) {\n+    EstablishLowerBounds(dv, lowerBounds);\n+    for (CFI_type_t type : validTypeCases) {\n+      for (bool contiguous : {true, false}) {\n+        std::size_t size = ByteSize(type, 12);\n+        dv->elem_len = size;\n+        for (int i{0}; i < dv->rank; ++i) {\n+          dv->dim[i].sm = size + (contiguous ? 0 : dv->elem_len);\n+          size = dv->dim[i].sm * dv->dim[i].extent;\n+        }\n+        for (CFI_attribute_t attribute : attrCases) {\n+          dv->attribute = attribute;\n+          check_CFI_address(dv, subscripts);\n+        }\n+      }\n+    }\n+  }\n+  // Test on an assumed size array.\n+  CFI_establish(\n+      dv, dummyAddr, CFI_attribute_other, CFI_type_int, 0, 3, extents);\n+  dv->dim[2].extent = -1;\n+  check_CFI_address(dv, subscripts);\n+}\n+\n+static void check_CFI_allocate(CFI_cdesc_t *dv,\n+    const CFI_index_t lower_bounds[], const CFI_index_t upper_bounds[],\n+    std::size_t elem_len) {\n+  // 18.5.5.3\n+  // Backup descriptor data for future checks\n+  const CFI_rank_t rank = dv->rank;\n+  const std::size_t desc_elem_len = dv->elem_len;\n+  const CFI_attribute_t attribute = dv->attribute;\n+  const CFI_type_t type = dv->type;\n+  const void *base_addr = dv->base_addr;\n+  const int version = dv->version;\n+#ifdef VERBOSE\n+  DumpTestWorld(base_addr, attribute, type, elem_len, rank, nullptr);\n+#endif\n+  int retCode = CFI_allocate(dv, lower_bounds, upper_bounds, elem_len);\n+  Descriptor *desc = reinterpret_cast<Descriptor *>(dv);\n+  if (retCode == CFI_SUCCESS) {\n+    // check res properties from 18.5.5.3 par 3\n+    MATCH(true, dv->base_addr != nullptr);\n+    for (int i{0}; i < rank; ++i) {\n+      MATCH(lower_bounds[i], dv->dim[i].lower_bound);\n+      MATCH(upper_bounds[i], dv->dim[i].extent + dv->dim[i].lower_bound - 1);\n+    }\n+    if (type == CFI_type_char) {\n+      MATCH(elem_len, dv->elem_len);\n+    } else {\n+      MATCH(true, desc_elem_len == dv->elem_len);\n+    }\n+    MATCH(true, desc->IsContiguous());\n+  } else {\n+    MATCH(true, base_addr == dv->base_addr);\n+  }\n+\n+  // Below dv members shall not be altered by CFI_allocate regardless of\n+  // success/failure\n+  MATCH(true, attribute == dv->attribute);\n+  MATCH(true, rank == dv->rank);\n+  MATCH(true, type == dv->type);\n+  MATCH(true, version == dv->version);\n+\n+  // Success/failure according to standard\n+  int numErr{0};\n+  int expectedRetCode{CFI_SUCCESS};\n+  if (rank < 0 || rank > CFI_MAX_RANK) {\n+    ++numErr;\n+    expectedRetCode = CFI_INVALID_RANK;\n+  }\n+  if (type < 0 || type > CFI_type_struct) {\n+    ++numErr;\n+    expectedRetCode = CFI_INVALID_TYPE;\n+  }\n+  if (base_addr != nullptr && attribute == CFI_attribute_allocatable) {\n+    // This is less restrictive than 18.5.5.3 arg req for which pointers arg\n+    // shall be unassociated. However, this match ALLOCATE behavior\n+    // (9.7.3/9.7.4)\n+    ++numErr;\n+    expectedRetCode = CFI_ERROR_BASE_ADDR_NOT_NULL;\n+  }\n+  if (attribute != CFI_attribute_pointer &&\n+      attribute != CFI_attribute_allocatable) {\n+    ++numErr;\n+    expectedRetCode = CFI_INVALID_ATTRIBUTE;\n+  }\n+  if (rank > 0 && (lower_bounds == nullptr || upper_bounds == nullptr)) {\n+    ++numErr;\n+    expectedRetCode = CFI_INVALID_EXTENT;\n+  }\n+\n+  // Memory allocation failures are unpredictable in this test.\n+  if (numErr == 0 && retCode != CFI_SUCCESS) {\n+    MATCH(true, retCode == CFI_ERROR_MEM_ALLOCATION);\n+  } else if (numErr > 1) {\n+    MATCH(true, retCode != CFI_SUCCESS);\n+  } else {\n+    MATCH(expectedRetCode, retCode);\n+  }\n+  // clean-up\n+  if (retCode == CFI_SUCCESS) {\n+    CFI_deallocate(dv);\n+  }\n+}\n \n-  // TODO: test CFI_address\n-  // TODO: test CFI_allocate\n+static void run_CFI_allocate_tests() {\n+  // 18.5.5.3\n+  // create test world\n+  CFI_CDESC_T(CFI_MAX_RANK) dv_storage;\n+  CFI_cdesc_t *dv{reinterpret_cast<CFI_cdesc_t *>(&dv_storage)};\n+  static char base;\n+  void *dummyAddr = reinterpret_cast<void *>(&base);\n+  CFI_attribute_t attrCases[]{\n+      CFI_attribute_pointer, CFI_attribute_allocatable, CFI_attribute_other};\n+  CFI_type_t typeCases[]{CFI_type_int, CFI_type_struct, CFI_type_double,\n+      CFI_type_char, CFI_type_other, CFI_type_struct + 1};\n+  void *baseAddrCases[]{dummyAddr, static_cast<void *>(nullptr)};\n+  CFI_rank_t rankCases[]{0, 1, CFI_MAX_RANK, CFI_MAX_RANK + 1};\n+  std::size_t lenCases[]{0, 42};\n+  CFI_index_t lb1[CFI_MAX_RANK];\n+  CFI_index_t ub1[CFI_MAX_RANK];\n+  for (int i{0}; i < CFI_MAX_RANK; ++i) {\n+    lb1[i] = -1;\n+    ub1[i] = 0;\n+  }\n+\n+  check_CFI_establish(\n+      dv, nullptr, CFI_attribute_other, CFI_type_int, 0, 0, nullptr);\n+  for (CFI_type_t type : typeCases) {\n+    std::size_t ty_len = ByteSize(type, 12);\n+    for (CFI_attribute_t attribute : attrCases) {\n+      for (void *base_addr : baseAddrCases) {\n+        for (CFI_rank_t rank : rankCases) {\n+          for (size_t elem_len : lenCases) {\n+            dv->base_addr = base_addr;\n+            dv->rank = rank;\n+            dv->attribute = attribute;\n+            dv->type = type;\n+            dv->elem_len = ty_len;\n+            check_CFI_allocate(dv, lb1, ub1, elem_len);\n+          }\n+        }\n+      }\n+    }\n+  }\n+}\n+\n+static void run_CFI_section_tests() {\n+  // simple tests\n+  bool testPreConditions{true};\n+  constexpr CFI_index_t m = 5, n = 6, o = 7;\n+  constexpr CFI_rank_t rank = 3;\n+  long long array[o][n][m];  // Fortran A(m,n,o)\n+  long long counter{1};\n+\n+  for (CFI_index_t k{0}; k < o; ++k) {\n+    for (CFI_index_t j{0}; j < n; ++j) {\n+      for (CFI_index_t i{0}; i < m; ++i) {\n+        array[k][j][i] = counter++;  // Fortran A(i,j,k)\n+      }\n+    }\n+  }\n+  CFI_CDESC_T(rank) sourceStorage;\n+  CFI_cdesc_t *source = reinterpret_cast<CFI_cdesc_t *>(&sourceStorage);\n+  CFI_index_t extent[rank] = {m, n, o};\n+  int retCode = CFI_establish(\n+      source, &array, CFI_attribute_other, CFI_type_long_long, 0, rank, extent);\n+  testPreConditions &= (retCode == CFI_SUCCESS);\n+\n+  CFI_index_t lb[rank] = {2, 5, 4};\n+  CFI_index_t ub[rank] = {4, 5, 6};\n+  CFI_index_t strides[rank] = {2, 0, 2};\n+  constexpr CFI_rank_t resultRank = rank - 1;\n+\n+  CFI_CDESC_T(resultRank) resultStorage;\n+  CFI_cdesc_t *result = reinterpret_cast<CFI_cdesc_t *>(&resultStorage);\n+  retCode = CFI_establish(result, nullptr, CFI_attribute_other,\n+      CFI_type_long_long, 0, resultRank, nullptr);\n+  testPreConditions &= (retCode == CFI_SUCCESS);\n+\n+  if (!testPreConditions) {\n+    MATCH(true, testPreConditions);\n+    return;\n+  }\n+\n+  retCode = CFI_section(\n+      result, source, lb, ub, strides);  // Fortran B = A(2:4:2, 5:5:0, 4:6:2)\n+  MATCH(true, retCode == CFI_SUCCESS);\n+\n+  const int lbs0 = source->dim[0].lower_bound;\n+  const int lbs1 = source->dim[1].lower_bound;\n+  const int lbs2 = source->dim[2].lower_bound;\n+\n+  CFI_index_t resJ{result->dim[1].lower_bound};\n+  for (CFI_index_t k{lb[2]}; k <= ub[2]; k += strides[2]) {\n+    for (CFI_index_t j{lb[1]}; j <= ub[1]; j += (strides[1] ? strides[1] : 1)) {\n+      CFI_index_t resI{result->dim[0].lower_bound};\n+      for (CFI_index_t i{lb[0]}; i <= ub[0]; i += strides[0]) {\n+        // check A(i,j,k) == B(resI, resJ) == array[k-1][j-1][i-1]\n+        const CFI_index_t resSubcripts[] = {resI, resJ};\n+        const CFI_index_t srcSubcripts[] = {i, j, k};\n+        MATCH(true,\n+            CFI_address(source, srcSubcripts) ==\n+                CFI_address(result, resSubcripts));\n+        MATCH(true,\n+            CFI_address(source, srcSubcripts) ==\n+                &array[k - lbs2][j - lbs1][i - lbs0]);\n+        ++resI;\n+      }\n+    }\n+    ++resJ;\n+  }\n+\n+  strides[0] = -1;\n+  lb[0] = 4;\n+  ub[0] = 2;\n+  retCode = CFI_section(\n+      result, source, lb, ub, strides);  // Fortran B = A(4:2:-1, 5:5:0, 4:6:2)\n+  MATCH(true, retCode == CFI_SUCCESS);\n+\n+  resJ = result->dim[1].lower_bound;\n+  for (CFI_index_t k{lb[2]}; k <= ub[2]; k += strides[2]) {\n+    for (CFI_index_t j{lb[1]}; j <= ub[1]; j += 1) {\n+      CFI_index_t resI{result->dim[1].lower_bound + result->dim[0].extent - 1};\n+      for (CFI_index_t i{2}; i <= 4; ++i) {\n+        // check A(i,j,k) == B(resI, resJ) == array[k-1][j-1][i-1]\n+        const CFI_index_t resSubcripts[] = {resI, resJ};\n+        const CFI_index_t srcSubcripts[] = {i, j, k};\n+        MATCH(true,\n+            CFI_address(source, srcSubcripts) ==\n+                CFI_address(result, resSubcripts));\n+        MATCH(true,\n+            CFI_address(source, srcSubcripts) ==\n+                &array[k - lbs2][j - lbs1][i - lbs0]);\n+        --resI;\n+      }\n+    }\n+    ++resJ;\n+  }\n+}\n+\n+static void run_CFI_select_part_tests() {\n+  constexpr std::size_t name_len = 5;\n+  typedef struct {\n+    double distance;\n+    int stars;\n+    char name[name_len];\n+  } Galaxy;\n+\n+  const CFI_rank_t rank{2};\n+  constexpr CFI_index_t universeSize[] = {2, 3};\n+  Galaxy universe[universeSize[1]][universeSize[0]];\n+\n+  for (int j{0}; j < universeSize[1]; ++j) {\n+    for (int i{0}; i < universeSize[0]; ++i) {\n+      universe[j][i].distance = i + j * 32;\n+      universe[j][i].stars = i * 2 + j * 64;\n+      universe[j][i].name[2] = static_cast<char>(i);\n+      universe[j][i].name[3] = static_cast<char>(j);\n+    }\n+  }\n+\n+  CFI_CDESC_T(rank) resStorage, srcStorage;\n+  CFI_cdesc_t *result = reinterpret_cast<CFI_cdesc_t *>(&resStorage);\n+  CFI_cdesc_t *source = reinterpret_cast<CFI_cdesc_t *>(&srcStorage);\n+\n+  bool testPreConditions{true};\n+  int retCode = CFI_establish(result, nullptr, CFI_attribute_other,\n+      CFI_type_int, sizeof(int), rank, nullptr);\n+  testPreConditions &= (retCode == CFI_SUCCESS);\n+  retCode = CFI_establish(source, &universe, CFI_attribute_other,\n+      CFI_type_struct, sizeof(Galaxy), rank, universeSize);\n+  testPreConditions &= (retCode == CFI_SUCCESS);\n+  if (!testPreConditions) {\n+    MATCH(true, testPreConditions);\n+    return;\n+  }\n+\n+  std::size_t displacement{offsetof(Galaxy, stars)};\n+  std::size_t elem_len{0};  // ignored\n+  retCode = CFI_select_part(result, source, displacement, elem_len);\n+  MATCH(CFI_SUCCESS, retCode);\n+\n+  bool baseAddrShiftedOk =\n+      (reinterpret_cast<char *>(source->base_addr) + displacement ==\n+          result->base_addr);\n+  MATCH(true, baseAddrShiftedOk);\n+  if (!baseAddrShiftedOk) {\n+    return;\n+  }\n+\n+  MATCH(sizeof(int), result->elem_len);\n+  for (CFI_index_t j{0}; j < universeSize[1]; ++j) {\n+    for (CFI_index_t i{0}; i < universeSize[0]; ++i) {\n+      CFI_index_t subscripts[]{\n+          result->dim[0].lower_bound + i, result->dim[1].lower_bound + j};\n+      MATCH(i * 2 + j * 64,\n+          *reinterpret_cast<int *>(CFI_address(result, subscripts)));\n+    }\n+  }\n+\n+  // Test for Fortran character type\n+  retCode = CFI_establish(\n+      result, nullptr, CFI_attribute_other, CFI_type_char, 2, rank, nullptr);\n+  testPreConditions &= (retCode == CFI_SUCCESS);\n+  if (!testPreConditions) {\n+    MATCH(true, testPreConditions);\n+    return;\n+  }\n+\n+  displacement = offsetof(Galaxy, name) + 2;\n+  elem_len = 2;  // not ignored this time\n+  retCode = CFI_select_part(result, source, displacement, elem_len);\n+  MATCH(CFI_SUCCESS, retCode);\n+\n+  baseAddrShiftedOk =\n+      (reinterpret_cast<char *>(source->base_addr) + displacement ==\n+          result->base_addr);","path":"test/evaluate/ISO-Fortran-binding.cc","position":448,"original_position":448,"commit_id":"92339ea11a09323cda461da0e69a52a006cf6df8","original_commit_id":"92339ea11a09323cda461da0e69a52a006cf6df8","user":{"login":"schweitzpgi","id":22080509,"node_id":"MDQ6VXNlcjIyMDgwNTA5","avatar_url":"https://avatars0.githubusercontent.com/u/22080509?v=4","gravatar_id":"","url":"https://api.github.com/users/schweitzpgi","html_url":"https://github.com/schweitzpgi","followers_url":"https://api.github.com/users/schweitzpgi/followers","following_url":"https://api.github.com/users/schweitzpgi/following{/other_user}","gists_url":"https://api.github.com/users/schweitzpgi/gists{/gist_id}","starred_url":"https://api.github.com/users/schweitzpgi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/schweitzpgi/subscriptions","organizations_url":"https://api.github.com/users/schweitzpgi/orgs","repos_url":"https://api.github.com/users/schweitzpgi/repos","events_url":"https://api.github.com/users/schweitzpgi/events{/privacy}","received_events_url":"https://api.github.com/users/schweitzpgi/received_events","type":"User","site_admin":false},"body":"Does our f18 coding standard want bool typed expressions enclosed in outer parenthesis?","created_at":"2018-11-27T18:37:50Z","updated_at":"2018-11-27T18:39:31Z","html_url":"https://github.com/flang-compiler/f18/pull/227#discussion_r236793691","pull_request_url":"https://api.github.com/repos/flang-compiler/f18/pulls/227","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/flang-compiler/f18/pulls/comments/236793691"},"html":{"href":"https://github.com/flang-compiler/f18/pull/227#discussion_r236793691"},"pull_request":{"href":"https://api.github.com/repos/flang-compiler/f18/pulls/227"}}},"pull_request":{"url":"https://api.github.com/repos/flang-compiler/f18/pulls/227","id":232029490,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMyMDI5NDkw","html_url":"https://github.com/flang-compiler/f18/pull/227","diff_url":"https://github.com/flang-compiler/f18/pull/227.diff","patch_url":"https://github.com/flang-compiler/f18/pull/227.patch","issue_url":"https://api.github.com/repos/flang-compiler/f18/issues/227","number":227,"state":"open","locked":false,"title":" Implement CFI_set_pointer, CFI_section, CFI_select_part. Minor changes in other CFI funcs","user":{"login":"jeanPerier","id":11905461,"node_id":"MDQ6VXNlcjExOTA1NDYx","avatar_url":"https://avatars3.githubusercontent.com/u/11905461?v=4","gravatar_id":"","url":"https://api.github.com/users/jeanPerier","html_url":"https://github.com/jeanPerier","followers_url":"https://api.github.com/users/jeanPerier/followers","following_url":"https://api.github.com/users/jeanPerier/following{/other_user}","gists_url":"https://api.github.com/users/jeanPerier/gists{/gist_id}","starred_url":"https://api.github.com/users/jeanPerier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jeanPerier/subscriptions","organizations_url":"https://api.github.com/users/jeanPerier/orgs","repos_url":"https://api.github.com/users/jeanPerier/repos","events_url":"https://api.github.com/users/jeanPerier/events{/privacy}","received_events_url":"https://api.github.com/users/jeanPerier/received_events","type":"User","site_admin":false},"body":"This commit contains:\r\n\r\n- Implementation of 18.5.5 CFI_setpointer, CFI_select_part and CFI_section as well as related unit tests.\r\nNote that CFI_select_part and CFI_section also set lower bounds to zero. For nonallocatable nonpointer, this is to be in line with 18.5.3 par 3. For pointers, I have not found a clear indication, but based on CFI_establish behavior, it seems reasonable to set them to zero also.\r\n\r\n- Fix of lower bound value in C descriptor:\r\nCFI_establish now also sets lower bounds to zero for nonallocatable nonpointer data object descriptors according to 18.5.3 par 3. This is not done if no base_addr is given because it will be done in CFI_select_part and CFI_section in this case.\r\n\r\n- Fix for character type in CFI_allocate:\r\nIt seems that CFI_type_cptr was used to refer to Fortran character type instead of CFI_type_char. The elem_len argument has to be considered for Fortran character type data objects for which the type encoding in the descriptor is CFI_type_char from what I understand.\r\n","created_at":"2018-11-19T16:13:21Z","updated_at":"2018-11-27T18:39:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9d832ff33fe295cc7c9520340bcd72f371a7dd60","assignee":null,"assignees":[],"requested_reviewers":[{"login":"vdonaldson","id":37090318,"node_id":"MDQ6VXNlcjM3MDkwMzE4","avatar_url":"https://avatars1.githubusercontent.com/u/37090318?v=4","gravatar_id":"","url":"https://api.github.com/users/vdonaldson","html_url":"https://github.com/vdonaldson","followers_url":"https://api.github.com/users/vdonaldson/followers","following_url":"https://api.github.com/users/vdonaldson/following{/other_user}","gists_url":"https://api.github.com/users/vdonaldson/gists{/gist_id}","starred_url":"https://api.github.com/users/vdonaldson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vdonaldson/subscriptions","organizations_url":"https://api.github.com/users/vdonaldson/orgs","repos_url":"https://api.github.com/users/vdonaldson/repos","events_url":"https://api.github.com/users/vdonaldson/events{/privacy}","received_events_url":"https://api.github.com/users/vdonaldson/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/flang-compiler/f18/pulls/227/commits","review_comments_url":"https://api.github.com/repos/flang-compiler/f18/pulls/227/comments","review_comment_url":"https://api.github.com/repos/flang-compiler/f18/pulls/comments{/number}","comments_url":"https://api.github.com/repos/flang-compiler/f18/issues/227/comments","statuses_url":"https://api.github.com/repos/flang-compiler/f18/statuses/92339ea11a09323cda461da0e69a52a006cf6df8","head":{"label":"flang-compiler:jpr0","ref":"jpr0","sha":"92339ea11a09323cda461da0e69a52a006cf6df8","user":{"login":"flang-compiler","id":27519978,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3NTE5OTc4","avatar_url":"https://avatars2.githubusercontent.com/u/27519978?v=4","gravatar_id":"","url":"https://api.github.com/users/flang-compiler","html_url":"https://github.com/flang-compiler","followers_url":"https://api.github.com/users/flang-compiler/followers","following_url":"https://api.github.com/users/flang-compiler/following{/other_user}","gists_url":"https://api.github.com/users/flang-compiler/gists{/gist_id}","starred_url":"https://api.github.com/users/flang-compiler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flang-compiler/subscriptions","organizations_url":"https://api.github.com/users/flang-compiler/orgs","repos_url":"https://api.github.com/users/flang-compiler/repos","events_url":"https://api.github.com/users/flang-compiler/events{/privacy}","received_events_url":"https://api.github.com/users/flang-compiler/received_events","type":"Organization","site_admin":false},"repo":{"id":118970343,"node_id":"MDEwOlJlcG9zaXRvcnkxMTg5NzAzNDM=","name":"f18","full_name":"flang-compiler/f18","private":false,"owner":{"login":"flang-compiler","id":27519978,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3NTE5OTc4","avatar_url":"https://avatars2.githubusercontent.com/u/27519978?v=4","gravatar_id":"","url":"https://api.github.com/users/flang-compiler","html_url":"https://github.com/flang-compiler","followers_url":"https://api.github.com/users/flang-compiler/followers","following_url":"https://api.github.com/users/flang-compiler/following{/other_user}","gists_url":"https://api.github.com/users/flang-compiler/gists{/gist_id}","starred_url":"https://api.github.com/users/flang-compiler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flang-compiler/subscriptions","organizations_url":"https://api.github.com/users/flang-compiler/orgs","repos_url":"https://api.github.com/users/flang-compiler/repos","events_url":"https://api.github.com/users/flang-compiler/events{/privacy}","received_events_url":"https://api.github.com/users/flang-compiler/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/flang-compiler/f18","description":"F18 is a front-end for Fortran intended to replace the existing front-end in the Flang compiler","fork":false,"url":"https://api.github.com/repos/flang-compiler/f18","forks_url":"https://api.github.com/repos/flang-compiler/f18/forks","keys_url":"https://api.github.com/repos/flang-compiler/f18/keys{/key_id}","collaborators_url":"https://api.github.com/repos/flang-compiler/f18/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/flang-compiler/f18/teams","hooks_url":"https://api.github.com/repos/flang-compiler/f18/hooks","issue_events_url":"https://api.github.com/repos/flang-compiler/f18/issues/events{/number}","events_url":"https://api.github.com/repos/flang-compiler/f18/events","assignees_url":"https://api.github.com/repos/flang-compiler/f18/assignees{/user}","branches_url":"https://api.github.com/repos/flang-compiler/f18/branches{/branch}","tags_url":"https://api.github.com/repos/flang-compiler/f18/tags","blobs_url":"https://api.github.com/repos/flang-compiler/f18/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/flang-compiler/f18/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/flang-compiler/f18/git/refs{/sha}","trees_url":"https://api.github.com/repos/flang-compiler/f18/git/trees{/sha}","statuses_url":"https://api.github.com/repos/flang-compiler/f18/statuses/{sha}","languages_url":"https://api.github.com/repos/flang-compiler/f18/languages","stargazers_url":"https://api.github.com/repos/flang-compiler/f18/stargazers","contributors_url":"https://api.github.com/repos/flang-compiler/f18/contributors","subscribers_url":"https://api.github.com/repos/flang-compiler/f18/subscribers","subscription_url":"https://api.github.com/repos/flang-compiler/f18/subscription","commits_url":"https://api.github.com/repos/flang-compiler/f18/commits{/sha}","git_commits_url":"https://api.github.com/repos/flang-compiler/f18/git/commits{/sha}","comments_url":"https://api.github.com/repos/flang-compiler/f18/comments{/number}","issue_comment_url":"https://api.github.com/repos/flang-compiler/f18/issues/comments{/number}","contents_url":"https://api.github.com/repos/flang-compiler/f18/contents/{+path}","compare_url":"https://api.github.com/repos/flang-compiler/f18/compare/{base}...{head}","merges_url":"https://api.github.com/repos/flang-compiler/f18/merges","archive_url":"https://api.github.com/repos/flang-compiler/f18/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/flang-compiler/f18/downloads","issues_url":"https://api.github.com/repos/flang-compiler/f18/issues{/number}","pulls_url":"https://api.github.com/repos/flang-compiler/f18/pulls{/number}","milestones_url":"https://api.github.com/repos/flang-compiler/f18/milestones{/number}","notifications_url":"https://api.github.com/repos/flang-compiler/f18/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/flang-compiler/f18/labels{/name}","releases_url":"https://api.github.com/repos/flang-compiler/f18/releases{/id}","deployments_url":"https://api.github.com/repos/flang-compiler/f18/deployments","created_at":"2018-01-25T21:34:19Z","updated_at":"2018-11-21T10:54:19Z","pushed_at":"2018-11-26T23:31:40Z","git_url":"git://github.com/flang-compiler/f18.git","ssh_url":"git@github.com:flang-compiler/f18.git","clone_url":"https://github.com/flang-compiler/f18.git","svn_url":"https://github.com/flang-compiler/f18","homepage":"","size":2944,"stargazers_count":70,"watchers_count":70,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":10,"mirror_url":null,"archived":false,"open_issues_count":10,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":10,"open_issues":10,"watchers":70,"default_branch":"master"}},"base":{"label":"flang-compiler:master","ref":"master","sha":"cd6e4f0adaecde8d58e03c67542f9a9b6c3b68d2","user":{"login":"flang-compiler","id":27519978,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3NTE5OTc4","avatar_url":"https://avatars2.githubusercontent.com/u/27519978?v=4","gravatar_id":"","url":"https://api.github.com/users/flang-compiler","html_url":"https://github.com/flang-compiler","followers_url":"https://api.github.com/users/flang-compiler/followers","following_url":"https://api.github.com/users/flang-compiler/following{/other_user}","gists_url":"https://api.github.com/users/flang-compiler/gists{/gist_id}","starred_url":"https://api.github.com/users/flang-compiler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flang-compiler/subscriptions","organizations_url":"https://api.github.com/users/flang-compiler/orgs","repos_url":"https://api.github.com/users/flang-compiler/repos","events_url":"https://api.github.com/users/flang-compiler/events{/privacy}","received_events_url":"https://api.github.com/users/flang-compiler/received_events","type":"Organization","site_admin":false},"repo":{"id":118970343,"node_id":"MDEwOlJlcG9zaXRvcnkxMTg5NzAzNDM=","name":"f18","full_name":"flang-compiler/f18","private":false,"owner":{"login":"flang-compiler","id":27519978,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI3NTE5OTc4","avatar_url":"https://avatars2.githubusercontent.com/u/27519978?v=4","gravatar_id":"","url":"https://api.github.com/users/flang-compiler","html_url":"https://github.com/flang-compiler","followers_url":"https://api.github.com/users/flang-compiler/followers","following_url":"https://api.github.com/users/flang-compiler/following{/other_user}","gists_url":"https://api.github.com/users/flang-compiler/gists{/gist_id}","starred_url":"https://api.github.com/users/flang-compiler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flang-compiler/subscriptions","organizations_url":"https://api.github.com/users/flang-compiler/orgs","repos_url":"https://api.github.com/users/flang-compiler/repos","events_url":"https://api.github.com/users/flang-compiler/events{/privacy}","received_events_url":"https://api.github.com/users/flang-compiler/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/flang-compiler/f18","description":"F18 is a front-end for Fortran intended to replace the existing front-end in the Flang compiler","fork":false,"url":"https://api.github.com/repos/flang-compiler/f18","forks_url":"https://api.github.com/repos/flang-compiler/f18/forks","keys_url":"https://api.github.com/repos/flang-compiler/f18/keys{/key_id}","collaborators_url":"https://api.github.com/repos/flang-compiler/f18/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/flang-compiler/f18/teams","hooks_url":"https://api.github.com/repos/flang-compiler/f18/hooks","issue_events_url":"https://api.github.com/repos/flang-compiler/f18/issues/events{/number}","events_url":"https://api.github.com/repos/flang-compiler/f18/events","assignees_url":"https://api.github.com/repos/flang-compiler/f18/assignees{/user}","branches_url":"https://api.github.com/repos/flang-compiler/f18/branches{/branch}","tags_url":"https://api.github.com/repos/flang-compiler/f18/tags","blobs_url":"https://api.github.com/repos/flang-compiler/f18/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/flang-compiler/f18/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/flang-compiler/f18/git/refs{/sha}","trees_url":"https://api.github.com/repos/flang-compiler/f18/git/trees{/sha}","statuses_url":"https://api.github.com/repos/flang-compiler/f18/statuses/{sha}","languages_url":"https://api.github.com/repos/flang-compiler/f18/languages","stargazers_url":"https://api.github.com/repos/flang-compiler/f18/stargazers","contributors_url":"https://api.github.com/repos/flang-compiler/f18/contributors","subscribers_url":"https://api.github.com/repos/flang-compiler/f18/subscribers","subscription_url":"https://api.github.com/repos/flang-compiler/f18/subscription","commits_url":"https://api.github.com/repos/flang-compiler/f18/commits{/sha}","git_commits_url":"https://api.github.com/repos/flang-compiler/f18/git/commits{/sha}","comments_url":"https://api.github.com/repos/flang-compiler/f18/comments{/number}","issue_comment_url":"https://api.github.com/repos/flang-compiler/f18/issues/comments{/number}","contents_url":"https://api.github.com/repos/flang-compiler/f18/contents/{+path}","compare_url":"https://api.github.com/repos/flang-compiler/f18/compare/{base}...{head}","merges_url":"https://api.github.com/repos/flang-compiler/f18/merges","archive_url":"https://api.github.com/repos/flang-compiler/f18/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/flang-compiler/f18/downloads","issues_url":"https://api.github.com/repos/flang-compiler/f18/issues{/number}","pulls_url":"https://api.github.com/repos/flang-compiler/f18/pulls{/number}","milestones_url":"https://api.github.com/repos/flang-compiler/f18/milestones{/number}","notifications_url":"https://api.github.com/repos/flang-compiler/f18/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/flang-compiler/f18/labels{/name}","releases_url":"https://api.github.com/repos/flang-compiler/f18/releases{/id}","deployments_url":"https://api.github.com/repos/flang-compiler/f18/deployments","created_at":"2018-01-25T21:34:19Z","updated_at":"2018-11-21T10:54:19Z","pushed_at":"2018-11-26T23:31:40Z","git_url":"git://github.com/flang-compiler/f18.git","ssh_url":"git@github.com:flang-compiler/f18.git","clone_url":"https://github.com/flang-compiler/f18.git","svn_url":"https://github.com/flang-compiler/f18","homepage":"","size":2944,"stargazers_count":70,"watchers_count":70,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":10,"mirror_url":null,"archived":false,"open_issues_count":10,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":10,"open_issues":10,"watchers":70,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/flang-compiler/f18/pulls/227"},"html":{"href":"https://github.com/flang-compiler/f18/pull/227"},"issue":{"href":"https://api.github.com/repos/flang-compiler/f18/issues/227"},"comments":{"href":"https://api.github.com/repos/flang-compiler/f18/issues/227/comments"},"review_comments":{"href":"https://api.github.com/repos/flang-compiler/f18/pulls/227/comments"},"review_comment":{"href":"https://api.github.com/repos/flang-compiler/f18/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/flang-compiler/f18/pulls/227/commits"},"statuses":{"href":"https://api.github.com/repos/flang-compiler/f18/statuses/92339ea11a09323cda461da0e69a52a006cf6df8"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"schweitzpgi"}}