Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision 1ed3fe7cf44b17c3847cd7808f472cf71e311581)
+++ src/SynTree/Type.cc	(revision b5bec712984f7c93a19d52a84a08277453c65ffa)
@@ -80,5 +80,5 @@
 // These must remain in the same order as the corresponding bit fields.
 const char * Type::FuncSpecifiersNames[] = { "inline", "_Noreturn", "fortran" };
-const char * Type::StorageClassesNames[] = { "extern", "static", "auto", "register", "_Thread_local" };
+const char * Type::StorageClassesNames[] = { "extern", "static", "auto", "register", "__thread", "_Thread_local" };
 const char * Type::QualifiersNames[] = { "const", "restrict", "volatile", "mutex", "_Atomic" };
 
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 1ed3fe7cf44b17c3847cd7808f472cf71e311581)
+++ src/SynTree/Type.h	(revision b5bec712984f7c93a19d52a84a08277453c65ffa)
@@ -84,5 +84,5 @@
 	}; // FuncSpecifiers
 
-	enum { Extern = 1 << 0, Static = 1 << 1, Auto = 1 << 2, Register = 1 << 3, Threadlocal = 1 << 4, NumStorageClass = 5 };
+	enum { Extern = 1 << 0, Static = 1 << 1, Auto = 1 << 2, Register = 1 << 3, ThreadlocalGcc = 1 << 4, ThreadlocalC11 = 1 << 5, NumStorageClass = 6 };
 	static const char * StorageClassesNames[];
 	union StorageClasses {
@@ -93,5 +93,6 @@
 			bool is_auto : 1;
 			bool is_register : 1;
-			bool is_threadlocal : 1;
+			bool is_threadlocalGcc : 1;
+			bool is_threadlocalC11 : 1;
 		};
 
@@ -100,4 +101,6 @@
 		// equality (==, !=) works implicitly on first field "val", relational operations are undefined.
 		BFCommon( StorageClasses, NumStorageClass )
+
+		bool is_threadlocal_any() { return this->is_threadlocalC11 || this->is_threadlocalGcc; }
 	}; // StorageClasses
 
