diff --git a/src/writer/glsl/generator_impl.cc b/src/writer/glsl/generator_impl.cc
index c5a8aa0..b7a79c4 100644
--- a/src/writer/glsl/generator_impl.cc
+++ b/src/writer/glsl/generator_impl.cc
@@ -2290,12 +2290,6 @@
     const sem::Type* base_type = ary;
     std::vector<uint32_t> sizes;
     while (auto* arr = base_type->As<sem::Array>()) {
-      if (arr->IsRuntimeSized()) {
-        TINT_ICE(Writer, diagnostics_)
-            << "Runtime arrays may only exist in storage buffers, which should "
-               "have been transformed into a ByteAddressBuffer";
-        return false;
-      }
       sizes.push_back(arr->Count());
       base_type = arr->ElemType();
     }
@@ -2449,14 +2443,6 @@
 
 bool GeneratorImpl::EmitStructType(TextBuffer* b, const sem::Struct* str) {
   auto storage_class_uses = str->StorageClassUsage();
-  if (storage_class_uses.size() ==
-      (storage_class_uses.count(ast::StorageClass::kStorage))) {
-    // The only use of the structure is as a storage buffer.
-    // Structures used as storage buffer are read and written to via a
-    // ByteAddressBuffer instead of true structure.
-    return true;
-  }
-
   line(b) << "struct " << StructName(str) << " {";
   {
     ScopedIndent si(b);
@@ -2471,14 +2457,7 @@
 
       if (auto* decl = mem->Declaration()) {
         for (auto* deco : decl->decorations) {
-          if (deco->As<ast::LocationDecoration>()) {
-            auto& pipeline_stage_uses = str->PipelineStageUses();
-            if (pipeline_stage_uses.size() != 1) {
-              TINT_ICE(Writer, diagnostics_)
-                  << "invalid entry point IO struct uses";
-            }
-          } else if (auto* interpolate =
-                         deco->As<ast::InterpolateDecoration>()) {
+          if (auto* interpolate = deco->As<ast::InterpolateDecoration>()) {
             auto mod = interpolation_to_modifiers(interpolate->type,
                                                   interpolate->sampling);
             if (mod.empty()) {
diff --git a/src/writer/glsl/generator_impl_function_test.cc b/src/writer/glsl/generator_impl_function_test.cc
index 51c3cd6..6f36da4 100644
--- a/src/writer/glsl/generator_impl_function_test.cc
+++ b/src/writer/glsl/generator_impl_function_test.cc
@@ -536,6 +536,10 @@
   EXPECT_EQ(gen.result(), R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  int a;
+  float b;
+};
 
 Data coord;
 
@@ -585,6 +589,10 @@
             R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  int a;
+  float b;
+};
 
 Data coord;
 
@@ -630,6 +638,10 @@
   EXPECT_EQ(gen.result(), R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  int a;
+  float b;
+};
 
 Data coord;
 
@@ -676,6 +688,10 @@
   EXPECT_EQ(gen.result(), R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  int a;
+  float b;
+};
 
 Data coord;
 
@@ -781,6 +797,9 @@
             R"(#version 310 es
 precision mediump float;
 
+struct S {
+  float x;
+};
 
 S coord;
 
@@ -1046,6 +1065,9 @@
   EXPECT_EQ(gen.result(), R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  float d;
+};
 
 Data data;
 
diff --git a/src/writer/glsl/generator_impl_member_accessor_test.cc b/src/writer/glsl/generator_impl_member_accessor_test.cc
index 9d19353..a7c0925 100644
--- a/src/writer/glsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/glsl/generator_impl_member_accessor_test.cc
@@ -296,6 +296,10 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  int a;
+  mat2x3 b;
+};
 
 Data data;
 
@@ -339,6 +343,10 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  float z;
+  mat4x3 a;
+};
 
 Data data;
 
@@ -380,6 +388,10 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  float z;
+  int a[5];
+};
 
 Data data;
 
@@ -422,6 +434,10 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  float z;
+  int a[5];
+};
 
 Data data;
 
@@ -461,6 +477,10 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Data {
+  float z;
+  int a[5];
+};
 
 Data data;
 
@@ -511,6 +531,13 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Inner {
+  vec3 a;
+  vec3 b;
+};
+struct Data {
+  Inner c[4];
+};
 
 Data data;
 
@@ -564,6 +591,13 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Inner {
+  vec3 a;
+  vec3 b;
+};
+struct Data {
+  Inner c[4];
+};
 
 Data data;
 
@@ -617,6 +651,13 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Inner {
+  vec3 a;
+  vec3 b;
+};
+struct Data {
+  Inner c[4];
+};
 
 Data data;
 
@@ -670,6 +711,13 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Inner {
+  vec3 a;
+  vec3 b;
+};
+struct Data {
+  Inner c[4];
+};
 
 Data data;
 
@@ -719,6 +767,13 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Inner {
+  vec3 a;
+  vec3 b;
+};
+struct Data {
+  Inner c[4];
+};
 
 Data data;
 
@@ -772,6 +827,13 @@
       R"(#version 310 es
 precision mediump float;
 
+struct Inner {
+  ivec3 a;
+  vec3 b;
+};
+struct Data {
+  Inner c[4];
+};
 
 Data data;
 
diff --git a/src/writer/glsl/generator_impl_sanitizer_test.cc b/src/writer/glsl/generator_impl_sanitizer_test.cc
index d35ac15..3af3ae5 100644
--- a/src/writer/glsl/generator_impl_sanitizer_test.cc
+++ b/src/writer/glsl/generator_impl_sanitizer_test.cc
@@ -51,6 +51,9 @@
   auto* expect = R"(#version 310 es
 precision mediump float;
 
+struct my_struct {
+  float a[0];
+};
 
 my_struct b;
 
@@ -100,6 +103,10 @@
   auto* expect = R"(#version 310 es
 precision mediump float;
 
+struct my_struct {
+  float z;
+  float a[0];
+};
 
 my_struct b;
 
@@ -151,6 +158,9 @@
   auto* expect = R"(#version 310 es
 precision mediump float;
 
+struct my_struct {
+  float a[0];
+};
 
 my_struct b;
 
diff --git a/src/writer/glsl/generator_impl_type_test.cc b/src/writer/glsl/generator_impl_type_test.cc
index 7bdb286..2481f6f 100644
--- a/src/writer/glsl/generator_impl_type_test.cc
+++ b/src/writer/glsl/generator_impl_type_test.cc
@@ -183,27 +183,6 @@
 )");
 }
 
-TEST_F(GlslGeneratorImplTest_Type, EmitType_StructDecl_OmittedIfStorageBuffer) {
-  auto* s = Structure("S",
-                      {
-                          Member("a", ty.i32()),
-                          Member("b", ty.f32()),
-                      },
-                      {create<ast::StructBlockDecoration>()});
-  Global("g", ty.Of(s), ast::StorageClass::kStorage, ast::Access::kReadWrite,
-         ast::DecorationList{
-             create<ast::BindingDecoration>(0),
-             create<ast::GroupDecoration>(0),
-         });
-
-  GeneratorImpl& gen = Build();
-
-  TextGenerator::TextBuffer buf;
-  auto* sem_s = program->TypeOf(s)->As<sem::Struct>();
-  ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error();
-  EXPECT_EQ(buf.String(), "");
-}
-
 TEST_F(GlslGeneratorImplTest_Type, EmitType_Struct) {
   auto* s = Structure("S", {
                                Member("a", ty.i32()),
